部署背景
我手头有一台4×NVIDIA A30(24GB显存)的服务器,目标是部署Qwen2.5-32B-VL-Instruct满血版。96GB总显存按说足够装下FP16的65GB权重,但实际过程一波三折。
硬件环境:A30的通信短板
A30基于Ampere架构,有24GB HBM2,带宽933 GB/s。不过这个型号在很多服务器上并没有配置NVLink Bridge,我这台也不例外。下面是多卡互联拓扑的实际状况:
nvidia-smi topo -m
| 缩写 | 含义 | 典型场景 |
|---|---|---|
| X | 自身(Self) | GPU 内部环路 |
| PXB | PCIe x16 桥接(Direct PCIe Bridge) | 同一 PCIe 树下的 GPU 直接互联 |
| SYS | 系统总线(System Bus) | 通过 CPU/主板 南桥间接连接 |
| PIX | PCIe 交换机(PCIe Switch) | 多 GPU 通过 PCIe 交换机互联 |
实际上4张卡之间最多只有两卡能走P2P,其他都要经过系统总线(SYS),通信绕路CPU内存。
vLLM加载卡死的复现
先用vLLM尝试,脚本如下:
#!/bin/bash
echo "###########start vl by vllm...##########"
export GLOO_SOCKET_IFNAME="enp210s0f0" # 多网卡需要指明
export CUDA_VISIBLE_DEVICES="1,2,3,4"
export VLLM_LOGGING_LEVEL="DEBUG"
export VLLM_ATTENTION_BACKEND="FLASH_ATTN"
vllm serve /model/Qwen3-VL-32B-Instruct \
--gpu-memory-utilization 0.8 \
--dtype auto \
--host 0.0.0.0 \
--port 7860 \
--tensor-parallel-size 2 \
--kv-cache-dtype fp8 \
--max-model-len 10000 \
--limit-mm-per-prompt image=4,video=1 \
--api-key yourkey
现象:模型权重加载到接近100%显存时卡死,NCCL通信初始化超时,GPU利用率掉到0,最终报NCCL错误。不是OOM,是通信堵塞。
转到Ollama,成功了
换成Ollama加载GGUF格式(自备FP16),启动脚本:
#!/bin/bash
echo "###########start llm by ollama...##########"
export CUDA_VISIBLE_DEVICES=0,1,2,3
export OLLAMA_NUM_PARALLEL=10
nohup ollama run qwen3-vl-32b-instruct-bf16:latest >/ollama_models/logs/qwen3vl_32. 2>&1 &


