618ZXW

DeepSeekオープンソースパート3:わずか300行のコアコードでV3/R1のトレーニングと推論の重要な秘密

オープンソースウィークの3日目に、 DeepSeekはトレーニングと推論V3/R1システムの背後にある「パワー」を明らかにしました。

DeepGEMM : 高密度およびハイブリッド エキスパート (MoE) 行列乗算演算をサポートする FP8 GEMM (一般行列乗算) ライブラリ。

まず、GEMM について簡単に理解することから始めましょう。

GEMM(一般化行列乗算)は、線形代数における基本的な演算です。科学計算、機械学習、深層学習などの分野で広く利用されており、多くの高性能計算タスクの中核を成しています。

しかし、計算負荷が非常に大きくなることが多いため、GEMM のパフォーマンス最適化は重要なポイントです。

DeepSeek の新たにオープンソース化された DeepGEMM は、「高性能 + 低コスト」の特性を維持し、次のような特徴を備えています。

  • 高性能: Hopper アーキテクチャ GPU では、DeepGEMM は最大 1350+FP8 TFLOPS のパフォーマンスを実現できます。
  • シンプルさ: コアロジックはわずか 300 行程度のコードで構成されていますが、そのパフォーマンスは専門家が調整したカーネルを上回ります。
  • ジャストインタイム (JIT) コンパイル: この方法では、完全なジャストインタイム コンパイル アプローチが使用されます。つまり、実行時に最適化されたコードを動的に生成して、さまざまなハードウェアやマトリックス サイズに適応できます。
  • 依存性ゼロ: このライブラリは、複雑な依存性がなく非常に軽量に設計されているため、導入と使用が簡単になります。
  • 複数のマトリックス レイアウトをサポート: 高密度マトリックス レイアウトと 2 つの MoE レイアウトをサポートしているため、ディープラーニングのハイブリッド エキスパート モデルなど、さまざまなアプリケーション シナリオに適応できます。

簡単に言えば、DeepGEMMは主にディープラーニング、特に大規模モデルの学習と推論における行列演算を高速化するために用いられます。効率的な計算リソースを必要とするシナリオに特に適しており、計算効率を大幅に向上させることができます。

多くのネットユーザーは、このオープンソースリリースに非常に好意的に反応しています。中には、DeepGEMMを数学界のスーパーヒーローに例え、高速計算機よりも高速で、多項式方程式よりも強力だと考える人もいます。

DeepGEMM のリリースを量子状態の安定化の新たな現実に例え、そのクリーンかつ効率的なジャストインタイム コンパイルを称賛する人もいます。

もちろん...NVIDIA の株保有について心配し始めている人もいます...

DeepGEMMの深い理解

DeepGEMM は、簡潔で効率的な FP8 一般行列乗算 (GEMM) を実装するために特別に設計されたライブラリであり、DeepSeek V3 から派生した設計によるきめ細かなスケーリング機能も備えています。

通常の一般的な行列乗算を処理でき、MoE グループの一般的な行列乗算をサポートします。

このライブラリは CUDA で記述されており、軽量の Just-In-Time (JIT) モジュールを使用して実行時にすべてのカーネル プログラムをコンパイルするため、インストール時にコンパイルする必要はありません。

現在、DeepGEMM は NVIDIA の Hopper Tensor Core のみをサポートしています。

累積計算時に FP8 テンソル コアの精度が不十分になる問題を解決するために、CUDA コアを使用した 2 レベル累積 (ブースティング) 方式を採用しています。

DeepGEMM は CUTLASS と CuTe からいくつかのアイデアを借用していますが、それらのテンプレートや代数演算に過度に依存することはありません。

それどころか、このライブラリは、コアカーネル関数が 1 つとコード行数が約 300 行のみと、非常にシンプルに設計されています。

これにより、簡潔で理解しやすいリソースが実現し、Hopper アーキテクチャにおける FP8 行列乗算と最適化手法を誰もが簡単に学習できるようになります。

軽量設計にもかかわらず、DeepGEMM のパフォーマンスは、さまざまなマトリックス形状の専門家によるチューニング ライブラリに匹敵するか、それを上回ります。

では実際のパフォーマンスはどうでしょうか?

チームは、NVCC 12.8 を使用して、H800 上の DeepSeek-V3/R1 推論で使用できる可能性のあるすべての形状 (事前パディングとデコードを含むが、テンソルの並列処理は含まない) をテストしました。

次のグラフは、高密度モデルに使用される標準 DeepGEMM モデルのパフォーマンスを示しています。

テスト結果によると、DeepGEMM のコンピューティング性能は最大 1358 TFLOPS、メモリ帯域幅は最大 2668 GB/s に達します。

高速化の点では、CUTLASS 3.6 に基づく最適化された実装よりも最大 2.7 倍高速になります。

MoE モデルで連続レイアウトをサポートする DeepGEMM のパフォーマンスを見てみましょう。

MoE モデルマスク レイアウトをサポートした場合のパフォーマンスは次のとおりです。

どうやって使うんですか?

DeepGEMM を使用するには、次のような依存関係に注意する必要があります。

  • Hopper アーキテクチャ GPU、sm_90a をサポートする必要があります。
  • Python 3.8 以上。
  • CUDA 12.3 以上 (12.8 を推奨)。
  • PyTorch 2.1 以上。
  • CUTLASS 3.6以上

開発コードは次のとおりです。

 # Submodule must be cloned git clone --recursive [email protected]:deepseek-ai/DeepGEMM.git # Make symbolic links for third-party (CUTLASS and CuTe) include directories python setup.py develop # Test JIT compilation python tests/test_jit.py # Test all GEMM implements (normal, contiguous-grouped and masked-grouped) python tests/test_core.py

インストールコードは次のとおりです。

 python setup.py install

上記の手順を実行すると、deep_gemm を Python プロジェクトにインポートできます。

インターフェースに関しては、通常の DeepGEMM の場合、NT 形式 (非転置 LHS と転置 RHS) をサポートする deep_gemm.gemm_fp8_fp8_bf16_nt 関数を呼び出すことができます。

グループ化された DeepGEMM の場合、連続レイアウトは m_grouped_gemm_fp8_fp8_bf16_nt_contiguous、マスクされたレイアウトは m_grouped_gemm_fp8_fp8_bf16_nt_masked です。

DeepGEMM は、SM の最大数の設定や TMA アライメント サイズの取得などのユーティリティ関数も提供しており、DG_NVCC_COMPILER、DG_JIT_DEBUG などの環境変数もサポートしています。

さらに、DeepSeek チームは、次のようないくつかの最適化手法を提供しています。

  • JIT 設計: すべてのカーネルはインストール時にコンパイルする必要はなく、実行時にコンパイルされます。最適なブロック サイズとパイプライン ステージの動的な選択をサポートします。
  • きめ細かなスケーリング: CUDA コアの 2 層累積を通じて FP8 精度の問題を解決し、2 の累乗ではないブロック サイズをサポートし、SM の使用率を最適化します。
  • FFMA SASS インターリーブ: SASS 命令の yield ビットと reuse ビットを変更することでパフォーマンスが向上します。

興味のある読者は、記事の最後にある GitHub リンクをクリックして詳細を確認してください。

もう一つ

Nvidia の株価は...そうですね...ここ数日下落しています。

しかし、Nvidiaの2025年度第4四半期決算報告は北京時間27日未明に発表される予定なので、その業績に期待が持てる。

DeepGEMM GitHub エントリ: https://github.com/deepseek-a...