
2026/08/04 19:00
単一AMD MI300X上で動作する DeepSeek V4 Flash
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
このリポジトリは、量子化(quantization)オフロードなしで単一の AMD MI300X GPU 上で DeepSeek-V4-Flash-0731 のハイパフォーマンスかつ生産環境でのデプロイを可能にする。このセットアップでは、ネイティブ精度と大容量コンテキストウィンドウがサポートされており、256K で検証され、アーキテクチャレベルでは最大 1M が対応可能である。また、AMD FP8 正誤エラー(FNUZ E4M3 バリアント起因)および MoE ルーティングのバグといった重要なハードウェア固有の問題を解決している。パフォーマンスベンチマークは例外的に優れている:シングルストリームモードでの持続的デコード速度が 1 秒当たり 168.6 トークン、プリフィル速度が 7.9–8.5K トークン/秒、メモリ不足またはエンジンエラーなしで 64 ストリーム跨过のバースト並列性が 1 秒当たり 830 トークンまで到達する。これらの成果を達成するには、vLLM に ROCm ナイトリーアーティファクト(vLLM_IMAGE: vllm/vllm-openai-rocm@sha256:e68d18b2ba50298661bfc49baf01158fbf036645c2362cccf3e8a7a79fe6c69a)を適用した特定のパッチが必要です。具体的には、MXFP4 ビットマトリックスルーティングマスク、フューズド SiLU 配置、gfx942 シェイプ用 AITER チューニングテーブル、FP8 キャッシュライターのシャッフル修正が含まれる。デプロイには大きなリソースを必要とする:HBM で約 192 GiB(最高水位は約 204.5 GB)、CPU KV テアで約 235 GiB のシステム RAM、ディスク容量で約 500 GB(モデルキャッシュ単体でも約 156 GB)。プロセスには、CUDA グラフキャプチャのための初期の起動フェーズ(約 5 分)が含まれ、その後健康チェックにより安定したメモリ使用量(GPU KV プールが約 20 GB、プレフィックスキャッシュ排退用 CPU テアが約 96 GiB)を確認する。準備完了後、システムは API エンドポイントを介して煙テストを行うことができ、これらは DSpark-7 推測デコード(確率的ドラフティングとブロック拒否)をサポートしている。このソリューションは、企業に最先端 AMD ハードウェアを複雑な AI ワークロードに効果的に利用するための産業グレードの経路を提供する。
本文
MI300X 単一カードでの DeepSeek V4 Flash 実行環境
このリポジトリは、AMD MI300X の一台で production 環境にて
deepseek-ai/DeepSeek-V4-Flash-0731 を動作させるための構成設定とパッチを提供します。
Docker Compose スタック、SHA-256 ピニングされたファイルオーバーレイ、upstream に対する参照差分、およびチューニングテーブルが含まれます。チェックポイントは出荷時のものであり、追加の重み量子化またはオフロードなしで動作します。
🚀 パフォーマンス結果 (vLLM ROCm nightly 0.26.1rc1.dev229+g124154a88.rocm723, AITER 0.1.19)
| メトリック | 結果 |
|---|---|
| シングルストリームデコード (各ストリームの中央値、DSpark-7) | 168.6 tok/s |
| プリフィル (チューニングカーネル使用時) | ≈ 7.9–8.5K tok/s (出荷プロファイルでの新規プロンプト: 6,988–7,019 tok/s) |
| 同時ストリーム数:8 | 集計 542 tok/s、各ストリームの中央値 90.3 tok/s |
| ストライク(バースト)同時ストリーム数:64 | 集計 830 tok/s、OOM なし、エンジンエラーなし |
| コンテキストサイズ | 256K が検証済み (アーキテクチャは最大 1M をサポート) |
| HBM 上の重み容量 | 156.67 GiB — 追加の量子化または重みオフロードなし |
⚠️ 重要な背景: 公式 vLLM レシピでは NVIDIA と新しい AMD ハードウェアが対象となっていますが、MI300X で信頼性高く動作させるためには以下の修正が必要でした。
- FP8 フォーマットの正解性確保 (OCP セマンティクスとの互換性問題)
- 高同時性における MoE ルーティングの修正
- 因果推論および CPU-KV 同期の検証
- チューニングされていないカーネル形状への対応
🖥 なぜ MI300X か?
MI300X は以下の特徴を備えており、単一 GPU デプロイメントに適しています。
- 大容量メモリ: HBM3 が 192 GB、メモリバンド幅が 5.3 TB/s。
- コスト効率: H100 SXM5 より HBM 容量が 2.4 倍大きく、リストプライスでは約半分のコストで調達可能。
- モデル収容: 304B パラメータのチェックポイントは全体が HBM に収まります。
- PCIe を介した重みのストリーミングやレイヤーオフロードなし。
- GPU KV ポール用に 20 GB の余地、CPU テア (DRAM) 用に 96 GiB を割り当て可能。
- 1 枚のカードで 2–8 つの同時ストリーム(典型的な負荷)および最大 64 ストリームのバースト処理が可能。
FP8 実装の違い (重要)
- MI300X (CDNA3) は AMD/Graphcore 独自の E4M3 の
バリエーションを実装しています。fnuz - MI325X や以降のモデルは OCP 標準の FP8 を使用します。
- 注意: OCP セマンティクスを想定したカーネルを MI300X で使用する場合、最大 2 倍の誤差が発生する可能性があります。そのため、FP8 実装の正解性が最優先事項であり、パフォーマンスチューニングはその後に行われました。
🛠 リポジトリ構成と追加機能
ファイル構造
. ├── compose.yaml # Production スタック (vLLM ROCm + Caddy)、SHA-256 ピン固定版 ├── Caddyfile.example # Caddyfile へのコピー先(ホスト名・メール設定用) ├── vllm-entrypoint.sh # 起動前に /dev/shm の陈旧 CPU-KV mmap を削除 ├── SHA256SUMS # ランタイムアーティファクトの SHA-256 ピニング ├── patches/ # バイト単位の Production オーバーレイ │ ├── *.py # コンテナ内で只読みとしてマウント(修正済みコード) │ ├── diffs/*.patch # upstream ベースリビジョンに対する差分形式 │ └── README.md # 出所と再生成手順 └── tuning/ # パフォーマンスチューニング用データ └── *.csv # gfx942 用の AITER A8W8 ブロックスケールテーブル
このリポジトリが追加する主な機能
- 正解性オーバーレイ: ピニングされた ROCm nightly 向け(upstream vLLM に未実装の修正を含む)。
- 検証済みのサービング構成:
- 確率的 DSpark ドラフト、ブロック拒否、静的 K=7 を採用。
- スケジューラー予算:2,048 トークン。
- 遅延を防ぐプリフィル上限:1,024 トークン。
- AITER GEMM チューニング: gfx942 用の再帰的形状テーブルと MXFP4 専門家の OGS 幾何学オーバーライドをパッケージ化。
- ハイブリッド KV 戦略:
- GPU キャッシュ:20 GB (
)。fp8_ds_mla - CPU テアオフロード:96 GiB。
- upstream issue #47282 / PR #47291 のロード経路フェンシング修正を含みます(マージされていない修正)。
- GPU キャッシュ:20 GB (
📦 デプロイ手順
1. ホストの要件確認
- GPU: MI300X (gfx942, 304 CU, ~192 GiB HBM) × 1
- OS/ドライバー: AMD カーネルドライバーが動作すること、最近の Docker Compose。
- RAM: CPU KV テア用に ~235 GiB。
- ディスク: モデルキャッシュのみで約 156 GB、システム用で ~500 GB。
2. ピニングされたランタイムとモデルをプル
以下のコマンドを実行し、公式 SHA-256 が固定されたイメージを使用します。
VLLM_IMAGE='vllm/vllm-openai-rocm@sha256:e68d18b2ba50298661bfc49baf01158fbf036645c2362cccf3e8a7a79fe6c69a' MODEL='deepseek-ai/DeepSeek-V4-Flash-0731' REVISION='7872f01b1d1fe23eabc4c98b48bffcef5a386062' docker pull "$VLLM_IMAGE" docker run --rm --entrypoint hf \ -v /root/.cache/huggingface:/root/.cache/huggingface \ "$VLLM_IMAGE" download "$MODEL" --revision "$REVISION"
3. ファイルの準備
# Caddyfile の設定(ホスト名、メール、ソース CIDR を編集) cp Caddyfile.example Caddyfile # ディレクトリ作成と権限設定 mkdir -p aiter-cache crash-dumps chmod +x vllm-entrypoint.sh # シュムチェック(重要:初回起動前に必ず確認してください) sha256sum -c SHA256SUMS
4. サービスの起動
docker compose config -q docker compose up -d docker compose logs -f inference
健康状態の確認
健康的な起動には約 5 分 かかります。以下のログがすべて表示されることを確認してください。
- ✅ モデル読み込み:156.67 GiB
- ✅ ドラフトモデル DSpark ロード済み:96 パラメータ
- ✅ GPU KV キャッシュサイズ:1,927,444 トークン
- ✅ 最大同時性比:7.35 倍 (262,144 トークン)
- ✅ mmap ファイル作成:
(103.08 GB)/dev/shm/vllm_offload_...mmap - ✅ CUDA グラフキャプチャ (FULL)
メモリチェック 起動完了後、以下のコマンドで VRAM を確認してください。
rocm-smi --showmeminfo vram
- ウォームアップ後の最高水位は約 204.5 GB (総容量 205.8 GB) です。
- 警告: 数百 MB のみ残っている場合、サーバーは起動しますが、最初の要求で失敗する可能性があります。
5. スモークテスト
HOST='your-host.example.com' curl -fsS "https://$HOST/v1/models" # プロンプト: Calculate 17 * 23. Answer with the number only. curl -sS "https://$HOST/v1/completions" \ -H 'Content-Type: application/json' \ -d "{\"model\": \"deepseek-ai/DeepSeek-V4-Flash-0731\", \"prompt\": \"Calculate 17 * 23. Answer with the number only.\", \"temperature\": 0, \"max_tokens\": 32}"
🧩 パッチの概要 (重要修正)
各
patches/*.py は、コンテナ内で只読み (ro) でマウントされるフルファイルオーバーレイです。
| オーバーレイ | マウント先パス | 修正内容 | 必須条件 |
|---|---|---|---|
| | MXFP4 ビット行列パディングレーンの修正 (グローバル境界マスク) + フューズ SiLU + 高速 DeepSeek ルーティング | MXFP4 Triton パス使用時。標準マスクでは忘却なスキーマを引き起こします。 |
| | フューズ SiLU カーネル用のゲート/インタリーブレイアウト修正 | フューズ SiLU オーバーレイ使用时のみ。標準 SiLU を維持する場合はスキップ可。 |
| | gfx942 MXFP4 OGS タイル幾何学 (最大 1,536 ルート行) の設定 | gfx942 での性能向上。標準ではルート行>768 で劇的に劣化します。 |
| | FNUZ FP8 + ライトニングインデキサーの 16×16 事前シャッフル | MI300X で必須 (MI325X/MI355X は OCP)。バイト配列形式を解釈すると 2 倍エラー。 |
| | KV オフセット 64 ビットオフセットの補正 | KV ポールが 4 GiB を超える場合に必須。小さい場合はスキップ可。 |
| | 決定論的 torch.topk + ブロック H=64 のヘッダー事前フィルタ | ツールコール再現性を確保するため必須。ブロック H=64 はパフォーマンス向上。 |
| | 因果多トークンスペキュレイティブ検証ロジック | ROCm 小頭 MLA での DSpark 動作に必須 (現状 upstream と同じ)。 |
| | ドラフト提案 Gumbel ノイズの独立化 (塩付け) | 使用时のみ。 |
| | CPU→GPU KV ロードパスのフェンス (#47282, #47291) | を使用する場合のみ必須。 |
🛑 2 つの致命的な正解性修正の詳細
- MXFP4 ルーティング: パディングレーンをグローバル境界ではなく論理的ブロックサイズでマスクしない場合、ルーティングマトリクスが汚染され、似ているツール名や長いプロンプトでの「忘却」が発生します。
- FP8 フォーマット: DeepSeek V4 のキャッシュは
(シャッフル済み) です。OCP 形式を MI300X に使用すると最大 2 倍の誤差が出ます。float8e4b8
⚡ スペキュレイティブデコード & パフォーマンス
デコード性能
Production 構成における主要な最適化と結果です。
| 変更内容 | 効果・結果 |
|---|---|
| A8W8 GEMM 形状チューニング (gfx942) | シングル/ダブルストリーム +42–62% 8–64 ストリーム +10–35% |
| フューズ SiLU & 高速ルーティング | C1 デコード:34.5 → 56.6 tok/s (+64%) ルーティング速度: 42.6 → 11.9 µs/レイヤー |
| ブロック H=64 スパーサプリフィル | プリフィル到達:7.9–8.5K tok/s スパーサテンショントレース: 317 → 142 ms/要求 |
| 静的 K=7 & 確率的ドラフト | シングルストリーム正解性:119.5 tok/s |
| スケジューリング最適化 (2K 予算, 1K プリフィル上限) | 短い要求の TTFT: 8.2 s → 0.5 s (52K クールドプリフィル後) |
ファイナルコンカレンシースウィープ結果
- 条件: プロンプト約 400 単語、ストリーミング、温度=1.0, top_p=0.95。
- 出力: C1–C8 で 512 トークン、C64 で 256 トークン。
| ストリーム数 | 集計 tok/s | 各ストリーム中央値デコード | TTFT p50 |
|---|---|---|---|
| 1 | 126.2 | 168.6 tok/s | 1.026 s |
| 2 | 145.4 | 152.7 tok/s | 0.939 s |
| 4 | 316.8 | 108.6 tok/s | 0.369 s |
| 8 | 542.3 | 90.3 tok/s | 1.027 s |
| 64 | 830.2 | 16.4 tok/s | 2.190 s |
DSpark について: 受入率はプロンプトに依存します。これらはユニバーサルベンチマークではなく、この正確な構成のためのゲート値として扱ってください。
プリフィル性能の詳細
- チューニングカーネル使用時: スケジューラー予算に応じて 7.9–8.5K tok/s まで到達可能 (C1: 8.192T で 7.90–7.99K)。
- Production プロファイル: レイテンシ分離のため予算を 2,048 トークン に制限し、新規プロンプトでは 6,988–7,019 tok/s。
- プリフィル上限: 設定 1,024 トークン。これにより 8.9K プロンプトでも C1 で 5.20–5.29K tok/s を維持。
- TTFT 改善: 52K クールドプリフィルを待たずに並ぶ短い要求の TTFT は、8.2 s から 0.5 s に劇的に低下。
⚠️ Production ノート (注意事項)
- HBM ヘッドルームは限られています。
- ウォームアップ後の最高水位:204.5 GB (総容量 205.8 GB)。
- 警告: 30 GB の KV ポールをロードすると、
エラーでグラフキャプチャ中に失敗します。HSA_STATUS_ERROR_OUT_OF_RESOURCES
を引き上げず、HBM 使用量の増大を厳密に監視してください。--kv-cache-memory-bytes
- CPU KV テアの扱い
は、破棄されたプレフィックスキャッシュエントリ用に--kv-offloading-size 96 --kv-offloading-backend native
で ~103 GB をマッピングします。/dev/shm- エントリーポイントスクリプトはクラッシュ後の陈旧マップを自動削除します。
- スケジューラー警告について
- DSpark-7 は 2,048 トークン予算からドラフトスロットを予約するため、1,664 トークンのスケジューラー警告が予期されます。
- 予算を引き上げると、利用可能な KV 容量が減ります。
- 起動直後の挙動
- カーネルウォームアップが必要: 最初のプリフィルはカーネルを初期化します (8.9K トークンで約 5.3 秒かかる)。その後の実行は約 1.7 秒です。
- 必須操作: トラフィックを受理する前に、未キャッシュのプリフィルを実行してください。
- 正解性テストの重要性
- スループットだけでなく、以下のバリデーションスイートで正解性を必ず確認してください。
- 2 ターンのツールコールフィクスチャ。
- BFCL サブセット (正確な呼び出し 74–76/90)。
- OpenCode ツールスキーマチェック。
- 380K トークンニードルリコール (ネイティブおよび DSpark パス両方)。
📜 ライセンスと出所
- スタック・ドキュメント・オーバーレイ: Apache-2.0 (AITER 由来のものは MIT ヘッダー保持)。
- モデル: DeepSeek-V4-Flash-0731 は MIT ライセンス。
- 差分ベース:
に各アップストリームベースリビジョンが記録されています。patches/README.md
📚 参考文献
すべてのリンクは検証済み(2026 年 8 月 4 日時点)です。
- DeepSeek-V4-Flash-0731 モデルカード — 公式リリース;304B パラメータ;MIT ライセンス
- 公式 vLLM DeepSeek V4 Flash レシピ — MI325X/MI355X 向けの AMD ガイド参照
- Fergus Finn: DeepSeek-V4-Flash on AMD MI300X を導入する — FNUZ vs. OCP, AITER ギャップの解説 (Doubleword, 2026 年 6 月)
- doublewordai/vllm-amd-blog-doubleword — デモ PR およびコミット c32932bb9 (パディングレーンマスク修正)
- vLLM コミット 77469c9 — AITER MLA 小頭検証を因果的にフラット化する (#50476)
- vLLM issue #47282 — CPU-KV ロードパスにクロスストリーム同期が欠けている (WAR ギャップ)
- vLLM PR #47291 — 提案された WAR 修正(マージされず、ここでオーバーレイとして提供)
- AMD Instinct MI300X — 192 GB HBM3, 5.3 TB/s ピークバンド幅
- ROCm/AITER — ROCm アテンションおよび密集線形用 AMD チューニングカーネルライブラリ