2025/09/15 18:38 Llama.cpp: Deterministic Inference Mode (CUDA): RMSNorm, MatMul, Attention

やっほー、ロボ子!今日は決定論的モードの配管追加について話すのじゃ!

博士、こんにちは。決定論的モードの配管追加、ですか。具体的にはどのようなものでしょう?

ふむ、CMakeオプション`GGML_DETERMINISTIC`とか、環境変数、CLI `--deterministic`で制御できるらしいぞ。要するに、計算結果が毎回同じになるようにするってことじゃ。

なるほど。再現性が高まるということですね。どのような場面で役立つのでしょうか?

例えば、モデルのデバッグとか、厳密な検証が必要な場合に便利じゃな。同じ入力に対して常に同じ出力が得られるってのは、安心感が違うぞ。

確かにそうですね。プロジェクト01では、バッチ不変性とクロスラン決定論のためのRMSNormテストが行われたとのことですが、これはどういう意味ですか?

RMSNormは、ニューラルネットワークの学習を安定させるための正規化手法の一つじゃ。バッチ不変性ってのは、バッチサイズが変わっても結果が変わらないってこと、クロスラン決定論は、異なる環境で実行しても結果が同じってことじゃな。

なるほど、理解しました。プロジェクト02では、決定論的なCUDA matmulが実装されたとのことですが、これはGPUを使った行列積の計算を決定論的に行うということでしょうか?

その通り!決定論的モードでは、cuBLASをゲートオフして、カスタムカーネルにルーティングするらしいぞ。mmvfベースの決定論的列タイリングフォールバックも実装されたみたいじゃな。

cuBLASを使わないのは、何か理由があるのでしょうか?

cuBLASは非決定論的な場合があるからの。カスタムカーネルを使うことで、より厳密に結果を制御できるってわけじゃ。

テストスイートも拡張されたとのことですが、どのようなテストが行われたのでしょうか?

F32/F16/BF16のデータ型で、Mが256,512、Kが1024,4096、Bが最大64の行列に対してテストが行われたみたいじゃな。オプションのMoE (mul_mat_id) 不変性テストも追加されたらしいぞ。

MoE不変性テストですか。それはどのようなテストなのでしょう?

MoEはMixture of Expertsの略で、複数の専門家モデルを組み合わせて使う技術じゃ。MoE不変性テストは、MoEを使った場合に結果が変わらないことを確認するテストじゃな。

`docs/DETERMINISM.md`も更新されたとのことですが、MatMulセクションにどのような情報が追加されたのでしょうか?

MatMulの決定論的な実装に関する詳細な情報が追加されたはずじゃ。アルゴリズムの選択や、パフォーマンスに関する考慮事項などが書かれているんじゃないかの。

`scripts/build-in-container.sh`の変更点として、CUDAでビルドする場合のdockerのGPUパストスルーが追加されたとのことですが、これはどういうことでしょうか?

Dockerコンテナ内でCUDAを使う場合に、ホストマシンのGPUをコンテナに直接アクセスさせるための設定じゃ。これによって、コンテナ内でGPUを使った高速な計算ができるようになるぞ。

CTestにテストが組み込まれたとのことですが、CPUとCUDAの両方のスイートが合格したとのこと、素晴らしいですね。

じゃろ!A4000 x2 + RTX 2000E Adaで合格したってことは、かなり信頼性が高いってことじゃな。

今回のアップデートで、決定論的な計算がより身近になったように感じます。博士、ありがとうございました。

どういたしまして!ところでロボ子、決定論的な計算って、まるで運命が決まっているみたいじゃな。でも、私たちが書くコードは、そうじゃないと信じたいぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。