Mac部署vLLM基础教程
1、vLLM介绍
vLLM是一个快速且易于使用的开源库,专为大型语言模型(LLM)的推理和服务设计,核心优势在于极致的吞吐量和高效的内存管理,能够显著降低LLM部署的成本和延迟。
其核心特性包括:
- 高吞吐量:采用创新的PagedAttention(分页注意力)技术管理KV缓存,结合连续批处理机制,吞吐量较传统推理框架提升数倍甚至数十倍;
- 高效内存管理:将KV缓存分割为固定大小的块,实现动态分配与复用,内存浪费率低至4%以下,支持更大批量的推理请求;
- 广泛兼容性:无缝集成Hugging Face模型,支持NVIDIA/AMD/Intel等多种硬件平台,提供与OpenAI兼容的API服务器,迁移成本极低;
- 丰富优化特性:支持GPTQ/AWQ等量化方案、推测解码、前缀缓存、多LoRA等高级功能,兼顾性能与灵活性。
适用场景:离线批处理推理、在线高并发服务、LLM应用快速部署等,是当前工业级LLM部署的优选方案之一。
2、环境准备
2.1、安装uv
2.1.1、uv是什么?
在技术领域,uv 通常指代 astral-sh/uv—— 一款由 Astral 开发的极速 Python 包管理器和项目运行工具,定位是 pip、pipenv、poetry 的高性能替代品。
核心特点
-
极致速度
- 底层用 Rust 语言编写,相比 Python 实现的
pip/poetry,包安装速度提升 10-100 倍。 - 支持并行下载、缓存复用、依赖解析优化,大幅减少项目依赖安装时间。
- 底层用 Rust 语言编写,相比 Python 实现的
-
功能全覆盖
- 兼容
pip的所有核心功能:安装、卸载、冻结依赖(uv pip freeze)。 - 支持虚拟环境管理(
uv venv),替代virtualenv/conda的部分场景。 - 支持
pyproject.toml规范,可直接管理现代 Python 项目的依赖(对标poetry/pdm)。
- 兼容
-
无缝兼容
- 可直接读取
requirements.txt或pyproject.toml文件,无需修改现有项目配置。 - 支持 Windows/macOS/Linux 全平台,包括 ARM 架构(如苹果 M 芯片、树莓派)。
- 可直接读取
2.1.2、安装uv
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
2.1.3、使配置生效
source $HOME/.local/bin/env
2.1.4、校验版本
uv --version
2.1.5、适用场景
- 开发环境:快速安装依赖,提升项目初始化效率。
- CI/CD 流水线:减少依赖安装耗时,加速构建流程。
- 替代传统工具:用单一工具替代
pip + virtualenv + poetry的组合,简化工作流。
2.1.6、与其他工具的对比
| 工具 | 语言 | 速度 | 虚拟环境管理 | 依赖锁支持 |
|---|---|---|---|---|
| pip | Python | 慢 | ❌ 不支持 | ✅ 支持 |
| poetry | Python | 中等 | ✅ 支持 | ✅ 强支持 |
| uv | Rust | 极快 | ✅ 支持 | ✅ 强支持 |
2.2、安装vllm
如下图,执行如下三个命令进行安装:
2.2.1、创建python虚拟环境
uv venv myenv --python 3.12 --seed
2.2.2、激活虚拟环境
执行如下脚本激活虚拟环境
source myenv/bin/activate
2.2.3、安装vllm
uv pip install vllm
2.3、部署模型服务
运行以下命令以启动 vLLM 服务器并使用 Qwen2.5-1.5B-Instruct 模型。如下图,安装完成后,端口服务为8000,api兼容openapi
vllm serve Qwen/Qwen2.5-1.5B-Instruct --max-num-batched-tokens 2048 --max-model-len 2000 --gpu-memory-utilization 0.8
注意:此处需要梯子,否则无法下载HF的模型,默认使用CPU进行推理。
安装完成后,如下图
2.4、验证模型服务
- 调用如下接口,查看模型列表,浏览器地址栏输入如下地址:
http://localhost:8000/v1/models
- api列表 在浏览器地址栏输入如下地址:
http://localhost:8000/openapi.json
2.5、验证模型接口调用
curl --location 'http://localhost:8000/v1/completions' \
--header 'Content-Type: application/json' \
--data '{
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"prompt": "帮我整理一下redis面试题",
"max_tokens": 1024,
"temperature": 0
}'