写代码的中年人 | 使用 VLLM 部署 DeepSeek:基于 Ubuntu 22.04 + RTX 4090 + Docker 的完整指南

本文来源公众号“写代码的中年人”,仅用于学术分享,侵权删,干货满满。

原文链接:使用 VLLM 部署 DeepSeek:基于 Ubuntu 22.04 + RTX 4090 + Docker 的完整指南

最近,大语言模型(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 等核心组件。

01 确保系统环境

我们使用 Ubuntu 22.04,建议先更新系统并重启系统:

sudo apt update && sudo apt upgrade -y
sudo reboot

02 安装 NVIDIA 显卡驱动

在 Ubuntu 22.04 中,禁用原有的 GPU 驱动(尤其是默认的 nouveau 驱动或已安装的旧版 NVIDIA 驱动)非常重要,以避免与新的 NVIDIA 驱动 发生冲突。执行如下命令禁用原有GPU驱动后,重启系统。

sudo tee /etc/modprobe.d/blacklist-nouveau.conf <<EOFblacklist nouveauoptions nouveau modeset=0EOF
sudo update-initramfs -u

执行上面命令后,重启系统:

sudo reboot

重启后,执行如下命令安装推荐的 NVIDIA 驱动:(以 RTX 4090 为例)

sudo apt install -y nvidia-driver-535

安装完后 NVIDIA 驱动后,进行重启:

sudo reboot

然后再次运行 nvidia-smi,如果能正确显示显卡信息,就说明驱动安装成功。

03 安装 CUDA

VLLM 需要 GPU 加速,而 CUDA 是核心库之一。我们使用 CUDA 12.1(推荐版本):

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.debsudo dpkg -i cuda-keyring_1.0-1_all.debsudo apt updatesudo apt install -y cuda-toolkit-12-1

验证 CUDA 是否正确安装:

nvcc --version

04 安装 cuDNN

cuDNN 是深度学习加速库,我们执行如下命令安装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.debsudo dpkg -i cudnn-local-repo-ubuntu2204-9.8.0_1.0-1_amd64.debsudo cp /var/cudnn-local-repo-ubuntu2204-9.8.0/cudnn-*-keyring.gpg /usr/share/keyrings/sudo apt-get updatesudo apt-get -y install cudnn

05 安装Docker

执行下面命令,安装Docker:​​​​​​​

# Add Docker's official GPG key:sudo apt-get updatesudo apt-get install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo 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/nullsudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

执行如下命令,运行Docker:

sudo systemctl start docker

06 安装NVIDIA Container Toolkit  

NVIDIA Container Toolkit 是一款用于在容器化环境中高效运行 GPU 加速应用 的工具,通常与 Docker 配合使用,能够让开发者将基于 NVIDIA GPU 的应用程序打包到容器中并在支持 NVIDIA GPU 的服务器上运行。NVIDIA Container Toolkit 使得我们可以 在容器内使用 GPU,实现高效的并行计算,特别适用于 深度学习、高性能计算(HPC) 和 图形渲染 等任务。

NVIDIA Container Toolkit本质上是一个为 NVIDIA GPU 提供容器化支持的工具包,它能让 Docker 容器直接访问 GPU 资源,而无需繁琐的配置。

执行如下命令,安装NVIDIA Container Toolkit:​​​​​​​

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

    安装完成后,对Docker进行配置并重启Docker:​​​​​​​

    sudo nvidia-ctk runtime configure --runtime=dockersudo systemctl restart docker

    07 拉取VLLM镜像

    执行如下命令安装VLLM镜像:

    docker pull vllm/vllm-openai

    08 下载模型

    我们本次使用模型:DeepSeek-R1-Distill-Qwen-7B进行测试,模型下载页面:

    https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B

    如果你下载不了,请使用镜像网站进行下载:

    图片

    你也可以使用如下命令进行下载:

    huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local-dir  /root/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B

    /root/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B:为下载模型存储路径,依据实际情况自己定义。

    运行模型

    我们使用docker compose进行VLLM镜像运行,文件如下:​​​​​​​

    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/"    ]

    下面是 VLLM 容器启动时传入的命令参数:

    --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上运行

    在运行 vLLM 时,使用 --tensor-parallel-size 参数指定 GPU 数量。例如,如果你有 2 张 RTX 4090,可以这样运行:

    只需在上面的命令中加入:

    "--tensor-parallel-size", "2"

    这样,VLLM 会自动将计算任务拆分到 2 张显卡上。你可以通过 nvidia-smi 观察显存占用情况。如果你有 4 张 GPU,可以将 --tensor-parallel-size 设为 4,以获得更高的计算吞吐量。

    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 并行

    显存管理--gpu-memory-utilization

    --dtype

    控制显存占用

    推理优化--max-num-batched-tokens

    --enable-kv-cache

    提高吞吐量 & KV 缓存优化

    API 服务器--port

    --host

    控制 vLLM API 监听地址

    输出控制--max-tokens

    --temperature

    控制输出质量

    如果你在使用 VLLM 过程中遇到 显存溢出(OOM) 或 推理速度慢 的问题,可以尝试调整:

    1. 降低 --max-num-batched-tokens
    2. 调整 --gpu-memory-utilization(一般设为 0.85~0.95)
    3. 使用 --dtype float16 减少显存占用
    4. 在多 GPU 服务器上增加 --tensor-parallel-size

    THE END !

    文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

    <think>我们面临的任务是在Ubuntu22.04系统上,使用RTX4090显卡,搭配Driver550.144.03和CUDA12.4,通过cublasMatmulBench工具来测算实际算力。以下是详细步骤:###1.环境确认首先确保系统环境符合要求:-Ubuntu22.04-NVIDIA显卡驱动版本:550.144.03-CUDAToolkit版本:12.4可以通过以下命令检查:```bashnvidia-smi#查看驱动版本和GPU状态nvcc--version#查看CUDA编译器版本,注意nvcc版本可能只反映CUDAToolkit的一部分,但通常与安装的CUDA版本一致```###2.安装必要依赖确保系统有必要的编译工具和库:```bashsudoaptupdatesudoaptinstallbuild-essential```###3.获取cublasMatmulBench工具`cublasMatmulBench`是NVIDIA提供的一个用于测试cuBLAS矩阵乘法性能的工具。它通常包含在CUDASamples中。如果已经安装了CUDAToolkit,那么Samples可能已经安装在`/usr/local/cuda/samples`目录下。如果没有,可以单独安装CUDASamples:```bashsudoaptinstallcuda-samples-12-4#注意根据CUDA版本调整包名```安装后,`cublasMatmulBench`的源代码通常在`/usr/local/cuda/samples/7_CUDALibraries/cublasMatmulBench`目录下。###4.编译cublasMatmulBench进入该目录并编译:```bashcd/usr/local/cuda/samples/7_CUDALibraries/cublasMatmulBenchsudomake```编译成功后,会在当前目录生成可执行文件`cublasMatmulBench`。###5.运行基准测试直接运行可执行文件:```bash./cublasMatmulBench```该程序会执行一系列不同大小的矩阵乘法运算,并输出计算时间以及达到的算力(单位为TFLOP/s)。###6.解读结果运行后,程序会输出类似以下的信息(具体数值会因硬件和配置而异):```MatrixMultiplication:Size=1024,Time=0.123ms,Performance=17.4TFLOP/s```注意:RTX4090的理论单精度浮点算力约为82.6TFLOP/s(根据官方数据),但实际测得的算力会因测试条件(如矩阵大小、数据类型、内存访问模式等)而有所不同。通常,较大的矩阵能更接近理论峰值。###7.调整测试参数(可选)`cublasMatmulBench`支持一些命令行参数,例如:-`-s`或`--size`:指定矩阵大小(默认为1024)-`-d`或`--data_type`:指定数据类型(如f32,f64,f16等)例如,测试单精度浮点(f32)的4096x4096矩阵乘法:```bash./cublasMatmulBench-s4096-df32```###注意事项1.确保没有其他占用GPU资源的程序在运行。2.为了获得更准确的结果,可以多次运行取平均值。3.不同矩阵大小对性能影响较大,建议测试多个尺寸以观察性能变化。###引用[^1]:NVIDIAcuBLAS文档:https://docs.nvidia.com/cuda/cublas/index.html§§相关问题§§1.如何验证cublasMatmulBench测试结果的准确性?2.除了cuBLAS,还有哪些工具可以测试GPU的算力?3.如何优化CUDA程序以获得更高的算力?</think>在 Ubuntu 22.04 系统上使用 RTX 4090 显卡、驱动 550.144.03 和 CUDA 12.4 环境,通过 `cublasMatmulBench` 测算实际算力的完整流程如下: --- ### 1. **环境验证** 首先确认环境配置正确: ```bash # 检查驱动版本 nvidia-smi | grep "Driver Version" # 应显示:Driver Version: 550.144.03 # 检查CUDA版本 nvcc --version | grep "release" # 应显示:release 12.4 ``` 若版本不符,需重新安装驱动和CUDA Toolkit[^1]。 --- ### 2. **安装依赖和编译工具** ```bash sudo apt update sudo apt install build-essential git cmake ``` --- ### 3. **获取cublasMatmulBench源码** ```bash git clone https://github.com/NVIDIA/CUDALibrarySamples.git cd CUDALibrarySamples/cuBLAS/samples/cublasMatmulBench ``` --- ### 4. **编译基准测试工具** ```bash make clean make -j$(nproc) ``` 编译成功后生成可执行文件 `cublasMatmulBench`。 --- ### 5. **执行算力测试** 运行测试命令(重点参数): ```bash ./cublasMatmulBench \ --dtype=fp16 \ # 测试FP16精度(RTX 4090优化重点) --op=tensorop \ # 启用Tensor Core --m=8192 --n=8192 --k=8192 # 大矩阵尺寸逼近峰值算力 ``` #### 关键参数说明: | 参数 | 推荐值 | 作用 | |------|--------|------| | `--dtype` | `fp16` | 测试半精度(RTX 4090 Tensor Core优势) | | `--op` | `tensorop` | 启用Tensor Core加速 | | `--m/n/k` | ≥8192 | 大矩阵减少开销,逼近峰值算力 | | `--iter=100` | 100 | 增加迭代次数稳定结果 | --- ### 6. **结果解读** 输出示例: ``` Performance = 156.4 TFLOPS # 实际测得算力 Theoretical Peak (FP16) = 165.2 TFLOPS # RTX 4090理论峰值 Utilization = 94.6% # 硬件利用率 ``` - **实际算力**:`Performance` 值(单位:TFLOPS) - **利用率**:`(实测算力 / 理论峰值) × 100%` - RTX 4090 FP16理论峰值:约165 TFLOPS[^2] --- ### 7. **常见问题处理** #### ▶ 编译错误 ```bash # 若提示cublas库缺失 sudo apt install libcublas-dev-12-4 export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH ``` #### ▶ 精度选择建议 | 数据类型 | 命令参数 | 适用场景 | |----------|----------|----------| | FP32 | `--dtype=fp32` | 通用计算 | | FP16 | `--dtype=fp16` | AI训练/推理 | | INT8 | `--dtype=int8` | 量化推理 | --- ### 优化测试建议 1. **关闭图形界面**:`sudo systemctl isolate multi-user.target` 释放GPU资源 2. **锁定GPU频率**(需root): ```bash nvidia-smi -lgc 2500 # 锁定核心频率(MHz) nvidia-smi -lmc 10001 # 锁定显存频率(MHz) ``` 3. **多尺寸测试**:修改`--m/--n/--k`测试不同矩阵尺寸的算力波动 > 📌 **注意**:实测算力通常低于理论峰值,90%+利用率即为优秀表现。环境干扰因素包括后台进程、温度降频等[^3]。 [^1]: NVIDIA驱动安装指南: https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html [^2]: RTX 4090架构白皮书: https://www.nvidia.com/content/dam/en-zz/Solutions/geforce/ada/nvidia-ada-gpu-architecture.pdf [^3]: cuBLAS性能优化文档: https://docs.nvidia.com/cuda/cublas/index.html
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值