vLLM 部署 MiniCPM-V(Ubuntu 24.04 + ROCm 7+)
模型简介
MiniCPM-V 是由面壁智能(ModelBest)与清华大学自然语言处理实验室(OpenBMB)联合开发的端侧多模态大模型系列。MiniCPM-V 4.6 仅 1.3B 参数(SigLIP2 视觉编码器 + Qwen3.5 语言主干),支持图像理解和文本对话。
本节使用 vLLM 部署 MiniCPM-V 4.6,包括:
- 使用官方 ROCm vLLM Docker 镜像快速启动
- 从源码手动编译 ROCm 版 vLLM(适用于没有 Docker 的环境)
前置条件:已完成 ROCm 7+ 安装与验证(见
env-prepare-ubuntu24-rocm7.md)。 参考机器:AMD Ryzen AI MAX+ 395(Radeon 8060S,gfx1151),ROCm 7.13。
版本要求
MiniCPM-V 4.6 在 vLLM 中以架构 MiniCPMV4_6ForConditionalGeneration 被原生支持,需要满足:
- vLLM ≥ 0.22.0
- transformers ≥ 5.7
vLLM 0.22.0+ 要求
torch == 2.11.0。如果已有较旧的 ROCm PyTorch(如torch 2.9.x+rocm),请在独立虚拟环境中编译 vLLM,避免影响已有环境。Docker 方式不受此限制。
方式一:Docker 方式(推荐)
参考官方文档:https://docs.vllm.ai/en/latest/getting_started/quickstart/#installation
若使用 Docker,需要安装
amdgpu-dkms: https://rocm.docs.amd.com/projects/install-on-linux/en/latest/how-to/docker.html
1. 启动 vLLM 容器
sudo docker pull rocm/vllm-dev:nightly
sudo docker run -it --rm \
--network=host \
--cpus="16" \
--group-add=video \
--ipc=host \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--device /dev/kfd \
--device /dev/dri \
-v ~/models:/app/models \
-e HF_HOME="/app/models" \
rocm/vllm-dev:nightly容器内 /app/models 挂载到宿主机的 ~/models。
进入容器后确认版本:
python -c "import vllm; print(vllm.__version__)"应 ≥ 0.22.0。
2. 下载模型(HF 格式,不是 GGUF)
vLLM 需要完整的 Hugging Face 检查点(safetensors),不是 llama.cpp 的 GGUF:
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download openbmb/MiniCPM-V-4_6 \
--local-dir ~/models/MiniCPM-V-4_63. 启动模型服务
vllm serve /app/models/MiniCPM-V-4_6 \
--trust-remote-code \
--dtype bfloat16 \
--max-model-len 8192 \
--gpu-memory-utilization 0.9 \
--max-num-seqs 8如需快速验证,可加 --enforce-eager 跳过 HIP graph 捕获(启动更快,推理略慢)。
- gfx1151 上建议使用
--dtype bfloat16(fp16 可能出现 NaN)。- 单请求多图 / 视频时,添加
--limit-mm-per-prompt '{"image": 4, "video": 1}'。- 如需思考模式,使用
MiniCPM-V-4_6-Thinking检查点;不需要则用普通MiniCPM-V-4_6。
4. 测试接口
先获取 model id:
MODEL_ID=$(curl -s http://127.0.0.1:8000/v1/models | jq -r '.data[0].id')
echo "Model ID: $MODEL_ID"文本补全:
start=$(date +%s.%N)
response=$(curl -s -X POST http://127.0.0.1:8000/v1/completions \
-H "Content-Type: application/json" \
-d "{\"model\": \"$MODEL_ID\", \"prompt\": \"用一句话解释大语言模型\", \"max_tokens\": 128}")
end=$(date +%s.%N)
tokens=$(echo "$response" | jq -r '.usage.completion_tokens // 0')
duration=$(echo "$end - $start" | bc)
echo "$response" | jq -r '.choices[0].text'
echo "tokens: $tokens | time: ${duration}s | tokens/s: $(echo "scale=2; $tokens / $duration" | bc)"多模态对话(通过 base64 传图):
IMG_B64=$(base64 -w0 /app/models/image.jpeg)
curl -s -X POST http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d "{
\"model\": \"$MODEL_ID\",
\"max_tokens\": 128,
\"messages\": [{\"role\": \"user\", \"content\": [
{\"type\": \"text\", \"text\": \"用一句话描述这张图片\"},
{\"type\": \"image_url\", \"image_url\": {\"url\": \"data:image/jpeg;base64,$IMG_B64\"}}
]}]
}" | jq -r '.choices[0].message.content'方式二:从源码编译 vLLM(无 Docker)
当没有 Docker 时使用。
1. 环境要求
- vLLM ≥ 0.22.0
- ROCm 7.0.2+,GPU 支持 gfx1151/1150
torch == 2.11.0(ROCm 版),在独立 venv 中编译
2. 创建独立 Python venv
uv venv --python 3.12 --seed ~/vllm-venv
source ~/vllm-venv/bin/activate3. 安装 ROCm PyTorch
uv pip install --no-cache-dir \
--index-url https://download.pytorch.org/whl/nightly/rocm7.0 \
"torch==2.11.0.dev*" torchvision若没有
torch 2.11wheel,使用最接近的版本并以--no-build-isolation编译。
4. 安装 Triton
ROCm PyTorch wheel 通常已自带 Triton。验证:
python -c "import triton; print(triton.__version__)"如果 import triton 失败,需从源码编译:
git clone https://github.com/triton-lang/triton.git
cd triton
pip install -e python5.(可选)FlashAttention
vLLM 在 gfx1151 上无需自定义 FlashAttention 即可运行(会回退到受支持的 attention 后端)。如需编译:
git clone https://github.com/ROCm/flash-attention.git
cd flash-attention
pip install -e .6. 编译 vLLM
# AMD SMI
cp -r /opt/rocm/share/amd_smi ./amdsmi_src && (cd ./amdsmi_src && uv pip install .)
git clone https://github.com/vllm-project/vllm.git
cd vllm
git checkout v0.22.0
uv pip install -r requirements/rocm.txt
uv pip install numba scipy "huggingface-hub[cli,hf_transfer]" setuptools_scm setuptools wheel ninja cmake
export VLLM_TARGET_DEVICE="rocm"
export PYTORCH_ROCM_ARCH="gfx1151"
export ROCM_HOME="/opt/rocm"
MAX_JOBS=16 uv pip install -e . --no-build-isolation编译耗时较长。完成后验证:
python -c "from vllm import ModelRegistry; print('MiniCPMV4_6ForConditionalGeneration' in ModelRegistry.get_supported_archs())"7. 启动服务
vllm serve ~/models/MiniCPM-V-4_6 \
--trust-remote-code \
--dtype bfloat16 \
--enforce-eager \
--max-model-len 8192 \
--max-num-seqs 8然后使用与方式一第 4 节相同的接口测试。
补充说明
- 没有 Docker 时 vLLM 需为 gfx1151 从源码编译,且依赖
torch 2.11。务必使用独立 venv,避免影响已有的推理/微调环境。 - 同一模型的 llama.cpp 部署(更轻量、有预构建二进制)见
minicpmv/llamacpp-rocm7-deploy.md。