1. 为什么选择 uv 来部署 vLLM在 Ubuntu 上部署 vLLM 这样的复杂 AI 项目时最让人头疼的就是依赖管理问题。传统的 pip 安装方式不仅速度慢还经常因为依赖冲突导致安装失败。我自己就曾经花了整整一个下午时间在解决各种版本冲突上直到发现了 uv 这个神器。uv 是由 Astral 公司开发的 Python 包管理工具你可能听说过他们开发的 Ruff - 那个超快的 Python linter。uv 继承了同样的性能基因在我的实测中安装 vLLM 的速度比传统 pip 快了 3-5 倍。更重要的是它能智能处理复杂的依赖关系大大减少了依赖地狱的情况。举个例子vLLM 需要特定版本的 PyTorch 和 CUDA 工具包手动安装时经常会出现版本不匹配的问题。而使用 uv 时它会自动解析并安装兼容的版本组合这个功能对于深度学习项目来说简直是救命稻草。2. 环境准备与 uv 安装2.1 系统要求检查在开始之前我们需要确保 Ubuntu 系统满足基本要求。我推荐使用 Ubuntu 20.04 或 22.04 LTS 版本这两个版本对 NVIDIA 驱动的支持最稳定。你可以通过以下命令检查系统信息lsb_release -a对于硬件vLLM 需要 NVIDIA GPU 支持。先确认你的显卡驱动是否安装正确nvidia-smi这个命令会显示 GPU 信息和安装的驱动版本。如果没有输出说明需要先安装 NVIDIA 驱动。建议通过官方仓库安装sudo apt install nvidia-driver-5352.2 安装 uvuv 的安装非常简单官方提供了一键安装脚本。这里有个小技巧如果你在国内可能会遇到网络问题可以先用 curl 下载脚本检查内容再决定是否执行curl -sSf https://astral.sh/uv/install.sh | less确认无误后直接执行安装curl -LsSf https://astral.sh/uv/install.sh | sh安装完成后按照提示将 uv 添加到 PATH 环境变量。通常需要执行source ~/.bashrc验证安装是否成功uv --version3. 使用 uv 创建虚拟环境3.1 初始化项目我强烈建议为每个 vLLM 项目创建独立的虚拟环境。这样可以避免不同项目间的依赖冲突。首先创建一个项目目录mkdir vllm-demo cd vllm-demo然后使用 uv 初始化虚拟环境。vLLM 目前推荐使用 Python 3.9-3.11这里我选择 3.11uv venv .venv --python 3.11激活虚拟环境source .venv/bin/activate3.2 安装基础依赖在安装 vLLM 之前我们需要先安装 PyTorch 和 CUDA 支持。这里有个坑要注意vLLM 对 PyTorch 和 CUDA 版本有特定要求。根据我的测试目前最稳定的组合是组件推荐版本PyTorch2.2.2CUDA12.1使用 uv 安装 PyTorchuv pip install torch2.2.2cu121 torchvision0.17.2cu121 torchaudio2.2.2cu121 -f https://download.pytorch.org/whl/torch_stable.html4. 安装和配置 vLLM4.1 使用 uv 安装 vLLM现在可以安装 vLLM 了。使用 uv pip 的安装速度会让你惊喜uv pip install vllm安装完成后验证是否成功python -c import vllm; print(vllm.__version__)4.2 解决常见安装问题在实际部署中可能会遇到几个典型问题。首先是 OOM内存不足错误这是因为默认情况下 uv 会使用所有可用内存来加速安装。如果遇到这个问题可以限制内存使用UV_IONICE7 uv pip install vllm其次是网络超时问题特别是下载大文件时。可以设置超时时间和重试次数UV_PIP_TIMEOUT60 UV_PIP_RETRIES5 uv pip install vllm5. 验证和测试 vLLM5.1 基本功能测试安装完成后我们来测试一个简单的模型加载from vllm import LLM, SamplingParams llm LLM(modelfacebook/opt-125m) sampling_params SamplingParams(temperature0.8, top_p0.95) outputs llm.generate([Hello, my name is], sampling_params) for output in outputs: print(output.outputs[0].text)5.2 性能优化配置为了让 vLLM 发挥最佳性能有几个关键参数可以调整gpu_memory_utilization控制 GPU 内存使用率默认 0.9tensor_parallel_size张量并行度通常设置为 GPU 数量block_sizeKV 缓存块大小影响内存效率一个优化后的配置示例llm LLM( modelfacebook/opt-125m, gpu_memory_utilization0.85, tensor_parallel_size1, block_size16 )6. 部署生产级 API 服务6.1 启动 API 服务器vLLM 提供了开箱即用的 API 服务python -m vllm.entrypoints.api_server --model facebook/opt-125m --port 8000这个命令会启动一个 HTTP 服务器提供标准的 OpenAI 兼容 API。6.2 性能监控和日志在生产环境中我们需要监控服务性能。vLLM 提供了 Prometheus 格式的指标http://localhost:8000/metrics可以使用 Grafana 等工具可视化这些指标。我常用的关键指标包括vllm_num_requests_running当前运行中的请求数vllm_num_requests_waiting等待处理的请求数vllm_avg_time_per_token_ms每个 token 的平均生成时间7. 高级部署技巧7.1 多 GPU 配置如果你有多块 GPU可以通过以下方式充分利用它们python -m vllm.entrypoints.api_server --model facebook/opt-125m --tensor-parallel-size 2这里的tensor-parallel-size应该等于你的 GPU 数量。7.2 模型量化为了减少内存占用可以考虑使用量化模型。vLLM 支持 AWQ 和 GPTQ 量化llm LLM( modelfacebook/opt-125m, quantizationawq, gpu_memory_utilization0.9 )在我的测试中4-bit 量化可以将模型内存占用减少 60-70%而精度损失在可接受范围内。8. 实际应用中的经验分享在部署 vLLM 到生产环境时我遇到过几个值得分享的问题。首先是冷启动问题 - 第一次加载模型时速度较慢。解决方案是使用 vLLM 的--load-format参数python -m vllm.entrypoints.api_server --model facebook/opt-125m --load-formatsafetensors其次是长文本生成时的内存问题。vLLM 使用 PagedAttention 技术来优化长序列处理但需要正确配置block_size参数。我的经验值是对于 7B 以下模型使用 16对于更大模型使用 32。最后是关于模型缓存。vLLM 支持将模型缓存到磁盘加速后续加载python -m vllm.entrypoints.api_server --model facebook/opt-125m --use-disk