⚡ Qwen3.6 NVFP4 + DFlash 完整部署指南

DGX Spark 上部署 Qwen3.6-35B-Heretic,DFlash 投机解码加速,单流 70+ tok/s

📋 目录

  1. 环境要求
  2. 构建 Docker 镜像
  3. 下载模型文件
  4. 编写 docker-compose.yml
  5. 启动服务
  6. 验证与测试
  7. 关键参数说明
  8. 性能数据
  9. 常见问题

第一步 — 环境要求

组件要求
GPUNVIDIA GB10(DGX Spark 专属),sm_120/sm_121a Blackwell
统一内存128 GB
磁盘空间≥ 80 GB 可用(镜像 ~50GB + 模型 ~23GB)
NVIDIA Driver≥ 580.x
Docker≥ 25.x,带 nvidia-container-toolkit
OSUbuntu 24.04 LTS
⚠️ 硬件限定:此镜像仅适用于 GB10(sm_121)。H100/A100/RTX 4090 等均不可用。

第二步 — 构建 Docker 镜像

# 克隆仓库
git clone https://github.com/AEON-7/Qwen3.6-NVFP4-DFlash.git
cd Qwen3.6-NVFP4-DFlash

# 构建镜像(约 15-25 分钟)
docker build -t vllm-spark-omni-q36:v1.2 \
  --build-arg TORCH_CUDA_ARCH_LIST="12.0a+PTX" \
  -f docker/Dockerfile .
⚠️ 关键TORCH_CUDA_ARCH_LIST="12.0a+PTX" 是 GB10(SM121)的必要参数,用错架构构建出来的镜像无法运行。
验证构建:
docker images vllm-spark-omni-q36:v1.2
# 预期:虚拟大小 ~50.1 GB

第三步 — 下载模型文件

# 安装 hf CLI
pip install --user "huggingface_hub[hf_transfer]"
export HF_HUB_ENABLE_HF_TRANSFER=1

# 创建工作目录
mkdir -p ~/qwen36-heretic

# 下载 NVFP4 主模型(22 GB,约 5-10 分钟)
huggingface-cli download AEON-7/Qwen3.6-35B-A3B-heretic-NVFP4 \
  --local-dir ~/qwen36-heretic/qwen36-nvfp4

# 下载 DFlash drafter(905 MB,gated repo)
huggingface-cli download z-lab/Qwen3.6-35B-A3B-DFlash \
  --local-dir ~/qwen36-heretic/qwen36-dflash
⚠️ DFlash 是 gated repo:需要先去 https://huggingface.co/z-lab/Qwen3.6-35B-A3B-DFlash 点击 "Request access"(通常几小时内批准),然后设置 HF_TOKEN 环境变量。
验证下载:
ls -lh ~/qwen36-heretic/qwen36-nvfp4/model.safetensors   # ~22 GB
ls -lh ~/qwen36-heretic/qwen36-dflash/model.safetensors   # ~905 MB

第四步 — 编写 docker-compose.yml

mkdir -p ~/qwen36-heretic
cat > ~/qwen36-heretic/docker-compose.yml << 'EOF'
services:
  vllm:
    image: vllm-spark-omni-q36:v1.2
    container_name: vllm2
    restart: unless-stopped
    network_mode: host
    environment:
      - VLLM_ALLOW_LONG_MAX_MODEL_LEN=1
      - TORCH_MATMUL_PRECISION=high
      - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
      - NVIDIA_FORWARD_COMPAT=1
      - VLLM_TEST_FORCE_FP8_MARLIN=1
    volumes:
      - /home/nvidia/qwen36-heretic/qwen36-nvfp4:/models/qwen36
      - /home/nvidia/qwen36-heretic/qwen36-dflash:/models/qwen36-dflash
    command:
      - bash
      - -c
      - |
        exec vllm serve /models/qwen36 \
          --served-model-name qwen36-35b-heretic qwen36-fast qwen36-deep \
          --host 0.0.0.0 --port 30002 \
          --tensor-parallel-size 1 \
          --dtype auto \
          --quantization compressed-tensors \
          --max-model-len 131072 \
          --max-num-seqs 128 \
          --max-num-batched-tokens 65536 \
          --gpu-memory-utilization 0.40 \
          --enable-chunked-prefill \
          --enable-prefix-caching \
          --load-format safetensors \
          --trust-remote-code \
          --enable-auto-tool-choice \
          --tool-call-parser qwen3_coder \
          --reasoning-parser qwen3 \
          --speculative-config '{"method":"dflash","model":"/models/qwen36-dflash","num_speculative_tokens":15}' \
          --attention-backend flash_attn
    ipc: host
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
EOF

第五步 — 启动服务

cd ~/qwen36-heretic
docker compose up -d

# 查看启动进度(约 5-8 分钟)
docker compose logs -f

启动时间线

阶段耗时
模型加载~14 秒
torch.compile~95 秒
Encoder cache profiling~250 秒
CUDA graph capture~9 秒
总计~6 分钟
💡 提示:后续重启因编译缓存命中,启动时间会缩短至 ~3 分钟。

第六步 — 验证与测试

# 健康检查
curl -s http://localhost:30002/health

# 查看注册模型
curl -s http://localhost:30002/v1/models

# 聊天测试
curl -s http://localhost:30002/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen36-fast",
    "messages": [{"role":"user","content":"1+1=?"}],
    "max_tokens": 64,
    "temperature": 0
  }'

关键参数说明

参数原因
VLLM_TEST_FORCE_FP8_MARLIN1SM121 CUTLASS GEMM 有 Bug,不用此环境变量会导致 cudaErrorIllegalAddress 崩溃
--gpu-memory-utilization0.40约占用 23 GiB 显存,为其他服务预留空间
--max-model-len1310720.4 利用率下 262K 上下文会 OOM,131K 刚好
--speculative-configDFlash k=15投机解码,Draft 接受率 20-30% 为正常
--quantizationcompressed-tensorsNVFP4 格式专用量化方式
--attention-backendflash_attnDFlash 必须使用 FlashAttention 后端

性能数据

测试环境:DGX Spark GB10,显存利用率 0.40,131K 上下文,temperature=0

单并发(500 token)

次数Tokens耗时速度
15006.5s77.5 tok/s
25006.6s75.5 tok/s
35006.9s72.8 tok/s

并发压力测试

并发批处理耗时总吞吐
1~6.8s72 tok/s
4~13.3s150 tok/s
8~17.9s224 tok/s

常见问题

1. KV Cache 内存不足 OOM

ValueError: ... KV cache is needed, which is larger than the available ...

降低 --max-model-len(如 131072)或提高 --gpu-memory-utilization(如 0.55)。

2. DFlash drafter 下载 401

DFlash 是 gated repo。先去 HF 页面申请访问权限,设置 HF_TOKEN 环境变量后重试。

3. 运行时 cudaErrorIllegalAddress

确认环境变量 VLLM_TEST_FORCE_FP8_MARLIN=1 已设置。这是 SM121 平台的必须配置。

4. 镜像构建失败

确认 TORCH_CUDA_ARCH_LIST="12.0a+PTX",且磁盘空间 ≥ 35 GB。

5. 端口冲突

如果目标端口已被占用,先停止旧容器再启动新的:

docker stop old_container && docker rm old_container

管理命令

# 查看日志
docker logs -f vllm2

# 重启
cd ~/qwen36-heretic && docker compose restart

# 停止
docker compose down

# 查看资源占用
docker stats vllm2 --no-stream
← 返回 DGX Spark 教程列表