1. 摘要
本文档旨在记录在离线环境的 NVIDIA H200 Tensor Core GPU 的服务器上,使用vLLM框架部署大规模语言模型(LLM)DeepSeek-R1-0528(671B 满血版)和通过官方的benchmarks测试工具进行基准测试的完整流程。
2. 硬件环境
| 服务器硬件型号 | DELL XE9680 |
| 显卡型号 | Nvidia H200 (140G显存)*8张 |
| 内存 | 约1.96TB |
| 操作系统环境 | Ubuntu22.04.5 LTS Desktop |
| 内核版本 | 6.8.60 kernel |
| 网络环境 | 离线部署 |

3. 软件版本
| 软件名称 | 作用 | 版本 |
| nvidia-driver-570 | NVIDIA GPU 硬件驱动程序,使操作系统能够识别和控制GPU,提供最基础的CUDA支持 | 570.86.15 |
| nvidia-container-toolkit | 使 Docker 容器能够访问和使用宿主机的 GPU 资源,是运行 GPU 容器的必备工具 | 1.9.0 |
| docker | 容器化平台,用于隔离、打包和部署应用(如 Ollama 和 vLLM 服务) | 28.1 |
| vllm/vllm-openai | 高性能生产级大模型推理引擎,基于 PagedAttention 技术,提供极高的吞吐量和并发能力 | latest |
| cuda-toolkit-12-4 | NVIDIA CUDA 并行计算平台工具包,包含编译器、库和开发工具,为 vLLM 等框架提供底层计算支持 | 12.8 |

4. 部署实施
4.1 安装Docker
本次不赘述Docker的安装方式,如有需要可自行搜索教程。下图是Docker的离线安装包

4.2 拉取vllm/vllm-openai:latest镜像和启动容器
docker pull vllm/vllm-openai:latest #拉取官方镜像
#vLLM启动命令
docker run -d --name vllm-deepseek \
--hostname vllm-host \
--add-host vllm-host:127.0.0.1 \
--gpus all --ipc=host -p 8000:8000 \
-v /data/models:/models:ro \ #挂载本地模型文件
-e HF_HOME=/tmp \
-e TRANSFORMERS_OFFLINE=1 \ #防止联网请求
-e HF_DATASETS_OFFLINE=1 \ #防止联网请求
--restart unless-stopped \ #故障自动重启
vllm/vllm-openai:latest \
--model /models/deepseek-ai/DeepSeek-R1-0528 \
--host 0.0.0.0 \ #为了后续测试需要,不增加此参数会报错
--port 8000 \ #为了后续测试需要,不增加此参数会报错
--max-model-len 8192 \
--max-num-batched-tokens 32768 \ # 增大批处理总token数
--max-num-seqs 512 \ # 增加最大并发请求数
--gpu-memory-utilization 0.95 \ # 提高显存利用率
--enable-prefix-caching \ # 启用前缀缓存,减少重复计算
--disable-log-stats \ # 关闭日志统计以减少干扰
--trust-remote-code \
--served-model-name deepseek-ai/DeepSeek-R1-0528 \
--enforce-eager \ # 强制Eager模式,调试性能瓶颈(可加可不加)
--quantization fp8 \ # 启用FP8量化(需确认模型支持)
--tensor-parallel-size 8 # 显式指定8卡并行



进入容器内部,创建软连接到缓存目录,否则进行基准测试的时候会报错,执行完成后重启容器
OSError: We couldn't connect to 'https://huggingface.co' to load the files, and couldn't find them in the cached files. Check your internet connection or see how to run the library in offline mode at 'https://huggingface.co/docs/transformers/installation#offline-mode'.
#进入容器内部执行
docker exec -it vllm-deepseek bash
#可自行修改你的模型目录名称
mkdir -p /tmp/huggingface/hub/models--deepseek-ai--DeepSeek-R1-0528
mkdir -p /tmp/huggingface/hub/models--deepseek-ai--DeepSeek-R1-0528/snapshots
mkdir -p /tmp/huggingface/hub/models--deepseek-ai--DeepSeek-R1-0528/refs
SNAPSHOT=$(ls /models/deepseek-ai/DeepSeek-R1-0528/model-*.safetensors | head -1 | xargs basename | cut -d'.' -f1)
echo "Snapshot ID: $SNAPSHOT”
echo "$SNAPSHOT" > /tmp/huggingface/hub/models--deepseek-ai--DeepSeek-R1-0528/refs/main
ln -sf /models/deepseek-ai/DeepSeek-R1-0528 /tmp/huggingface/hub/models--deepseek-ai--DeepSeek-R1-0528/snapshots/$SNAPSHOT
export HF_HOME=/tmp/huggingface
export TRANSFORMERS_OFFLINE=1
export HF_DATASETS_OFFLINE=1
#执行完上述内容,退出容器并重启重启
docker restart vllm-deepseek
4.3 安装Conda环境
在可联网的设备(要求驱动、Python、系统等版本与目标机器保持一致)
#创建环境
conda create -n vllm-benckmarks
#永久修改conda的国内镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
#在base环境下安装conda pack 工具包
conda install -c conda-forge conda-pack
#加载虚拟环境
conda activate vllm-benckmarks
#安装依赖,每个人的环境不同,为避免麻烦一次性安装可能用到的东西
conda install -c conda-forge python=3.10 openai transformers tokenizers aiohttp tqdm numpy pydantic typing_extensions cuda-python -y
pip install torch torchvision torchaudio vllm boto3 openai pandas datasets transformers PIL Pillow aiohttp encode tiktoken database -y
#安装完成后对环境进行打包
conda pack -n vllm-benckmarks -o vllm-bench.tar.gz
将打包好的包传输到目标机器上,进行解压加载环境
#解压文件
tar -xzf vllm-bench.tar.gz -C /opt/miniconda3/envs/vllm-benckmarks
#修复环境
/opt/miniconda3/envs/vllm-bench/bin/conda-unpack
#查看环境是否加载成功
conda info --envs

4.4 下载vLLM项目
在vLLM工具包内运行以下命令:
python3 benchmarks/benchmark_serving.py \
--backend openai-chat \
--base-url http://127.0.0.1:8000 \
--endpoint /v1/chat/completions \ #
--dataset-name random \
--model deepseek-ai/DeepSeek-R1-0528 \
--tokenizer /disk2/models_backup/deepseek-ai/DeepSeek-R1-0528 \
--seed 12345 \ #随意指定
--random-input-len 2048 \ # 增加输入长度,模拟真实场景
--random-output-len 512 \ # 增加输出长度,测试生成能力
--num-prompts 10000 \ # 增加请求数量,确保统计显著性
--request-rate 200 \ # 提高请求速率,压满硬件(H200多卡并行)
--burstiness 1.0 \ # 降低突发性,模拟稳定负载
--metric-percentiles 50,95,99 \ # 补充中位数,全面分析延迟分布
--trust-remote-code
运行成功后输出结果




486

被折叠的 条评论
为什么被折叠?



