ディープEP
DeepEP: 効率的なエキスパート並列通信ライブラリ
DeepEPは、複雑な機械学習タスク、特にエキスパート混合(MoE)モデルを含むタスクを処理する際に、コンピュータ(またはGPU)上の通信を高速化し、改善するために設計されたライブラリである。これらのモデルは、問題の異なる部分を処理するために複数の「エキスパート」(専門化されたサブモデル)を使用し、DeepEPはこれらのエキスパート間でデータが迅速かつ効率的に移動することを保証します。
DeepEPは、複雑な機械学習タスク、特にエキスパート混合(MoE)モデルを含むタスクを処理する際に、コンピュータ(またはGPU)上の通信を高速化し、改善するために設計されたライブラリである。これらのモデルは、問題の異なる部分を処理するために複数の「エキスパート」(専門化されたサブモデル)を使用し、DeepEPはこれらのエキスパート間でデータが迅速かつ効率的に移動することを保証します。
DeepEPは、MoE(Mixture of Experts)およびEP(Expert Parallel)シナリオ専用に最適化された次世代分散通信フレームワークです。当社のフレームワークは、GPU向けに高スループット、低レイテンシーの全対全通信カーネルを提供し、MoEスケジューリングとコンポーザブル演算を完璧にサポートします。
純粋なRDMA技術に基づくDeepEPは、推論解読性能のために特別に最適化された低遅延カーネルのセットを提供し、SMリソースを占有することなく優れた並列効率を達成する独自のフックベースの通信-計算オーバーラップ方式を特徴としています。
DeepEPは、FP8を含む低精度演算をサポートし、DeepSeek-V3で提案されたグループ制約付きゲーティングアルゴリズムの最適化を提供します。私たちのフレームワークは特に、NVLinkからRDMAといった異種ドメイン間での効率的なデータ転送をサポートし、トレーニングや推論のプリフェッチタスクで卓越した性能を保証します。
DeepEPはMoEの分配とマージ演算に特化しており、FP8を含む低精度演算をサポートしている。同時に、DeepEPは、DeepSeek-V3論文で提案されたグループリミットゲーティングアルゴリズム用に特別に最適化されており、非対称ドメイン帯域幅転送(NVLinkドメインからRDMAドメインへの転送など)用の一連の高性能コアを提供する。これらのコアは、トレーニングや推論のプリ・ポピュレーション・タスクに対して高いスループットを持つだけでなく、ストリーム・マルチプロセッサ(SM)のカウント制御もサポートしています。レイテンシに敏感な推論デコーディングシナリオのために、DeepEPには、レイテンシを最小化するための純粋なRDMA低レイテンシコアのセットが含まれています。また、このライブラリは、SMリソースを消費しないフックベースの通信と計算のオーバーラップアプローチを導入し、効率をさらに向上させています。
ハイブリッドエキスパートモデルとは、複数の「エキスパート」ネットワークを組み合わせたニューラルネットワークアーキテクチャであり、「ゲート」ネットワークが入力データをどのエキスパートにルーティングするかを決定する。MoEのコンセプトは1991年にJacobs、Jordan、Hintonによって初めて提案されたが、近年まで大規模な言語モデリングには広く使われていなかった。MoEアーキテクチャは、GoogleのSwitch Transformers、MicrosoftのZ-Code、DeepSeekのDeepSeek-V3で使用されており、エキスパートの疎な活性化を通じて、より大規模なモデルの学習と展開を可能にしている。
H800(~160 GB/sのNVLink最大帯域幅)で通常のカーネルをテストし、それぞれをCX7 InfiniBand 400 Gb/s RDMAネットワークカード(~50 GB/sの最大帯域幅)に接続しました。また、DeepSeek-V3/R1の事前学習設定(バッチあたり4096トークン、7168非表示、トップ4グループ、トップ8エキスパート、FP8ディスパッチ、BF16結合)に従っています。
タイプ | 派遣 #EP | ボトルネック帯域幅 | #EPを組み合わせる | ボトルネック帯域幅 |
---|---|---|---|---|
イントラノード | 8 | 153GB/秒(NVLink) | 8 | 158GB/秒(NVLink) |
インターノード | 16 | 43GB/秒(RDMA) | 16 | 43GB/秒(RDMA) |
インターノード | 32 | 44GB/秒(RDMA) | 32 | 47GB/秒(RDMA) |
インターノード | 64 | 46 GB/秒(RDMA) | 64 | 45GB/秒(RDMA) |
低レイテンシのカーネルをH800でテストし、それぞれをCX7 InfiniBand 400 Gb/s RDMAネットワークカードに接続しました(最大帯域幅は50 GB/s)。また、典型的なDeepSeek-V3/R1の本番環境(バッチあたり128トークン、7168の非表示、トップ8のエキスパート、FP8のディスパッチ、BF16の結合)に従っています。
派遣 #EP | レイテンシー | RDMA帯域幅 | #EPを組み合わせる | レイテンシー | RDMA帯域幅 |
---|---|---|---|---|---|
8 | 163名 | 46 GB/秒 | 8 | 318名 | 46 GB/秒 |
16 | 173名 | 43 GB/秒 | 16 | 329名 | 44GB/秒 |
32 | 182名 | 41GB/秒 | 32 | 350名 | 41GB/秒 |
64 | 186名 | 40 GB/秒 | 64 | 353名 | 41GB/秒 |
128 | 192名 | 39 GB/秒 | 128 | 369名 | 39 GB/秒 |
256 | 194名 | 39 GB/秒 | 256 | 360名 | 40 GB/秒 |
DeepEPを使用するには、Hopper GPU、Python 3.8+、CUDA 12.3+、PyTorch 2.1+、およびノード内通信用のNVLinkとノード間通信用のRDMAネットワークが必要です。ライブラリはNVSHMEMの修正バージョンに依存しており、インストール前に設定する必要があります。
開発
# SO ファイルのシンボリックリンクの構築と作成
NVSHMEM_DIR=/path/to/installed/nvshmem python setup.py build
# 特定のSO名は、ご自身のプラットフォームに合わせて変更してください。
ln -s build/lib.linux-x86_64-cpython-38/deep_ep_cpp.cpython-38-x86_64-linux-gnu.so
# テストケースの実行
# NOTES: `tests/utils.py` の `init_dist` 関数を変更してください。
#を自分のクラスタ設定に合わせ、複数ノードに起動する。
python tests/test_intranode.py
python tests/test_internode.py
python tests/test_low_latency.py
インストール
NVSHMEM_DIR=/path/to/installed/nvshmem python setup.py install
もっとDeepEP: https://github.com/deepseek-ai/Deepep