vLLMと8xR9700でQwen3.5-397B-A13Bを実行する

Reddit r/LocalLLaMA / 2026/4/12

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical UsageModels & Research

要点

  • 本投稿では、カスタムDockerイメージを用いて、ROCm上でvLLMによりQwen3.5-397B-A13B(397B MXFP4バリアントとして記載)を8xR9700構成で動かす方法を説明します。
  • Dockerfileとして、更新したTransformersバージョンをインストールし、Tritonにパッチを適用してtopk関連の定数を調整し、互換性/性能の観点で最適化します。
  • Hugging FaceでホストされているMXFP4モデルのチェックポイントへのリンクを示し、Git LFSでモデルをクローンするための手順を段階的に提示します。
  • 複数GPUのデバイス・マッピング、HIP/ROCRの可視性、共有メモリ、接頭辞キャッシュ(prefix caching)やGPUメモリ使用率をほぼ満杯にする設定など、vLLM向けの各種パラメータを含めた詳細なdocker runの起動コマンドが掲載されています。
  • 著者は、397Bモデルが「とても高速に動作する」と主張しており、本ガイドは特定のROCmハードウェア上で100B超の大規模モデル推論を可能にするためのアプローチとして位置付けられています。
Run Qwen3.5-397B-A13B with vLLM and 8xR9700

R0700 GPUでmxfp4を動かせるようにするために、u/Sea-Speaker1700に特別な感謝を。122Bモデルを動かすための最初の手引きがこちら

さて、397Bモデルは驚くほど素晴らしく、超高速です。

このDockerfileを使ってイメージをビルドしてください。元のイメージはu/Sea-Speaker1700が提供しています

FROM tcclaviger/vllm-rocm-rdna4-mxfp4:latest # Transformers Update RUN pip install --upgrade transformers # Triton Patch RUN find /app -name "topk.py" -exec grep -l "N_EXPTS_ACT=k," {}  | xargs -I{} sed -i 's/N_EXPTS_ACT=k, # constants/N_EXPTS_ACT=__import__("triton").next_power_of_2(k), # constants/' {} CMD ["/bin/bash"] 

パッチ適用版をビルド

docker build -t vllm-mxfp4-patched -f Dockerfile .

モデルをダウンロード:

git lfs clone https://huggingface.co/djdeniro/Qwen3.5-397B-A17B-MXFP4

起動スクリプト。デバイスIDを保持し、$1をモデル名に、$2を外部ポートに置き換えてください。

docker run --name "$1" \\ --rm --tty --ipc=host --shm-size=32g \\ --device /dev/kfd:/dev/kfd \\ --device /dev/dri/renderD128:/dev/dri/renderD128 \\ --device /dev/dri/renderD129:/dev/dri/renderD129 \\ --device /dev/dri/renderD130:/dev/dri/renderD130 \\ --device /dev/dri/renderD131:/dev/dri/renderD131 \\ --device /dev/dri/renderD132:/dev/dri/renderD132 \\ --device /dev/dri/renderD137:/dev/dri/renderD137 \\ --device /dev/dri/renderD138:/dev/dri/renderD138 \\ --device /dev/dri/renderD139:/dev/dri/renderD139 \\ --device /dev/mem:/dev/mem \\ -e HIP_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \\ -e ROCR_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \\ -v /mnt/llm_disk/models:/app/models:ro \\ -e TRUST_REMOTE_CODE=1 \\ -e OMP_NUM_THREADS=8 \\ -e PYTORCH_TUNABLEOP_ENABLED=1 \\ -e PYTORCH_TUNABLEOP_TUNING=0 \\ -e PYTORCH_TUNABLEOP_RECORD_UNTUNED=0 \\ -e VLLM_ROCM_USE_AITER=0 \\ -e PYTORCH_TUNABLEOP_FILENAME=/tunableop/tunableop_merged.csv \\ -e PYTORCH_TUNABLEOP_UNTUNED_FILENAME=/tunableop/tunableop_untuned%%d.csv \\ -e GPU_MAX_HW_QUEUES=1 \\ -p "$2":8000 \\ -e TRITON_CACHE_DIR=/root/.triton/cache \\ vllm-mxfp4-patched \\ /app/models/Qwen3.5-397B-A17B-MXFP4 \\ --served-model-name "$1" --host 0.0.0.0 --port 8000 --trust-remote-code \\ --enable-prefix-caching --gpu-memory-utilization 0.98 --tensor-parallel-size 8 \\ --max-model-len 131072 --max-num-seqs 4 \\ --tool-call-parser qwen3_coder --enable-auto-tool-choice \\ --override-generation-config '{"max_tokens": 64000, "temperature": 1.0, "top_p": 0.95, "top_k": 20, "presence_penalty": 1.5}' \\ --compilation-config '{"cudagraph_capture_sizes": [1, 2, 4, 8, 16, 32, 64, 128], "max_cudagraph_capture_size": 128}' \\ --max-num-batched-tokens 2048 \\ --limit-mm-per-prompt.image 2 --mm-processor-cache-gb 1 \\ --mm-processor-kwargs '{"max_pixels": 602112}' \\ --reasoning-parser qwen3 

最初のロードには400〜600秒かかりましたが、その後は、1リクエストでtgで30 t/s、ppで3.5〜3.7kでした。

4倍のリクエスト数にすると、最大100 t/sになります。

GPUごとに電力を制限しています(210W)。GPUごとの電力制限を300Wにすれば、モデルはさらに高速化するはずです。

このモデルで、コーディングタスクの思考(予算)が0トークンのときに、私は最良の結果を得ました。

提出者 /u/djdeniro
[link] [comments]