vLLM部署提升Ollama并发推理速度落地指南

当你用Ollama跑大模型时,单请求响应还行,一旦多人同时访问,排队等待时间就会飙升。
vLLM是专门针对大语言模型推理优化的高性能引擎,利用PagedAttention等技术大幅提升并发吞吐能力。
本文将指导你在服务器上一步步集成vLLM与Ollama,实现推理速度的显著提升。

部署前的环境准备

硬件上建议至少16GB显存的GPU(如RTX 4090、A10、A100等),CPU和内存没有硬性要求,但内存建议32GB以上。
操作系统推荐Ubuntu 20.04/22.04,需安装Python 3.10及以上版本、CUDA 12.1+(与显卡驱动匹配)、以及pip和git。

确认环境命令:

python3 --version
nvidia-smi  # 查看显卡驱动和CUDA版本

如果CUDA版本不对,参考NVIDIA官方文档安装正确版本。

安装vLLM并整合Ollama

vLLM可以通过pip直接安装,建议在独立的Python虚拟环境中操作:

python3 -m venv vllm_env
source vllm_env/bin/activate
pip install vllm

随后需要让Ollama加载的模型能被vLLM管理。
有两种主流方式:

  • 方式A:直接使用vLLM的API服务,由vLLM加载模型(推荐新手)。
  • 方式B:通过vLLM作为Ollama的后端推理引擎(需额外适配)。

本文以方式A为例,因为配置更简单且不改变Ollama的数据存储。

下载一个常用模型(以llama3.2为例):

ollama pull llama3.2

将模型转换为vLLM支持的格式。
如果模型已存在于~/.ollama/models中,可以先导出为safetensors格式(这一步需要ollama自带工具或手动转换,实际上更简洁的做法是直接使用vLLM从Hugging Face仓库拉取模型)。
因此我们切换到vLLM直接加载:

# 启动vLLM服务,监听8000端口
python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-3.2-3B --port 8000
注意:如果本地已有Ollama相同模型,vLLM会重新下载。为避免重复下载,可以通过软链接或指定本地路径,但对新手来说直接拉取更省心。

调整并发参数获得最佳速度

vLLM默认就启用了连续批处理(continuous batching),但还需要优化以下参数来提升并发吞吐:

  • --max-num-seqs:最大并发请求数,默认256,可根据显存适当调低或调高(例如128或512)。
  • --gpu-memory-utilization:GPU显存利用率,默认0.9,若显存充裕可设为0.95。
  • --max-model-len:最大生成长度,太大会浪费显存,建议根据实际任务设为2048或4096。

示例启动命令:

python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-3.2-3B \
  --port 8000 \
  --max-num-seqs 512 \
  --gpu-memory-utilization 0.95 \
  --max-model-len 2048

启动后日志会显示模型加载成功,监听端口。

测试并发推理效果

用curl发送一个请求确认基本正常:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "meta-llama/Llama-3.2-3B", "prompt": "Hello, who are you?", "max_tokens": 50}'

接下来用简单脚本模拟高并发。
创建一个stress_test.py

import requests
from concurrent.futures import ThreadPoolExecutor
import time

url = "http://localhost:8000/v1/completions"
payload = {
    "model": "meta-llama/Llama-3.2-3B",
    "prompt": "请用一句话介绍北京",
    "max_tokens": 100
}

def send_request():
    try:
        resp = requests.post(url, json=payload, timeout=30)
        return resp.status_code, resp.elapsed.total_seconds()
    except Exception as e:
        return None, str(e)

with ThreadPoolExecutor(max_workers=10) as executor:
    tasks = [executor.submit(send_request) for _ in range(20)]
    for f in tasks:
        status, cost = f.result()
        print(f"状态码: {status}, 耗时: {cost:.2f}s" if status == 200 else f"失败: {cost}")

同时运行脚本,观察所有请求都能在数秒内返回,且不会出现长时间阻塞。
与纯Ollama处理相同并发量对比(Ollama默认单线程处理,多个请求会排队),vLLM的吞吐提升非常明显。

避坑指南与高频问题

常见问题1:启动vLLM报错CUDA Out of Memory

原因是显存不足。
调低--gpu-memory-utilization至0.7,或者选择更小的模型(如1B参数)。
关闭其他占用显存的程序(如浏览器、桌面环境)。

常见问题2:请求返回400 Bad Request

检查模型名称是否与启动时完全一致。
如果模型名包含组织名(如meta-llama/Llama-3.2-3B),请求中的model字段必须写全。

常见问题3:希望能直接复用Ollama下载的模型文件

将Ollama的blob文件夹软链接或复制到vLLM的缓存目录~/.cache/huggingface/hub/下,但路径结构不同,操作复杂。
建议新手直接让vLLM从Hugging Face单独下载,磁盘占用会翻倍,但省去适配麻烦。

怎样监控vLLM的性能?

启动时增加--enable-metrics参数,暴露/metrics端点供Prometheus抓取,可实时查看推理延迟、批大小等指标。

总结

通过集成vLLM,原本Ollama的串行推理升级为动态批处理的高并发模式。
你只需要准备好GPU环境,用vLLM启动API服务,并根据显存和任务需求调整max-num-seqs等参数,就能显著提升响应速度。
如果遇到模型加载报错或性能不达预期,优先检查显存利用率、最大序列数设置以及模型名称是否匹配。

分享到:
上一篇
bit AWQ量化降低本地模型显存占用优化方案
下一篇
DeepSeek-R1接入NewAPI中转站渠道配置教程
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意