1、介绍
博主为什么会选择vLLM,请看以下技术选型原因:
- SGLang:大规模集群部署专家
- Ollama:轻量级玩家最爱
- vLLM:GPU推理性能王者
- LLaMA.cpp:CPU部署救星
选择原因:要极致性能选vLLM,要简单易用选Ollama,要集群部署选SGLang,要CPU运行 → 选LLaMA.cpp
性能对比:
推理速度:vLLM > SGLang > Ollama > LLaMA.cpp
易用程度:Ollama > LLaMA.cpp > vLLM > SGLang
硬件要求:vLLM(需GPU) > SGLang > Ollama > LLaMA.cpp
2、先在宿主机安装nvidia驱动
linux上英伟达驱动run安装
3、使用dockerfile部署cuda和vllm工具套件
# 基础镜像使用 NVIDIA CUDA 12.4.0 基础版的 Ubuntu 22.04
FROM nvcr.io/nvidia/cuda:12.4.0-base-ubuntu22.04
# 设置环境变量,加快 apt-get 安装速度
ENV DEBIAN_FRONTEND=noninteractive
# 设置清华源(根据 Ubuntu 版本代号调整)
# 替换软件源为清华源,以加速后续软件包的下载
RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \
sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
## 安装 SSH 服务、vim、pip3、git 等必要工具
# 更新 apt 缓存并安装所需软件包,同时创建 SSH 服务所需的运行目录
RUN apt-get update && \
apt-get install -y --no-install-recommends \
openssh-server \
net-tools \
vim \
python3-pip \
git && \
mkdir -p /var/run/sshd && \
# 清理 apt 缓存,减少镜像大小
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 更新安装 pip3 并安装 torch、transformers、vllm
# 使用清华源加速 pip 包的下载,更新 pip 并安装深度学习相关库
RUN pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \
pip3 install --upgrade pip && \
pip3 install torch transformers vllm
# 配置 SSH 访问(允许 root 登录 + 密码认证)
# 修改 SSH 配置文件,允许 root 用户通过密码登录
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
sed -i 's/UsePAM yes/UsePAM no/' /etc/ssh/sshd_config
# 设置 root 密码(示例密码为 123456)
# 在生产环境中,建议通过环境变量传递密码,提高安全性
RUN echo 'root:123456' | chpasswd
# 生成 SSH 主机密钥
RUN ssh-keygen -A
# 暴露 SSH 端口
EXPOSE 22
# 启动 SSH 服务
CMD ["/usr/sbin/sshd", "-D"]
4、生成镜像
docker build -t vllm:latest .
5、创建容器
docker run -itd --shm-size 128g --gpus all -v /home/Llama-2-7b-hf:/mnt 724395c5643c
6、进入容器
docker exec -it 980395c548823 bash
7、服务端启动模型推理
vllm serve /mnt/ --tensor_parallel_size 1 --pipeline_parallel_size 1 --trust-remote-code --dtype auto --max-model-len 256 --swap-space 8
# 启动成功会打印如下内容:
......
INFO 05-21 12:20:24 [launcher.py:36] Route: /metrics, Methods: GET
INFO: Started server process [58927]
INFO: Waiting for application startup.
INFO: Application startup complete.
8、客户端测试服务端提供的api的性能
# 另开新终端进入容器
docker exec -it 980395c548823 bash
# 客户端启用测试
vllm bench serve --model /mnt/ --dataset_name random --random_input_len 64 --random_output_len 64 --num-prompts 64 --trust-remote-code --max-concurrency 64
# 启动成功会打印如下内容:
......
tarting initial single prompt test run...
Initial test run completed. Starting main benchmark run...
Traffic request rate: inf
Burstiness factor: 1.0 (Poisson process)
Maximum request concurrency: 64
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████| 64/64 [00:55<00:00, 1.15it/s]
============ Serving Benchmark Result ============
Successful requests: 64
Benchmark duration (s): 55.64
Total input tokens: 4096
Total generated tokens: 4096
Request throughput (req/s): 1.15
Output token throughput (tok/s): 73.61
Total Token throughput (tok/s): 147.22
---------------Time to First Token----------------
Mean TTFT (ms): 23128.62
Median TTFT (ms): 23206.74
P99 TTFT (ms): 47097.42
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms): 99.16
Median TPOT (ms): 86.83
P99 TPOT (ms): 165.62
---------------Inter-token Latency----------------
Mean ITL (ms): 103.64
Median ITL (ms): 61.03
P99 ITL (ms): 407.33
==================================================