微信扫码
添加专属顾问
我要投稿
掌握VLLM部署技能,高效运行DeepSeek模型。核心内容:1. VLLM推理引擎的高性能优势与核心特性2. Ubuntu 22.04环境下的显卡驱动与CUDA安装3. Docker环境下VLLM的部署与运行流程
最近,大语言模型(LLM)的部署已经成为 AI 开发者绕不开的核心技能。而 VLLM 作为一款高性能、低延迟的推理引擎,在大模型推理领域迅速崛起。今天,我就带大家从零开始,在 Ubuntu 22.04 + RTX 4090 + Docker 环境下,部署 DeepSeek模型,并让它跑起来!
这篇文章适合那些想快速上手 vLLM 的开发者,文章涵盖了显卡驱动、CUDA、Docker 环境的安装,以及 vLLM 的完整运行流程。让我们开始吧!
什么是 VLLM?
VLLM(Very Large Language Model Inference)是一个 高性能、优化显存管理 的大模型推理引擎。它的目标是 最大化推理吞吐量,并降低显存消耗,让大语言模型(LLMs)在 单卡或多 GPU 服务器 上运行得更高效。
VLLM 的核心优势:
高吞吐量:支持批量推理,减少 token 生成延迟,高效 KV
缓存管理:优化 GPU 显存,支持 更长的上下文
多 GPU 支持:Tensor Parallel 加速推
OpenAI API 兼容:可以作为 本地 API 服务器 运行
环境准备
在正式部署 VLLM 之前,我们需要先确保机器环境可用,包括 显卡驱动、CUDA、Docker 等核心组件。
确保系统环境
我们使用 Ubuntu 22.04,建议先更新系统并重启系统:
sudo apt update && sudo apt upgrade -y
sudo reboot
安装 NVIDIA 显卡驱动
sudo tee /etc/modprobe.d/blacklist-nouveau.conf <<EOF
blacklist nouveau
options nouveau modeset=0
EOF
sudo update-initramfs -u
sudo reboot
sudo apt install -y nvidia-driver-535
sudo reboot
然后再次运行 nvidia-smi,如果能正确显示显卡信息,就说明驱动安装成功。
安装 CUDA
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt update
sudo apt install -y cuda-toolkit-12-1
nvcc --version
安装 cuDNN
wget https://developer.download.nvidia.com/compute/cudnn/9.8.0/local_installers/cudnn-local-repo-ubuntu2204-9.8.0_1.0-1_amd64.deb
sudo dpkg -i cudnn-local-repo-ubuntu2204-9.8.0_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-9.8.0/cudnn-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cudnn
安装Docker
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
安装NVIDIA Container Toolkit
NVIDIA Container Toolkit 是一款用于在容器化环境中高效运行 GPU 加速应用 的工具,通常与 Docker 配合使用,能够让开发者将基于 NVIDIA GPU 的应用程序打包到容器中并在支持 NVIDIA GPU 的服务器上运行。NVIDIA Container Toolkit 使得我们可以 在容器内使用 GPU,实现高效的并行计算,特别适用于 深度学习、高性能计算(HPC) 和 图形渲染 等任务。
NVIDIA Container Toolkit本质上是一个为 NVIDIA GPU 提供容器化支持的工具包,它能让 Docker 容器直接访问 GPU 资源,而无需繁琐的配置。
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
拉取VLLM镜像
docker pull vllm/vllm-openai
下载模型
huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local-dir /root/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
运行模型
version: '3.9'
services:
vllm_service:
image: vllm/vllm-openai:latest
container_name: vllm_deepseek_7b
restart: always
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
ports:
- "8000:8000"
volumes:
- /root/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B:/app/model
command: [
"--served-model-name", "DeepSeek-R1:7b",
"--trust-remote-code",
"--enforce-eager",
"--gpu-memory-utilization", "0.8",
"--model", "/app/model/",
"--host", "0.0.0.0",
"--port", "8000",
"--max-model-len", "10000",
"--api-key", "12345678",
"--tokenizer", "/app/model/"
]
--served-model-name "DeepSeek-R1:7b"
设置模型名称为 DeepSeek-R1:7b。这是在容器内加载的模型名称。
--trust-remote-code
允许容器信任远程代码执行。这在使用外部模型时很有用,但在安全性较为敏感的情况下需谨慎使用。
--enforce-eager
启用急切执行模式(Eager Execution)。在某些情况下,急切执行模式可以帮助调试和查看模型的每个操作的结果。
--gpu-memory-utilization "0.8"
指定容器使用 GPU 显存的比例。在此配置中,0.8 表示容器将使用 GPU 显存的 80%。
--model "/app/model/"
指定模型文件的位置,即挂载到容器中的 /app/model/ 目录。这个路径将指向你的 DeepSeek 模型。
--host "0.0.0.0"
设置容器的绑定地址为 0.0.0.0,这意味着容器将接受来自所有 IP 地址的请求。
--port "8000"
设置容器服务监听的端口为 8000,也就是你通过 localhost:8000 或宿主机的 IP 地址和端口来访问该容器提供的 API 服务。
--max-model-len "10000"
该参数设置模型能够处理的最大输入文本长度,通常这个值的设置需要根据模型和任务的需求来进行调节。
--api-key "12345678"
设置访问 API 的密钥,这个密钥通常用于验证客户端请求的合法性和安全性。你可以将其替换为实际的 API 密钥。
--tokenizer "/app/model/"
设置 分词器 的路径,在这里,分词器位于 /app/model/ 目录下,这个目录包含了模型的相关资源文件,包括分词器。
VLLM在多张GPU上运行
"--tensor-parallel-size", "2"
KV 缓存优化
在 Transformer 结构中,每次生成新 token 时,模型需要重新计算所有之前的 token(自回归推理)。这会导致长文本推理速度越来越慢。KV 缓存(Key-Value Cache) 是一种优化策略,它将计算过的 Key(键)和 Value(值)存储起来,避免重复计算,从而加速推理。
vLLM 的 Paged KV 缓存
vLLM 采用了一种 Paged KV 缓存 技术,相比传统的 KV 缓存,它能更高效地管理显存,避免显存碎片化,提高推理效率。
特点:
动态分配内存 —— 仅在需要时分配缓存,减少不必要的显存占用
支持流式生成 —— 适用于长文本对话,避免显存溢出
减少重复计算 —— 加快推理速度,特别适用于长文本生成
开启 KV 缓存优化
vLLM 默认开启 KV 缓存,但如果要手动调整 KV 缓存的大小,可以使用 --max-num-batched-tokens 参数。如果你的模型处理长文本较多,建议调大 --max-num-batched-tokens,但要注意 GPU 显存的使用情况。
VLLM 常用参数简介
核心设置 |
--model --tensor-parallel-size |
|
显存管理 |
--gpu-memory-utilization --dtype |
|
推理优化 |
--max-num-batched-tokens --enable-kv-cache |
|
API 服务器 |
--port --host |
|
输出控制 |
--max-tokens --temperature |
如果你在使用 VLLM 过程中遇到 显存溢出(OOM) 或 推理速度慢 的问题,可以尝试调整:
--max-num-batched-tokens
--gpu-memory-utilization
(一般设为 0.85~0.95)--dtype float16
减少显存占用--tensor-parallel-size
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-03-17
阿里大模型QWQ-32B低成本部署(两分钟了解AI社区最新动态)
2025-03-17
终于把深度学习中的微调、提炼和迁移学习搞懂了!!
2025-03-17
Trae 接入硅基流动 SiliconCloud,高效提升开发者编程体验
2025-03-17
《大模型微调的十种方法》
2025-03-17
AI Code 在团队开发工作流的融合思考
2025-03-16
使用Ollama部署deepseek大模型
2025-03-16
DeepSeek-R1的Qwen-32B蒸馏模型与QwQ-32B模型,谁更强?
2025-03-16
deepseek-r1:32b在低性能电脑部署运行
2025-02-04
2025-02-04
2024-09-18
2024-07-11
2024-07-09
2024-07-11
2024-07-26
2025-02-05
2025-01-27
2025-02-01
2025-03-16
2025-03-16
2025-03-13
2025-03-13
2025-03-11
2025-03-07
2025-03-05
2025-03-05