本地部署vLLMヾ(•ω•`)o
vLLM 是一个高效、灵活且支持离线部署的开源框架,专为优化和运行大型语言模型(LLM)而设计,适用于自然语言处理、内容创作和企业级应用等多种场景。
vLLM 和 Ollama 的核心区别在于:vLLM 专注于高性能和高并发的生产级推理,适合企业级应用;而 Ollama 更注重用户友好性和本地化部署,适合个人开发者和小规模项目。
支持平台目前是只针对Linux平台的,可以在Windows的WSL中测试和运行,并在Linux服务器正式部署。
环境配置和安装ヾ(•ω•`)o
- 首先需要确保显卡或者CPU的硬件驱动满足要求,所以第一步先把这些搞定:Installation - vLLM
- 这里推荐使用Conda或者miniConda来做虚拟环境的配置,因为在后续打包环境到其它设备上非常有用,然后就可以参考官方文档:Quickstart - vLLM
vLLM会被安装在虚拟环境中,不需要额外安装软件,这就是为什么只需要打包迁移conda的环境即可。
迁移至离线或内网服务器:使用conda pack进行环境迁移(步骤很详细)-CSDN博客 (注意目标目录不一定要是conda的环境目录,只要在 source
命令后跟上环境的目录的激活文件地址即可,如我打包转移的vllmEnv 文件: source vllmEnv/bin/activate
)
模型的安装使用:ヾ(•ω•`)o
- 这里有两种,一种是直接用内置运行指令Quickstart - vLLM,模型会从Hugging Face被下载在默认缓存文件中,缺点是不能迁移模型且必须联网;
- 所以另一种方法是从 Hugging Face 或者 ModelScope 直接**克隆模型**,确保模型格式满足Supported Models - vLLM 即可,如:
- 然后在运行时只需要将模型配置改为模型目录地址即可
服务运行和多卡配置ヾ(•ω•`)o
我们以Qwen/Qwen3-32B · Hugging Face 为例
- 克隆到本地
- 更改文件夹名字(可选),将克隆的文件重命名为需要的名字,之后在请求OpneAI的接口时会需要,大小写敏感,所以我这里直接改为了“qwen3-32b”
- 将文件传输到服务器上(可选,如果本地运行就不用)
- 指令运行服务(通过vllm部署qwen3大模型以及基于 vLLM 的 OpenAI 兼容 API 接口调用方法总结-CSDN博客)
CUDA_VISIBLE_DEVICES=1,2,3 vllm serve --host 0.0.0.0 --port 11434 --max-model-len 18480 --tensor-parallel-size 2 ./qwen3-32b
这段命令的作用是启动 vLLM 服务,使用指定的 GPU 资源,并配置了模型的最大序列长度和张量并行大小。具体解析如下:
CUDA_VISIBLE_DEVICES=1,2,3
:这行命令设置了环境变量CUDA_VISIBLE_DEVICES
,指定运行 vLLM 服务时只使用编号为 1、2 和 3 的 GPU。这确保了只有这些 GPU 被用于模型推理,而其他 GPU 不会被使用。(不是必须)vllm serve
:这是 vLLM 提供的命令,用于启动推理服务。--host 0.0.0.0
:指定服务监听的主机地址为0.0.0.0
,表示服务将监听所有可用的网络接口,允许从外部访问。--port 11434
:指定服务监听的端口号为 11434,客户端可以通过这个端口与服务进行通信。(默认是8000端口)--max-model-len 18480
:设置模型的最大序列长度为 18480。这限制了模型处理的最大输入长度,以暂时避免KV cache memory
内存不足等问题。--tensor-parallel-size 2
:启用张量并行,并设置张量并行的大小为 2(一定要为偶数)。这意味着模型的张量将被分割成 2 份,分别在指定的 GPU 上进行计算,以提高推理效率。./qwen3-32b
:指定模型的路径为当前目录下的qwen3-32b
文件夹。这是模型的存储位置,vLLM 服务将从这里加载模型。总结来说,这段命令启动了一个使用 GPU 1、2 和 3 的 vLLM 服务,监听所有网络接口的 11434 端口,模型的最大序列长度设置为 18480,并且启用了张量并行,大小为 2,模型路径为当前目录下的
qwen3-32b
文件夹。
- 用浏览器访问http://ipAddress:11434/ 如果加载出来
{"detail":"Not Found"}
就证明服务器能够访问了,这个时候就可以使用OpenAI的API接口了。
Note
qwen3 是推理模型,要想关闭thinking功能,OpenAI的API接口是不支持的,想要禁用请参考官方文档:Qwen/Qwen3-32B · Hugging Face
from openai import OpenAI
client = OpenAI(
base_url = 'http://10.120.47.138:11434/v1',
api_key='', # required, but unused
)
response = client.chat.completions.create(
model="./qwen3-32b",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The LA Dodgers won in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
print(response.choices[0].message.content)