NVIDIA、モデル転送を光速化「ModelExpress」発表
NVIDIA は ModelExpress を発表し、モデル重みの転送コストを削減するために P2P RDMA やストレージの直接読み込みを活用する新しいアーキテクチャを提供した。
AIニュース価値スコアβ
主要ニュースAI関連度、新規性、日本での有用性など6軸を公開検証中です。現在、掲載順には使用していません。
- AI関連度
- 100
- 情報源の信頼性
- 100
- 新規性
- 75
- 検索具体性
- 75
- 重複の少なさ
- 100
- 日本での有用性
- 25
AI モデルの学習・推論インフラにおけるデータ転送コスト削減という核心的な課題に対する具体的な新製品発表であり、比較記事が存在しない中で独自の新規情報を提供している。
キーポイント
重複転送の排除と最適化
既存のピアから互換性のあるモデルウェイトを検索し、冗長なストレージやディスクへのアクセスをバイパスして直接 GPU から GPU へ転送する。
NIXL を活用した高速転送
NVIDIA Inference Xfer Library (NIXL) を介して P2P RDMA を使用し、オブジェクトストアからディスクを経由せずに直接 GPU メモリへストリーミングする。
劇的な起動時間の短縮
DeepSeek-V4 Pro のウェイト転送を 10 秒未満で完了させ、全体の起動時間を 8 分から 1 分 44 秒へと大幅に削減した実績がある。
拡張性の高いアーキテクチャ
モデルウェイトの転送だけでなく、JIT カーネルキャッシュや RL(強化学習)後の重み更新などにも同様のアプローチを適用可能である。
マルチソース対応のデータ転送戦略
ModelExpress は、GPUDirect RDMA を介したピア間直接転送、オブジェクトストレージからのストリーミング、ローカルストレージからの読み込みなど、複数の優先順位に基づいた転送経路を動的に選択します。
Redis と Kubernetes による制御平面
制御プレーンでは Redis や Kubernetes メタデータを活用して互換性のあるソースを自動的に発見し、効率的なモデルアーティファクトの配布を実現しています。
ストレージからGPUへの直接ストリーミング
Model Streamerを使用して、ローカルディスクを経由せずにクラウドストレージのチェックポイントをCPUバッファ経由で直接GPUへ転送し、中間コピーを排除します。
重要な引用
Every byte moved has a cost. As model checkpoints grow to hundreds of gigabytes or even a terabyte, that cost adds up quickly.
MX transfers DeepSeek-V4 Pro weights and JIT Kernel cache artifacts from a serving replica into a fresh replica in under 10 seconds, reducing the total startup time to 1 minute 44 seconds from 8 minutes.
The data plane transfers weights along a probed priority chain— moves weights directly from a serving peer over GPUDirect RDMA through NIXL, streams them from object storage through ModelStreamer, or reads them from local storage through GDS.
MX makes this transition automatically: bootstrap once from storage, then scale out GPU to GPU, falling back to storage only when no compatible peer is available.
The checkpoint never lands on local disk, eliminating the intermediate download, reload, and storage volume.
The MX Model Cache Service collapses those requests into one coordinated download: an atomic claim in Metadata Store selects a downloader, while the remaining replicas track its progress and reuse the cached copy.
影響分析・編集コメントを表示
影響分析
この技術は、大規模モデルのトレーニングから推論までのライフサイクルにおいて、データ移動に伴う非生産的な時間を大幅に削減する画期的な解決策です。特に、マルチノード環境でのスケーラビリティやコスト効率を向上させることで、AI インフラ運用のパフォーマンス基準を根本から変える可能性があります。
編集コメント
モデルサイズの増大に伴うデータ移動のボトルネックを解消するこのアプローチは、大規模分散システムの運用効率において極めて重要です。特に P2P RDMA を活用した直接転送は、実環境での起動時間短縮に即効性があり、今後の AI インフラ設計における標準的なベストプラクティスとなるでしょう。
データ転送には必ずコストがかかります。モデルのチェックポイントが数百ギガバイト、あるいはテラバイト規模に成長するにつれ、そのコストは急速に膨らみます。さらに深刻なのは、クラスター内でこれらのモデル重み(ウェイト)を移動させる作業が極めて頻繁に行われている点です。
具体的には、コールドスタート時にリモートストレージから GPU メモリへ重みを引き出す必要がありますし、オートスケーリングやローリングアップデートでは新しいレプリカに重みを配置する必要があります。また、RL(強化学習)によるポストトレーニングでも、更新された重みを一貫してトレーナーからロールアウトワーカーへ転送し続ける必要があります。
これらは異なるワークフローに見えますが、本質的には同じ「コスト」を課しています。つまり、有用な作業を開始する前に、重みを移動させるために費やされる時間です。
ModelExpress: モデル重みのライフサイクルを加速する
NVIDIA ModelExpress(MX)は、シンプルな考え方をベースに構築されています。モデルを読み込む前に、「互換性のある重みのコピーがすでにどこにあるか」を確認することです。各レプリカを独立したコールドスタートとして扱うのではなく、MX は利用可能な最速のソースと転送経路を選択します。
サービングピア(接続先)が GPU 内に互換性の高い重みを保持している場合、MX は NVIDIA Inference Xfer Library (NIXL) を介して P2P RDMA で直接 GPU から GPU へ転送を行います。これにより、オブジェクトストレージやローカルディスク、ホストメモリへの冗長なアクセスを回避できます。
もし利用可能なピアが存在しない場合、MX はサポートされている最速の経路からブートストラップします。具体的には、ディスクに書き留めることなく、あるいはローカルファイルを直接 GPU メモリへ読み込むことなしに、オブジェクトストアからストリーミング転送を行います。
MX は、DeepSeek-V4 Pro の重み付けデータと JIT カーネルキャッシュのアーティファクトを、稼働中のレプリカから新規のレプリカへ 10 秒未満で転送します。これにより、起動までの総時間を従来の 8 分から 1 分 44 秒に短縮しました。
残りの記事では、MX が GPU メモリへのデータ転送経路をどのように選択するか、特に稼働中のレプリカからの P2P RDMA を最優先し、冗長なダウンロードやコピーを排除する仕組みについて解説します。さらに、このアプローチがカーネルキャッシュの再利用や RL(強化学習)による重み付けデータの更新配布にも応用されている点も紹介します。
image*図 1. ModelExpress の概要*
リモートストレージから GPU メモリまで、すべての工程を加速する
新しいワーカーが重み付けデータを入手できるのは、以下の 3 か所のいずれかです。
- リモートストレージ(Hugging Face や S3 など)
- ローカルストレージ
- モデルを既に稼働させている他のワーカー
最初のワーカーの場合、まだピアとなるワーカーが存在しないため、ストレージからブートストラップする必要があります。MX はオブジェクトストレージからのチェックポイントストリーミングや、高速なローカルストレージからの読み込みに対応しており、いずれの経路でも不要なコピーを排除します。
一度目のワーカーが稼働を開始すると、最適なデータソースは切り替わります。その重み付けデータはすでに GPU メモリ上に配置され、前処理も完了しているため、互換性のある次のワーカーからは P2P RDMA を経由して直接読み込むのが理想的です。MX はこの切り替えを自動で行います。つまり、ストレージからのブートストラップを一度行えば、その後は GPU から GPU へスケールアウトし、互換性のあるピアが利用できない場合のみストレージにフォールバックします。
最初のワーカーの起動:ストレージからのブートストラップ
リモートオブジェクトストレージから GPU へ:ローカルディスクの回避
チェックポイントがクラウドバケットに保存されており、キャッシュ用のディスク層を別途用意・管理したくない場合、MX は Model Streamer を活用して、再利用可能な CPU 用一時バッファを経由し、safetensors ファイルを直接 GPU に転送します。これにより、チェックポイントはローカルディスクに書き込まれることがなく、中間的なダウンロードや再読み込み、ストレージボリュームの増設といった手間が不要になります。
Model Streamer はマルチスレッド対応のテンソルリーダーを使用し、チェックポイントの断片(シャード)間で並列的に範囲を指定してデータを取得します。テンソルが届き次第、リモートからの読み込みと GPU への配置処理をパイプライン化して実行されます。つまり、既に取得が完了したテンソルは推論エンジンへ渡される一方、後続のテンソルはまだ取得中の状態です。この仕組みにより、ストレージ、ネットワーク、GPU 間のデータ転送経路が常に稼働し続けつつ、ホスト側のメモリ使用量は一定範囲に抑えられます。
テンソル並列処理(tensor-parallel)環境では、参加する各ランクがリモートからの読み込みを分担し、通常は NCCL を介して結果を共有します。これにより、すべてのランクが独立してフルチェックポイントをダウンロードする必要がなくなります。MX はこの分散ストリームを推論エンジンの重みローダーに直接接続し、最初のワーカーを、後続する互換性のあるレプリカ向けの P2P ソースとして機能させる準備を整えます。
クラスターへの取り込み:一度のダウンロードで済ます
クラスターが共有ディスクキャッシュ層(Kubernetes の永続ボリュームなど)を維持している場合、MX はその階層へのデータ転送を一度だけ行うように制御します。例えば、10 個のレプリカが同時に 806 GiB の DeepSeek-V4 Pro モデルを取得しようとした場合、ネットワーク上では同じ ingress バンド幅を巡って競合しながら、合計約 8 TiB の同一データを重複して転送することになります。MX Model Cache Service はこうしたリクエストを統合し、単一の協調されたダウンロードとして処理します。メタデータストアにおけるアトミックな要求によりダウンローダーが選定され、残りのレプリカはその進捗を追跡しながらキャッシュされたコピーを再利用します。結果として、クラスターは外部からのダウンロードコストを一度だけ支払えばよく、すべてのレプリカが同じキャッシュ済みチェックポイントから処理を開始できるようになります。
ローカルストレージから GPU へ:ホストメモリを経由しない転送
システムで GPUDirect Storage (GDS) がサポートされている場合、MX は NIXL のマルチスレッド対応 GDS バックエンドを通じて、チェックポイントファイルを直接ローカルストレージから GPU メモリへ読み込みます。NIXL はバッチ処理されたテンソル読み取りを並列実行し、ホストメモリを経由せず、従来のロードラーが必要とする中間コピーも不要にして直接 GPU メモリに書き込みます。ユーザーが GDS を明示的に有効化する必要はありません。MX がその機能を自動的に検出し、利用できない場合は別の読み込み戦略へ自動切り替えます。
ローカルストレージから GPU へ:ModelStreamer との連携による読み込みパイプライン化
MX は ModelStreamer を通じて、ローカルのチェックポイントも読み込めます。複数の OS スレッドが safetensors を並列に読み込み、設定可能な CPU バッファへ格納します。一方、処理済みのテンソルは GPU へ転送され、その後も並行して読み出しが続きます。
GDS との違いは、この経路ではホストメモリを経由する点です。しかし、ディスク I/O と GPU への配置を重畳させることで OS のページキャッシュの恩恵を受けられ、ストレージから直接 GPU にアクセスできない環境でも、移植性の高い高速パスを提供します。
最初のワーカー以降は、 serving ペアからフェッチする
これが MX の中核機能です。同じモデルを既に処理しているレプリカが一つでも存在すれば、重み(ウェイト)の移動はほぼ完了しています。つまり、それらは GPU メモリ上にあり、後処理も済み、推論エンジン用にレイアウトされた状態なのです。
MX はそのレプリカを生きた重みのソースとして扱います。互換性を確認した後、ソース GPU からターゲット GPU へ直接テンソルを転送します。新しいレプリカが重みをロードすると、すぐにソースプールに参加し、次のレプリカはそこから読み込む対象となります。
成功する転送ごとにプールは拡大し、デプロイメントの規模拡大に合わせて、冷たいロード(コールドロード)の繰り返しではなく、GPU から GPU への扇状展開(ファンアウト)を実現します。
MX のコントロールプレーンは互換性のあるピアの発見、転送メタデータの交換、ソースの準備状況の追跡を担当しますが、重みバイトそのものを扱うことはありません。一方、データプレーンでは MX はデフォルトとして NIXL を転送エンジンとして採用しており、プラグイン可能なバックエンドにより、Infiniband、RoCE、NVLink、EFA といった多様なネットワーク環境で最高性能を発揮します。また、MX は fabric-lib やスタンドアロンの Mooncake などのライブラリが MX と統合できるよう、第一級クラスのトランスポートインターフェースを提供しています。
image*図 2. NIXL を介したピアツーピア GPUDirect RDMA による重み転送*
転送を開始する前に、MX はテンソルレイアウトを決定するモデルとランタイム設定から mx_source_id を計算し、ID が一致するピアのみを対象とします。これらのピアの発見は、Redis、Kubernetes CRD、あるいは k8s-service(サーバーレス)メタデータバックエンドを通じてコントロールプレーンが行います。**
NIXL のメモリ登録オーバーヘッドの最適化
NIXL がテンソルを RDMA 転送する前に、その GPU メモリ領域を登録する必要があります。これはリモートアクセスに使用される Remote Key (rkey) を返す ibv_reg_mr 呼び出しです。大規模モデルには数万個のテンソルが含まれるため、一つずつ登録していくと時間がかかり、予算(許容範囲)を超えてしまう可能性があります。デフォルトでは MX は各テンソルを個別に登録しますが、この登録コストを削減するための 2 つのオプトイン戦略が存在します:
プール登録では、各テンソルではなく基盤となる cudaMalloc の割り当てを 1 回だけ登録するため、一般的なモデルで登録回数を 80〜99% 削減できます。転送のセマンティクスには一切変更がありません。
VMM アリーナ登録はさらに一歩進んでいます。CUDAPluggableAllocator を導入して、ロード時のすべての割り当てを単一の 16 TiB の仮想アドレスアリーナにルーティングします。そしてロード完了時に、使用済みの範囲全体を dmabuf ベースのメモリ領域として一括登録します。これにより、テンソルごとの 1 回ずつだった登録呼び出しが、全体で 1 回に集約されます。各テンソルの記述子は、単一の領域内でのオフセット値を持つだけになります。
図 3 に示すように、DeepSeek-V4-Pro を vLLM エンジン上で TP=8 で実行し、各アプローチの平均 NIXL 登録時間を測定しました。
image*図 3. NIXL メモリ登録の最適化*
ランタイムパス選択と安全なフォールバック
起動時、MX は利用可能な機能をプローブし、環境がサポートしないパスは自動的にスキップします。適用可能な最初の戦略は、現在の優先順位に従って実行されます:P2P RDMA → ModelStreamer → GDS → デフォルトローダー(ホストステージングされた POSIX I/O)。いずれのパスも利用できない場合や、モデル状態を変更する前に失敗した場合は、MX は自動的に次のパスへ移行します。重みの書き込みが開始された後に障害が発生した場合でも、モデルを再初期化してから続行するため、部分的に書き込まれた重みが提供されることはありません。
P2P リトライは転送開始前のメタデータ障害時のみ代替ピアを試行し、ネイティブローダーが最終的なフォールバックとして機能します。この能力駆動型の設計により、MX コアはハードウェア・ソフトウェアを問わずプラットフォームに依存せず、サポートされている環境でのみ固有の高速パスが有効化されます。
エンドツーエンドの結果
DeepSeek-V4-Pro を 8xB200 GPU ノード(NVIDIA ConnectX-7 NIC 搭載)で実行し、異なるコールドスタートシナリオにおけるモデル読み込み時間の総計を比較しました。各レプリカは vLLM 0.23.0 を使用し、TP=8、--enable-flashinfer-autotune オプションを有効にしています。以下に Figure 4 を示します。
image*Figure 4. HF と ModelStreamer (S3)、ディスク、P2P RDMA を比較したエンドツーエンドのコールドスタートモデル読み込み時間*
単なる読み込みではなく、ウォームアップ:コンパイル済みカーネルの継承
重みを GPU メモリに転送することは重要ですが、モデルを読み込んだだけではすぐにサービス提供できる状態ではありません。最初のフォワードパス実行時に、エンジンでは JIT コンパイルとオートチューニング(torch.compile、Triton、DeepGEMM、TileLang など)が行われ、特定のモデル・データ型・量子化設定・GPU に合わせた CUDA グラフがキャプチャされます。DeepSeek-V4 Pro のような大規模モデルの場合、このプロセスには数分を要し、MX による重み読み込みレイテンシの削減が進むと、これが起動コストの主要部分を占めるようになります(以下に Figure 5 を示します)。
image*Figure 5. DeepSeek-V4 Pro の起動時間内訳(TP=8 vLLM)*
この繰り返されるウォームアップは回避可能です。モデル、ソフトウェアスタック、GPU アーキテクチャが一致している場合、1 つのレプリカがコンパイルコストを負担し、他のレプリカはその結果として得られたキャッシュを継承できます。
MX のアーティファクト転送 API は、ファイルベースのアーティファクトをパッケージ化し、NIXL の CPU から CPU への RDMA パ経由で登録済みのホストメモリバッファ間で直接転送します。その後、ターゲットエンジンのキャッシュディレクトリに検証してインストールされます。これにより、Kubernetes で共有の ReadWriteMany (RWX) ボリュームが必要なくなる一方で、アーティファクト固有の mx_source_id によって互換性のないレプリカ間での誤った再利用を防ぎます。Redis や Kubernetes のメタデータバックエンドが設定されている場合、MX は標準的なキャッシュ場所を自動的に検出します。
カーネルアーティファクト転送が起動時間をどれだけ短縮できるかを測定するため、同じセットアップでテストを行いました。アーティファクト対応のランでは、Triton/DeepGEMM/TileLang/CuTe DSL/FlashInfer のキャッシュが転送されました。グラフは、プロセス開始から API 利用可能になるまでの主要な起動ステージと、全体の経過時間を比較しています。
image*図 6. ModelExpress による総起動時間の削減*
ステップごとに重みが変化する場合:RL 事後トレーニング
これまでの議論は、モデルの重みを読み込まれた後は固定されるという前提に基づいていました。しかし、強化学習(RL)におけるポストトレーニングはこの前提を覆します。トレーナーはステップごとにポリシーを更新するため、ロールアウトを生成する推論アクターは、次の生成ラウンドの前にその更新された重みを取得する必要があります。推論の起動時と同様に、重みの移動も RL においてクリティカルパス上に位置しています。ロールアウトワーカーは、トレーナーが持つ分散レイアウト(FSDP/DTensor のシャードや Megatron の TP、PP、EP パーティションなど)から、推論エンジン側のレイアウトへ重みが転送されるのを待機することになります。
image*図 7. ModelExpress は RL のリフィットをレシーバー主導で実現します*
ModelExpress(MX)は、以下の 4 つのステージを通じてリフィットを推進します。
- Publish(公開):各トレーナーランクが、既に所有しているテンソルやシャードを MX に登録します。これには形状、データ型、配置情報、および MX へのパラメータマッピングといったメタデータが含まれます。
- Discover(発見):ロールアウトワーカーは、MX を介して要求された重みバージョンとその利用可能なソースを検索します。
- Plan(計画):レシーバー側では、公開された所有情報を自らのターゲットレイアウトにマッピングし、必要なテンソルや範囲を保持するソースを特定します。
- Pull, convert, and load(取得・変換・読み込み):レシーバーは、これらのソースに対してワンサイドドリード(片方向読み取り)を直接実行します。
MX には、受信側主導のリフィット(再調整)を実現する中核的な構成要素が含まれており、顧客は現在、実際の統合プロセスでそれらの評価を進めています。また、Fireworks/Cursor や Cognition など、最近の RL(強化学習)ランで採用されている手法である、クロスクラスター間の重み転送に用いられる「デルタ重み差分リフィット」の実験も進めています。
Dynamo への貢献とロードマップ
MX は vLLM と SGLang にネイティブ対応しており、Dynamo や llm-d を含むさまざまな推論フレームワークでの運用をサポートしています。
Dynamo のオープンソースコミュニティは、TensorRT-LLM とのより深い統合や、推論機能の拡大に向けて積極的に活動しています。最新のドキュメントを確認し、GitHub の ロードマップ でプロジェクトの方向性を把握した上で、ご自身の環境で利用可能なワークフローを試してみてください。そして、プロジェクトの未来を形作るためのフィードバックを提供していただければ幸いです。
謝辞
ModelExpress はチーム全体での取り組みです。MX チームのメンバー、特に Zhongdongming Dai 氏と Tanushriya Singh 氏のプロジェクトへの核心的な貢献に感謝します。また、プロジェクトの技術的な方向性に関する指導をいただいた Itay Neeman 氏、Anish Maddipoti 氏、Istvan Haller 氏、Omri Kahalon 氏、そして llm-d の統合支援を行っていただいた Red Hat の Will Eaton 氏にも深く御礼申し上げます。
原文を表示
Every byte moved has a cost. As model checkpoints grow to hundreds of gigabytes or even a terabyte, that cost adds up quickly. To make things even worse, moving these model weights around the cluster is extremely common. For instance, a cold start may pull weights from remote storage into GPU memory; autoscaling and rolling updates must populate each new replica; and RL post-training continuously moves updated weights from trainers to roll out workers. These may look like different workflows, but they impose the same recurring tax: time spent moving weights before useful work can begin.
ModelExpress: Accelerating the model weight lifecycle
NVIDIA ModelExpress (MX) is built around a simple idea: Before loading a model, first ask where a compatible copy of its weights already lives. Rather than treating every replica as an independent cold start, MX chooses the fastest available source and transfer path.
When a serving peer already holds compatible weights in GPU, MX transfers them directly from GPU to GPU over P2P RDMA via NVIDIA Inference Xfer Library (NIXL), bypassing redundant access to object storage, local disk, and host memory. When no peer is available, MX bootstraps from the fastest supported path by streaming from an object store without landing on disk or reading local files directly into GPU memory.
MX transfers DeepSeek-V4 Pro weights and JIT Kernel cache artifacts from a serving replica into a fresh replica in under 10 seconds, reducing the total startup time to 1 minute 44 seconds from 8 minutes. The rest of the post shows how MX selects the fastest available path to GPU memory, prioritizing P2P RDMA from a serving replica and eliminating redundant downloads and copies along the way. It then extends the same approach to reusing kernel caches and distributing RL weight updates.

Accelerating every stage from remote storage to GPU memory
Every new worker must get its weights from one of three places: remote storages (e.g. HF or S3), local storage, or another worker already serving the model. For the first worker, there is no peer yet, so it must bootstrap from storage. MX can stream the checkpoints from object storage or load it from fast local storage, removing avoidable copies along either path.
Once that first worker is serving, the preferred source changes. Its weights are already resident, post-processed, and laid out in GPU memory, so every compatible worker after it should load directly from that peer over P2P RDMA. MX makes this transition automatically: bootstrap once from storage, then scale out GPU to GPU, falling back to storage only when no compatible peer is available.
Starting the first worker: Bootstrap from storage
Remote object storage to GPU: Avoiding local disk
When the checkpoint lives in a cloud bucket and you would rather not provision and manage a disk cache tier, MX uses the Model Streamer to pull safetensors through a reusable CPU staging buffer and into GPU. The checkpoint never lands on local disk, eliminating the intermediate download, reload, and storage volume.
Model Streamer uses a multithreaded tensor reader to fetch tensor ranges concurrently across checkpoint shards. As tensors arrive, it pipelines remote reads with GPU placement: completed tensors are passed to the inference engine while later tensors are still being fetched. This keeps the storage, network, and GPU copy paths busy while reusing a bounded amount of host memory.
In tensor-parallel deployments, the participating ranks divide the remote reads and share the results, typically over NCCL, instead of having every rank download the full checkpoint independently. MX connects this distributed stream directly to the inference engine’s weight loader, preparing the first worker to become the P2P source for every compatible replica that follows.
Cluster ingress: Download once, not N times
When a cluster maintains a shared disk cache tier (e.g. persistent volumes in K8s), MX ensures that the fleet populates it only once. If 10 replicas concurrently want to fetch the 806 GiB DeepSeek-V4 Pro model, they will need to pull roughly 8 TiB of identical data across the network while competing for the same ingress bandwidth. The MX Model Cache Service collapses those requests into one coordinated download: an atomic claim in Metadata Store selects a downloader, while the remaining replicas track its progress and reuse the cached copy. The cluster pays the external download cost once, then every replica can begin from the same cached checkpoint.
Local storage to GPU: Bypassing host-memory staging
When GPUDirect Storage (GDS) is supported in the system, MX reads checkpoint files directly from local storage into GPU memory through NIXL’s multithreaded GDS backend. NIXL executes batched tensor reads in parallel directly into GPU memory, bypassing host memory and the staging copy required by a conventional loader. Users don’t need to enable GDS explicitly: MX detects the capability automatically and falls back to another loading strategy when it is unavailable.
Local storage to GPU: Pipelining local reads with ModelStreamer
MX can also load local checkpoints through ModelStreamer. Multiple OS threads read safetensors concurrently into a configurable CPU buffer while completed tensors move to the GPU and later reads continue in parallel. Unlike GDS, this path still stages through host memory, but it overlaps disk I/O with GPU placement, benefits from the OS page cache, and provides a portable fast path when direct storage-to-GPU access is unavailable.
Starting every worker after the first: Fetch from a serving peer
This is the key feature of MX. Once another replica is already serving the same model, the weights have completed most of their journey: they are resident in GPU memory, post-processed, and laid out for the inference engine. MX treats that replica as a live weight source. After confirming compatibility, it transfers the tensors directly from the source GPU to the target GPU. Once its weights are loaded, the new replica joins the source pool, giving subsequent replicas another peer to load from. With every successful transfer, that pool grows alongside the deployment, turning scale-out into GPU-to-GPU fan-out instead of repeated cold loads.
The MX control plane discovers compatible peers, exchanges transfer metadata, and tracks source readiness, but never handles the weight bytes themselves. On the data plane, MX uses NIXL as a default transfer engine whose pluggable backends allow for peak performance across a variety of networks, such as Infiniband, RoCE, NVLink, EFA, etc. MX has a first-class transport interface that allows libraries such as fabric-lib and standalone Mooncake to integrate with MX.

Before any transfer begins, MX computes an mx_source_id from the model and runtime settings that determine tensor layout, then considers only peers with a matching ID. The control plane discovers those peers through Redis, Kubernetes CRDs, or k8s-service (serverless) metadata backends. **
Optimizing NIXL memory registration overhead
Before NIXL can RDMA a tensor, the GPU memory backing it has to be registered: an ibv_reg_mr call that returns the Remote Key (rkey) used for remote access. A large model has tens of thousands of tensors, and registering them one at a time is slow enough to show up in the budget. By default, MX registers each tensor individually. Two opt-in strategies reduce that registration cost:
- Pool registration registers each underlying cudaMalloc allocation once instead of each tensor, cutting registration count by 80 to 99 percent on typical models with no change to transfer semantics.
- VMM arena registration goes further. It installs a CUDAPluggableAllocator that routes every load-time allocation into a single 16 TiB virtual-address arena, then registers the whole used range as one dmabuf-backed memory region at end of load. Registration collapses from one call per tensor to one call, total; each tensor descriptor simply carries an offset into that single region.
Using DeepSeek-V4-Pro TP=8 on the vLLM engine, as shown in Figure 3, below, we measured the average NIXL registration time for each approach.

Runtime path selection and safe fallback
At startup, MX probes the available capabilities, automatically skipping any path the environment does not support. The first applicable strategy runs in the current priority order: P2P RDMA -> ModelStreamer -> GDS -> default loader (host-staged POSIX I/O). If a path is unavailable or fails before modifying the model state, MX falls through automatically. If a failure occurs after weights have begun landing, it reinitializes the model before continuing, so partially written weights are never served.
P2P retries alternate peers only for metadata failures before transfer begins, and the native loader remains the final fallback. This capability-driven design keeps the MX core hardware and software agnostic, with platform-specific fast paths enabled only where supported.
End-to-end results
We ran DeepSeek-V4-Pro on an 8xB200 GPU node with NVIDIA ConnectX-7 NICs and compared the total model loading time across different cold start scenarios. Each replica used vLLM 0.23.0 with TP=8 and --enable-flashinfer-autotune. See Figure 4, below.

Warm, not just loaded: Inheriting the compiled kernels
Getting weights into GPU memory is critical, but a loaded model is not yet ready to serve. During its first forward passes, the engine JIT-compiles and autotunes kernels (e.g. torch.compile, Triton, DeepGEMM, TileLang, and etc.) and captures CUDA graphs for the exact model, dtype, quantization, and GPU. For models such as DeepSeek-V4 Pro, this can take several minutes and can become the dominant startup cost once MX reduces weight-loading latency (see Figure 5, below).

That repeated warmup is avoidable. When the model, software stack, and GPU architecture match, one replica can pay the compilation cost and the rest can inherit the resulting caches.
MX’s Artifact Transfer API packages these file-backed artifacts, transfers them directly between registered host-memory buffers over NIXL’s CPU-to-CPU RDMA path, then verifies and installs them in the target engine’s cache directory. This eliminates the need for a shared ReadWriteMany (RWX) volume in Kubernetes, while an artifact-specific mx_source_id prevents reuse across incompatible replicas. MX detects standard cache locations automatically when a Redis or Kubernetes metadata backend is configured.
We ran using the same setup to measure how much the kernel artifact transfer can reduce the startup time. The artifact-enabled run transferred the Triton/DeepGEMM/TileLang/CuTe DSL/FlashInfer caches. The chart compares the major startup stages and total wall-clock time from process start until the API was ready.

When the weights change every Step: RL post-training
Everything so far assumes a model’s weights are fixed once loaded. RL post-training breaks that assumption. A trainer updates the policy every step, and the inference actors generating rollouts must pick up those weights before the next round of generation. As with inference startup, weight movement is on the critical path in RL: rollout workers wait while updated weights move from the trainer’s distributed layout (whether FSDP/DTensor shards or Megatron TP, PP, and EP partitions) into the inference engine’s layout.

MX drives the refit through the following four stages:
- Publish: Each trainer rank advertises the tensors or shards it already owns, together with metadata describing their shape, dtype, placement, and parameter mapping to MX.
- Discover: A rollout worker looks up the requested weight version and its available sources through MX.
- Plan: The receiver maps the published ownership information onto its own target layout and identifies which sources contain the required tensors or ranges.
- Pull, convert, and load: The receiver issues one-sided reads directly against those sources.
MX includes the core building blocks for receiver-driven refit, and customers are evaluating them in active integrations. We are also testing delta weight diff refits for cross-cluster weight transfer, a technique used by Fireworks/Cursor, Cognition, and more in recent RL runs.
Contributing to Dynamo and our roadmap
MX has native integrations with vLLM and SGLang and supports serving frameworks including Dynamo and llm-d.
The Dynamo open source community is actively working toward deeper TensorRT-LLM integration and broader inference capabilities. Explore the current Dynamo documentation and roadmap, try the available workflows in your own environment, and contribute feedback to help shape the project’s direction.
*Acknowledgments***
*ModelExpress is a team effort. Thank you to the rest of the MX team, Zhongdongming Dai and Tanushriya Singh for their core work on the project. We’re grateful to Itay Neeman, Anish Maddipoti, Istvan Haller, and Omri Kahalon for their guidance on the project’s technical direction, and Will Eaton at Red Hat for his support on the llm-d integration.*
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み