vLLM实践

用conda安装部署vLLM

1 conda create -n envVLLM python=3.11
2 conda activate envVLLM
3 ​
4 pip install vllm autoawq --index-url https://pypi.tuna.tsinghua.edu.cn/simple

vLLM加载模型

1 python -m vllm.entrypoints.openai.api_server --model /mnt/d/modelscope_stuff/Qwen/Qwen3.5-4B --host 0.0.0.0 --port 8899 --gpu-memory-utilization 0.9 --max-model-len 65535 --max-num-seqs=64
例如
1 python -m vllm.entrypoints.openai.api_server \
2     --model /mnt/d/modelscope_stuff/tclf90/Qwen3.5-9B-AWQ \
3     --host 0.0.0.0 --port 8899 \
4     --gpu-memory-utilization 0.85 #适当提高,但不要拉满(比如 0.95 以上),否则系统进程或其他 CUDA 应用可能被挤出显存。
5     --max-model-len 8192 \    #强制限制最大上下文长度,可尝试 16384、32768、65536、131072等更大值,直到刚好不报错    
6     --enforce-eager           #避免 CUDA Graph 的额外显存占用(释放少量)   
7     --cpu-offload-gb 4        #卸载 4GB 的层到内存
8     --max-num-seqs=128            #最大并发序列

通过OpenAI的API使用vLLM

代码如下,和普通的API、ollama提供的API一样。

 1 from openai import OpenAI
 2 ​
 3 client = OpenAI(
 4     base_url="http://172.17.135.122:8899/v1",#"http://localhost:8899/v1",
 5     api_key="vllm_not-needed"   # vLLM 默认不校验,可随意填写
 6 )
 7 ​
 8 response = client.chat.completions.create(
 9     model="/mnt/d/modelscope_stuff/Qwen/Qwen3.5-4B",    # 可以是 LoRA 名,也可以是基座模型名
10     messages=[{"role": "user", "content": "计算1+2+3,直接给出答案"}],
11     temperature=0.7,
12     max_tokens=512
13 )
14 print(response.choices[0].message.content)

vLLM 的 OpenAI 兼容 API 和原生 API 共用的是同一套底层推理引擎(AsyncLLMEngine + PagedAttention + 连续批处理),核心的推理性能、显存利用率、并发批处理能力本质上没有区别。

两者的差异仅停留在接口层的功能覆盖、接入成本和极微量的 HTTP 协议开销上,对于绝大多数 RAG、问答类业务场景,OpenAI 兼容接口的性能完全够用,且开发成本低得多。

vLLM加载多模型

vLLM加载同一模型基座的多个微调模型(“LoRA微调”见其他文档)

(未验证)

python -m vllm.entrypoints.openai.api_server \
  --model /models/Qwen2.5-7B-Instruct \
  --enable-lora \
  --lora-modules code=/loras/code \
                  math=/loras/math \
                  translate=/loras/translate \
  --max-lora-rank 64 \
  --max-cpu-loras 10 \
  --gpu-memory-utilization 0.92