vllm

[toc]

前言

目前手上有几张 A100(80G) 显卡,驱动只支持 cuda 12.9;但是现在的大模型都不支持直接部署,需要社区适配,以及自己折腾一部分,故记录在此

部署 deepseek-v4-flash

资源:单机 8xA100

镜像

# 该镜像是基于 cuda 13.0 的
docker pull openguardrails/vllm-dsv4-0731-sm80:latest

# 我基于上述镜像修改适配 12.9
docker pull registry.cn-chengdu.aliyuncs.com/zcteo/vllm:deepseek-v4-sm80-cu129

部署命令

vllm serve /models/DeepSeek-V4-Flash-0731 \
    --host 0.0.0.0 \
    --port 8000 \
    --served-model-name deepseek-v4-flash \
    --trust-remote-code \
    --tensor-parallel-size 8 \
    --enable-expert-parallel \
    --kv-cache-dtype fp8 \
    --block-size 256 \
    --gpu-memory-utilization 0.90 \
    --max-model-len 1048576 \
    --max-num-batched-tokens 16384 \
    --max-num-seqs 8 \
    --enable-chunked-prefill \
    --enable-auto-tool-choice \
    --tokenizer-mode deepseek_v4 \
    --tool-call-parser deepseek_v4 \
    --reasoning-parser deepseek_v4 \
    --load-format auto \
    --default-chat-template-kwargs '{"enable_thinking":true,"reasoning_effort":"high"}' \
    --speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"greedy"}'

性能

  • 1M 上下文最大并发:2.68x
  • 单请求生成速度:170 tokens/s

部署 glm-5.2 glm-5.3

资源:双机 8xA100,共计 16xA100

镜像

docker pull openguardrails/vllm-glm52-sm80:764b6bfa0-pr47629-pr47644

# 上述镜像国内备份
docker pull registry.cn-chengdu.aliyuncs.com/zcteo/vllm:glm52-sm80-cu129

ray 配置

head

export NCCL_IB_DISABLE=0
export NCCL_SOCKET_IFNAME=eth2
export NCCL_IB_HCA=mlx5_1,mlx5_2,mlx5_3,mlx5_4
export GLOO_SOCKET_IFNAME=eth2
export VLLM_HOST_IP=$(ip -4 -br addr show eth2 | awk '{print $3}' | cut -d'/' -f1)

ray stop -f
killall -9 ray vllm
rm -rf /tmp/ray

ray start --head --port=6379 --node-ip-address=$VLLM_HOST_IP

worker

#!/bin/bash
if [ -z "$1" ]; then
  echo "use $0 <head ip>"
  exit 1
fi
export NCCL_IB_DISABLE=0
export NCCL_SOCKET_IFNAME=eth2
export NCCL_IB_HCA=mlx5_1,mlx5_2,mlx5_3,mlx5_4
export GLOO_SOCKET_IFNAME=eth2
export VLLM_HOST_IP=$(ip -4 -br addr show eth2 | awk '{print $3}' | cut -d'/' -f1)

ray stop -f
killall -9 ray vllm
rm -rf /tmp/ray

ray start --address="${1}:6379" --node-ip-address=$VLLM_HOST_IP

部署命令

在 head 节点执行

export RAY_ADDRESS="auto"

vllm serve /models/GLM-5.3-NVFP4 \
    --served-model-name glm-5.3 \
    --host 0.0.0.0 --port 8000 \
    --trust-remote-code \
    --enable-expert-parallel \
    --pipeline-parallel-size 2 \
    --tensor-parallel-size 8 \
    --distributed-executor-backend ray \
    --max-num-seqs 8 \
    --dtype bfloat16 \
    --kv-cache-dtype bfloat16 \
    --max_model_len 524288 \
    --block-size 128 \
    --enable-auto-tool-choice \
    --performance-mode balanced \
    --gpu-memory-utilization 0.94 \
    --tool-call-parser glm47 \
    --reasoning-parser glm45 \
    --load-format auto \
    --default-chat-template-kwargs '{"enable_thinking":true,"reasoning_effort":"high"}'

性能

  • 512K 上下文最大并发:1.83x
  • 单请求生成速度:50 tokens/s

尝试过将 pp 和 tp 都设置为 4,可以支持 1M 上下文,但是单请求生成速度下降到 35 tokens/s

vllm-backport 镜像

资源:单机 8xA100

源码:https://github.com/wtdcode/vllm-backport

改镜像支持多个模型部署,下文只记录我实际试过的模型

# 该镜像是基于 cuda 13.0 的
docker pull lazymio/vllm-backport:latest-sm80

# 我基于上述镜像修改适配 12.9; flashinfer 版本g改为 0.6.15.post1,否则启动要报错
docker pull registry.cn-chengdu.aliyuncs.com/zcteo/vllm:backport-v0.13.0-sm80-cu129

部署 glm-5.3-flash

使用 v0.13.0 会一直思考不出结果,之前编译的 v0.12.0 可以正常使用;已确认有 bug issues#84

docker pull registry.cn-chengdu.aliyuncs.com/zcteo/vllm:backport-v0.12.0-sm80-cu129

命令

export VLLM_LOGGING_COLOR=1

vllm serve /models/GLM-5.3-Flash-NVFP4 \
    --served-model-name glm-5.3-flash \
    --host 0.0.0.0 --port 8000 \
    --trust-remote-code \
    --enable-expert-parallel \
    --tensor-parallel-size 8 \
    --max-num-seqs 8 \
    --max_model_len 1048576 \
    --block-size 128 \
    --enable-auto-tool-choice \
    --performance-mode balanced \
    --gpu-memory-utilization 0.92 \
    --tool-call-parser glm47 \
    --reasoning-parser glm45 \
    --load-format auto \
    --default-chat-template-kwargs '{"enable_thinking":true,"reasoning_effort":"high"}' \
    --speculative-config '{"method":"mtp","num_speculative_tokens":3}'

性能

  • 1M 上下文最大并发:3.39x
  • 单请求生成速度:110 tokens/s

部署 qwen3.8-flash-next

命令

export VLLM_LOGGING_COLOR=1
export VLLM_USE_FLASHINFER_SAMPLER=0
export VLLM_ALLOW_LONG_MAX_MODEL_LEN=1

vllm serve /models/Qwen3.8-Flash-Next-FP8 \
    --served-model-name qwen3.8-flash-next \
    --host 0.0.0.0 --port 8000 \
    --trust-remote-code \
    --enable-expert-parallel \
    --tensor-parallel-size 8 \
    --max-num-seqs 8 \
    --max_model_len 1048576 \
    --enable-auto-tool-choice \
    --performance-mode balanced \
    --gpu-memory-utilization 0.90 \
    --tool-call-parser qwen3_xml \
    --reasoning-parser qwen3 \
    --load-format auto \
    --default-chat-template-kwargs '{"enable_thinking":true,"reasoning_effort":"medium"}' \
    --speculative-config '{"method":"mtp","num_speculative_tokens":3}'

性能

  • 1M 上下文最大并发:3.23x
  • 单请求生成速度:105 tokens/s

部署 deepseek-v4-flash-vision-exp

命令

vllm serve /models/DeepSeek-V4-Flash-Vision-Exp \
    --host 0.0.0.0 \
    --port 8000 \
    --served-model-name deepseek-v4-flash-vision-exp \
    --trust-remote-code \
    --tensor-parallel-size 8 \
    --enable-expert-parallel \
    --kv-cache-dtype fp8 \
    --block-size 256 \
    --gpu-memory-utilization 0.88 \
    --max-model-len 1048576 \
    --max-num-batched-tokens 16384 \
    --max-num-seqs 8 \
    --enable-chunked-prefill \
    --enable-auto-tool-choice \
    --tokenizer-mode deepseek_v4 \
    --tool-call-parser deepseek_v4 \
    --reasoning-parser deepseek_v4 \
    --load-format auto \
    --default-chat-template-kwargs '{"enable_thinking":true,"reasoning_effort":"high"}' \
    --speculative-config '{"method":"dspark","num_speculative_tokens":3,"draft_sample_method":"greedy"}'

性能

  • 1M 上下文最大并发:3.13x
  • 单请求生成速度:115 tokens/s

部署 deepseek-v4.1-flash

export VLLM_LOGGING_COLOR=1
export VLLM_MARLIN_USE_ATOMIC_ADD=1

vllm serve /models/DeepSeek-V4.1-Flash \
    --host 0.0.0.0 \
    --port 8000 \
    --served-model-name deepseek-flash \
    --trust-remote-code \
    --tensor-parallel-size 8 \
    --enable-expert-parallel \
    --kv-cache-dtype fp8_ds_mla \
    --engram-config '{"cpu_offload": true}' \
    --block-size 128 \
    --gpu-memory-utilization 0.88 \
    --max-model-len 1048576 \
    --max-num-batched-tokens 32768 \
    --max-num-seqs 8 \
    --enable-chunked-prefill \
    --enable-auto-tool-choice \
    --tokenizer-mode deepseek_v41 \
    --tool-call-parser deepseek_v41 \
    --reasoning-parser deepseek_v41 \
    --load-format auto \
    --default-chat-template-kwargs '{"enable_thinking":true,"reasoning_effort":"high"}' \
    --speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"greedy"}'

性能

  • 1M 上下文最大并发:8.12x
  • 单请求生成速度:110 tokens/s