RTX4090(48G显存),i9处理器,128G内存,华硕 rog strix Z790-E,现在要部署一套大语言模型。按照vllm方式,不使用ollama,仅作DeepSeek(部署deepseek,同时再加一个专业小模型)的推理服务器,另外已经部署好了一台openwebui服务器,用于连接本服务器。想尽可能发挥gpu性能,请帮忙介绍一下在欧拉系统上的部署步骤。
基于您的高端硬件配置(RTX 4090 48G / i9 / 128G RAM)和 openEuler 系统环境,以下是最大化 GPU 性能的 vLLM 推理服务器部署方案。该方案针对 DeepSeek 系列模型优化,并支持多模型并发服务。
重要提示:消费级 RTX 4090 仅有 24GB 显存,48GB 显存版本应为 RTX 6000 Ada Generation(工作站级)。以下方案按 48GB 显存设计,若实际为 24GB 需调整量化策略。
一、系统环境准备(openEuler 22.03 SP4)
1. 安装 NVIDIA 驱动与 CUDA(关键步骤)
# 禁用 nouveau
cat > /etc/modprobe.d/blacklist-nouveau.conf <<EOF
blacklist nouveau
options nouveau modeset=0
EOF
dracut --force
reboot
# 安装依赖
dnf install -y gcc make kernel-devel-$(uname -r) elfutils-libelf-devel \
pciutils libglvnd-opengl libglvnd-devel libglvnd-glx
# 从 NVIDIA 官网下载驱动(推荐 550+ 版本)
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.54.15/NVIDIA-Linux-x86_64-550.54.15.run
chmod +x NVIDIA-Linux-x86_64-*.run
./NVIDIA-Linux-x86_64-*.run --no-opengl-files --no-x-check
# 验证驱动
nvidia-smi # 应显示 GPU 型号与 48GB 显存
# 安装 CUDA 12.3(vLLM 官方推荐)
wget https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-keyring-1.1-1.noarch.rpm
rpm -ivh cuda-keyring-1.1-1.noarch.rpm
dnf install -y cuda-toolkit-12-3
echo 'export PATH=/usr/local/cuda-12.3/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
2. 安装 PyTorch 与依赖
# 安装 Python 3.10+(openEuler 22.03 默认为 3.9,需升级)
dnf install -y python3.10 python3.10-pip python3.10-devel
# 创建虚拟环境
python3.10 -m venv vllm-env
source vllm-env/bin/activate
# 安装 PyTorch 2.2+(CUDA 12.1 兼容 12.3)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 安装基础依赖
pip install ninja packaging
二、vLLM 部署与性能优化
1. 从源码编译安装(推荐,性能最佳)
# 安装编译依赖
dnf install -y cmake gcc-c++ git
# 克隆 vLLM 仓库(使用最新稳定版)
git clone https://github.com/vllm-project/vllm.git
cd vllm
git checkout v0.4.3 # 推荐稳定版本
# 启用 FP8 与 PagedAttention 优化(针对 Ada 架构)
export VLLM_TARGET_DEVICE=cuda
export MAX_JOBS=$(nproc) # 充分利用 i9 多核编译
pip install -e ".[tensorizer]" # 启用 tensorizer 加速加载
2. 性能关键参数配置(针对 48GB 显存)
# 启动脚本示例:deepseek-v3-deploy.py
from vllm import LLM, SamplingParams
# DeepSeek-V3(128K context,推荐量化)
llm = LLM(
model="deepseek-ai/DeepSeek-V3",
tensor_parallel_size=1, # 单卡无需 TP
gpu_memory_utilization=0.95, # 最大化显存利用率
max_model_len=32768, # 根据需求调整 context
dtype="bfloat16", # Ada 架构原生支持 BF16
enforce_eager=False, # 启用 CUDA Graph 加速
enable_prefix_caching=True, # 提升重复 prompt 性能
quantization="fp8", # FP8 量化(需模型支持)
max_num_seqs=256, # 提高并发能力
max_num_batched_tokens=32768 # 优化吞吐
)
# 专业小模型(如医疗/法律领域)
small_llm = LLM(
model="your-specialized-model", # 例如:Qwen/Qwen2.5-7B-Med
gpu_memory_utilization=0.3, # 预留 70% 显存给主模型
dtype="auto",
max_model_len=8192
)
量化建议:
- 48GB 显存:DeepSeek-V3 可用 BF16 无量化(约 40GB)
- 24GB 显存:必须启用 AWQ 4-bit 或 FP8 量化
- 专业小模型:7B 模型用 AWQ 4-bit(约 4GB)
三、多模型服务方案(两种架构)
方案 A:独立进程 + Nginx 路由(推荐,隔离性好)
# 启动 DeepSeek 服务
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-V3 \
--port 8000 \
--gpu-memory-utilization 0.95 \
--dtype bfloat16 \
--max-model-len 32768
# 启动专业小模型服务
python -m vllm.entrypoints.openai.api_server \
--model your-specialized-model \
--port 8001 \
--gpu-memory-utilization 0.3 \
--dtype auto
Nginx 路由配置(/etc/nginx/conf.d/vllm.conf)
upstream deepseek_backend {
server 127.0.0.1:8000;
}
upstream specialist_backend {
server 127.0.0.1:8001;
}
server {
listen 8002;
location /v1/chat/completions {
proxy_pass http://deepseek_backend;
}
location /v1/specialist/completions {
proxy_pass http://specialist_backend;
}
}
方案 B:单进程多 LoRA 适配器(适合同基础模型)
# 适用于 DeepSeek-Coder + 专业领域微调
llm = LLM(
model="deepseek-ai/deepseek-coder-33b-instruct",
enable_lora=True,
max_loras=4
)
llm.add_lora("medical", "path/to/medical-lora")
llm.add_lora("legal", "path/to/legal-lora")
四、与 OpenWebUI 对接
1. 在 OpenWebUI 配置模型端点
- 基础模型:
http://<vllm-server-ip>:8002/v1 - 专业模型:
http://<vllm-server-ip>:8002/v1/specialist
2. OpenWebUI 配置示例(settings → Model Providers)
# DeepSeek 主模型
Provider: OpenAI Compatible
Base URL: http://vllm-server:8002/v1
API Key: not-needed # vLLM 默认无需 API Key
Model Name: deepseek-v3
# 专业小模型
Provider: OpenAI Compatible
Base URL: http://vllm-server:8002/v1/specialist
Model Name: specialist-model
五、极致性能调优清单
| 优化项 | 配置建议 | 性能提升 |
|---|---|---|
| CUDA Graph | enforce_eager=False |
+15~25% 吞吐 |
| PagedAttention | 默认启用 | 支持 128K context |
| BF16 推理 | dtype="bfloat16" |
Ada 架构原生加速 |
| FP8 量化 | quantization="fp8" |
显存↓30%,速度↑10% |
| Prefix Caching | enable_prefix_caching=True |
重复 prompt 速度↑3倍 |
| Tensor Parallel | 单卡设为 1 | 避免通信开销 |
| Max Seqs | max_num_seqs=256 |
提高并发吞吐 |
| 内核参数 | echo 2048 > /proc/sys/vm/max_map_count |
避免 mmap 错误 |
监控脚本(实时观察 GPU 利用率)
watch -n 0.5 'nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv'
六、故障排查与注意事项
-
openEuler 兼容性问题:
- 若编译失败,尝试
export CUDACXX=/usr/local/cuda-12.3/bin/nvcc - glibc 版本需 ≥ 2.34(openEuler 22.03 SP4 满足)
- 若编译失败,尝试
-
显存不足:
# 查看实际显存 nvidia-smi --query-gpu=memory.total --format=csv # 若为 24GB,DeepSeek-V3 必须用 AWQ 4-bit 量化 -
模型下载加速:
# 使用 hf-transfer 加速 pip install hf-transfer export HF_HUB_ENABLE_HF_TRANSFER=1 -
服务稳定性:
# 使用 systemd 守护进程 cat > /etc/systemd/system/vllm-deepseek.service <<EOF [Unit] Description=vLLM DeepSeek Service After=network.target [Service] User=root WorkingDirectory=/opt/vllm ExecStart=/opt/vllm/vllm-env/bin/python -m vllm.entrypoints.openai.api_server --model deepseek-ai/DeepSeek-V3 --port 8000 --gpu-memory-utilization 0.95 Restart=always Environment="CUDA_VISIBLE_DEVICES=0" [Install] WantedBy=multi-user.target EOF systemctl daemon-reload && systemctl enable --now vllm-deepseek
七、预期性能指标(RTX 6000 Ada 48GB)
| 模型 | 量化 | Context | 吞吐量(tokens/s) | 首 token 延迟 |
|---|---|---|---|---|
| DeepSeek-V3 | BF16 | 4K | 180~220 | <80ms |
| DeepSeek-V3 | FP8 | 32K | 140~170 | <120ms |
| 7B 专业模型 | AWQ 4-bit | 8K | 300~350 | <40ms |
提示:通过
--max-num-seqs和--max-num-batched-tokens调整可进一步提升吞吐,适合高并发场景。
按照此方案部署,您的 48GB GPU 可充分发挥性能,同时支持 DeepSeek 主模型与专业小模型的高效并发服务,完美对接 OpenWebUI 前端。如需针对特定领域模型选型建议,可进一步沟通。