はじめに
DeepEPは、deepseek-aiチームによって開発されたオープンソースの通信ライブラリで、MoE(Mixture-of-Experts)モデルの学習と推論効率、およびEP(Expert Parallelism)の改善に重点を置いています。DeepEPは、NVLinkおよびRDMA技術をサポートし、FP8などの低精度演算と互換性があり、訓練および推論シナリオ用にそれぞれ高効率カーネルで設計されています。このライブラリは、DeepSeekチームの実運用環境、特にノード間の連携が必要なMoEモデルで実証済みであり、システム全体のパフォーマンスを大幅に向上させることができ、AI研究者や開発者が効率的なディープラーニングモデルを構築する際の強力なアシスタントとなります。現在、DeepEPはGitHub上でオープンソース化されており、コミュニティはその改良に参加することができます。
機能一覧
- 効率的な全対全通信GPU間の全対全通信を最適化し、ノード内NVLinkとノード間RDMAをサポートすることで、高速で安定したデータ交換を実現します。
- ハイ・スループット・トレーニング・サポート大規模なデータ転送に対応し、モデルのトレーニング効率を向上させる、トレーニングおよび推論のプリポピュレーション用に設計されたカーネルを提供します。
- 低遅延推論カーネル推論とデコードの段階では、リアルタイム・アプリケーション・シナリオに適した待ち時間を短縮するために、純粋なRDMA技術が使用されています。
- FP8 低精度演算FP8ディストリビューションのネイティブ・サポートにより、リソースが重視される環境でもパフォーマンスを維持しながら計算コストを削減できます。
- 柔軟なリソースコントロールストリーミング・マルチプロセッサ(SM)数の調整をサポートし、開発者はハードウェアの状況に応じて構成を最適化することができます。
- 通信とコンピューティングのオーバーラップフックメカニズムによるシームレスな通信と計算により、GPUの利用率を向上させます。
- クロスドメイン帯域幅の最適化DeepSeek-V3のPacket Limit Domainアルゴリズム向けに、NVLinkからRDMAへの効率的なデータ転送をサポートします。
ヘルプの使用
設置プロセス
DeepEPはGitHubベースのオープンソースプロジェクトで、使用するには手動でのダウンロードと環境設定が必要です。以下は詳細なインストール手順である:
1.前提条件
- オペレーティングシステムGPUやネットワークハードウェアとの互換性のため、Linux(例:Ubuntu 20.04以降)を推奨します。
- ハードウェア要件NVLinkまたはRDMA対応GPU(NVIDIA H800など)を搭載し、高速ネットワーク(InfiniBand 400Gb/sなど)に接続。
- ソフトウェア依存::
- CUDAツールキット(CUDA 11.xまたは12.xなど、ハードウェアと互換性のあるバージョンを推奨)。
- NCCL (NVIDIA Collective Communication Library)。
- NVSHMEMの修正バージョン(DeepEPはこの通信機能に依存しているため、別途インストールする必要がある)。
- Python 3.8以上(テストおよびスクリプト実行用)。
2.DeepEPのソースコードをダウンロードする
ターミナルを開き、以下のコマンドを実行してリポジトリをクローンする:
git clone https://github.com/deepseek-ai/DeepEP.git
cd DeepEP
3.NVSHMEMのインストール
DeepEPはNVSHMEMの修正バージョンに依存しています。NVSHMEM インストールガイド.簡単な手順は以下の通り:
- NVSHMEMのソースコードをダウンロードし、DeepEPが提供するパッチを適用する。
third-party/nvshmem.patch
). - コンパイルしてインストールする:
cd nvshmem patch -p1 < .../third-party/nvshmem.patch make -j && sudo make install
4.DeepEPのコンパイル
DeepEP ディレクトリに移動し、通信ライブラリをコンパイルします:
作る
コンパイル後、プロジェクト内で呼び出せるカーネル・ファイルが生成される。
5.環境変数の設定
DeepEPが正しく動作するためには、仮想チャネルの割り当てなど、NVSHMEM関連のパラメータを設定する必要がある:
export NVSHMEM_IB_SL=0 # トラフィックの競合を避けるための仮想チャネルの設定
アダプティブ・ルーティングを有効にする必要がある場合は、追加設定が可能です(低遅延カーネルのみ):
export NVSHMEM_ENABLE_ADAPTIVE_ROUTING=1
6.設置テスト
提供されたテスト・スクリプトを実行して、DeepEP の機能を検証します:
python tests/test_low_latency.py
出力が通信成功を示していれば、インストールは完了です。
使用方法
DeepEP は、主に MoE モデルに統合されたワークフローを通じて使用され、以下に主な機能の詳細なハウツーガイドを示します:
機能1:高スループットトレーニングの実行
DeepEP の高スループット・カーネルは、MoE モデルの分散学習に適しています。DeepSeek-V3 ベースのモデルがあると仮定すると、以下のステップに従うことができます:
- モデルとデータの準備MoEモデルがエキスパートの並列ロジックで構成され、トレーニングデータセットの準備が整っていることを確認してください。
- DeepEP カーネルの呼び出しトレーニング・スクリプトに DeepEP の全対全通信インタフェースを導入します。例
#include "deep_ep.h" void moe_train(float* input, float* output, int size) { 以下のようになります。 deep_ep_all_to_all(input, output, size, FP8); }
- 構成ハードウェア使用するGPUデバイスを指定します:
cuda_visible_devices=0,1,2,3 ./train_script
- ランニング・トレーニングトレーニング開始後、DeepEPはNVLinkとRDMA間の通信を自動的に最適化します。
特徴2:低遅延推論
低遅延カーネルは、オンライン対話システムなどのリアルタイム推論タスクに適している:
- 積載モデル事前に訓練されたMoEモデルをメモリにロードします。
- 推論カーネルの呼び出し純粋なRDMA通信インターフェースを使用する。例
#include "deep_ep.h" void moe_infer(float* query, float* result, int batch_size) { 以下のようになります。 deep_ep_low_latency_all_to_all(query, result, batch_size); }
- 推論スピードのテスト以下のコマンドを実行し、遅延を測定してください:
python tests/test_inference.py --batch_size 128 --hidden_size 7168
出力には各バッチの推論時間が表示され、リアルタイム要件が満たされていることが確認される。
機能3:FP8コンピューティングの最適化
DeepEPは計算コストを削減するためにFP8配分をサポートしている:
- FP8モードを有効にする通信インタフェースを呼び出す際に、データ型を FP8 に指定する。
- 検証精度テストスクリプトを実行し、FP8とBF16のパフォーマンスと精度の違いを比較します:
python tests/test_fp8.py
- 生産への応用FP8 のコンフィギュレーションを既存のトレーニングや推論プロセスに統合します。
機能4:リソースの制御と最適化
ハードウェアに合わせてSMの数を調整する:
- ハードウェアSMの数を表示する使用
エヌビディア・スミ
GPUのストリームプロセッサ数をチェックする。 - SMリミットの設定スクリプトで指定:
deep_ep_set_sm_limit(32); // SM を 32 個に制限する。
- テストパフォーマンスSMの数を調整した後にベンチマークを実行し、最適な構成を見つける。
ほら
- ネットワーク構成DeepEPはInfiniBandネットワーク上で最適にテストされているが、RoCEではさらに互換性の検証が必要である。
- アダプティブ・ルーティング通常のカーネルでこの機能を有効にすると、デッドロックが発生する可能性があります。
- クラスター・チューニングすべてのテストスクリプトを実行することをお勧めします。
テスト
ディレクトリ)を使用して、クラスターに適合するように設定を自動的に調整します。
これらの手順により、DeepEP をすぐに使い始めることができ、MoE モデルの通信最適化機能をフルに活用できます。