8 卡 RTX 5090 服务器
完整安装及性能调优指南
本文介绍在 Ubuntu 22.04 LTS 环境下,基于 8 张 RTX 5090 显卡搭建 LLM 推理服务器的完整流程。涵盖 NVIDIA 驱动安装、CUDA 环境配置、llama.cpp 源码编译及多 GPU 加速参数调优。
1. 系统与硬件准备
1.1 系统要求
- 推荐:Ubuntu 22.04 LTS(64 位)
- 内核:6.8+ HWE 内核(5090 必须高内核)
介绍在 Ubuntu 22.04 LTS 环境下,基于 8 张 RTX 5090 显卡搭建 llm 推理服务器的完整流程。涵盖 NVIDIA 驱动安装(open-dkms)、CUDA 环境配置、llama.cpp 源码编译及多 GPU 加速参数调优。通过实测 Qwen3 32B 模型,验证了 8 卡并行推理的性能表现及显存分配策略,提供了从基础测试到性能基准测试的详细命令与优化建议。
本文介绍在 Ubuntu 22.04 LTS 环境下,基于 8 张 RTX 5090 显卡搭建 LLM 推理服务器的完整流程。涵盖 NVIDIA 驱动安装、CUDA 环境配置、llama.cpp 源码编译及多 GPU 加速参数调优。
# 查看 8 张 5090 是否被识别
lspci | grep -i nvidia
# 应输出 8 条 NVIDIA Corporation Device 2782 (rev a1)
# 1. 彻底卸载旧 NVIDIA 驱动
sudo apt purge nvidia* libnvidia* -y
sudo apt autoremove -y
# 2. 禁用 Nouveau
sudo bash -c 'echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/blacklist-nouveau.conf'
sudo update-initramfs -u
# 3. 重启生效
sudo reboot
# 安装 6.8+ HWE 内核
sudo apt update
sudo apt install linux-generic-hwe-22.04 -y
sudo reboot
# 验证内核版本(必须≥6.8)
uname -r
# 输出示例:6.8.0-45-generic
RTX 5090(Blackwell)必须用 open-dkms 开源内核模块驱动,闭源驱动会报错。
# 添加显卡驱动 PPA
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update
# 安装 590-open 驱动(5090 推荐)
sudo apt install nvidia-driver-590-open -y
# 重启
sudo reboot
# 验证驱动(8 卡均正常显示)
nvidia-smi
输出应显示 8 张 RTX 5090、驱动版本 590.xx、CUDA Version 12.4+。
# 下载 CUDA 12.4 安装包
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
# 安装(仅安装 CUDA Toolkit,不装驱动)
sudo sh cuda_12.4.0_550.54.14_linux.run --silent --toolkit
# 配置环境变量
echo 'export PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 验证 CUDA
nvcc -V
# 输出应显示 release 12.4
sudo apt update
sudo apt install git build-essential cmake pkg-config libopenblas-dev -y
# 基础编译工具
sudo apt update
sudo apt install git build-essential cmake pkg-config libopenblas-dev -y
# 验证依赖
gcc --version # ≥11
cmake --version # ≥3.22
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
# 关键参数:
# LLAMA_CUDA=1:启用 CUDA
# LLAMA_CUDA_DMMV_X=32:提升多 GPU 显存效率
# LLAMA_CUDA_N_GRAPH_LAYERS=9999:全层 GPU 卸载
# LLAMA_CUDA_ARCHS=120:5090 专属算力(sm_120)
cmake -B build \
-DLLAMA_CUDA=ON \
-DLLAMA_CUDA_DMMV_X=32 \
-DLLAMA_CUDA_N_GRAPH_LAYERS=9999 \
-DLLAMA_CUDA_ARCHS=120 \
-DCMAKE_BUILD_TYPE=Release
# 8 线程编译(匹配服务器 CPU 核心)
cmake --build build -j$(nproc)
./build/bin/llama-cli --help | grep -E "cuda|gpu"
# 应输出:--cuda, --gpu-layers N 等 CUDA 参数
# 进入模型目录
mkdir -p models && cd models
# 下载 Qwen3 32B Q4_K_M 量化模型(4-bit,显存友好)
wget https://hf-mirror.com/bartowski/Qwen_Qwen3-32B-GGUF/resolve/main/Qwen_Qwen3-32B-Q4_K_M.gguf
cd ..
cd ..
./build/bin/llama-cli \
-m models/Qwen_Qwen3-32B-Q4_K_M.gguf \
--gpu-layers 99 \
-t 64 \
-c 32768 \
-p "你好"
同时另开一个终端,运行 watch -n 1 nvidia-smi。
llama.cpp 自动识别所有 NVIDIA GPU,无需手动指定卡 ID。
./build/bin/llama-cli \
-m models/Qwen_Qwen3-32B-Q4_K_M.gguf \
-n 1024 \
--gpu-layers 99 \
-t 32 \
-c 16384 \
-p "撰写关于 8x RTX 5090 服务器用于大语言模型(LLM)推理的技术概述。" \
--batch-size 1024 \
--mlock \
--flash-attn on
新开终端,实时监控:
watch -n 1 nvidia-smi
8 张 5090 显存均被占用(≈4GB/卡)、GPU 利用率 = 55%。
# 8 卡极致性能参数
./build/bin/llama-cli \
-m models/Qwen_Qwen3-32B-Q4_K_M.gguf \
-n 2048 \
--gpu-layers 99 \
-t 64 \
-c 32768 \
-p "撰写关于 8x RTX 5090 服务器用于大语言模型(LLM)推理的技术概述。" \
--batch-size 2048 \
--mlock \
--flash-attn on \
--no-mmap \
--numa distribute
-n 2048:将最大生成 token 数提升至 2048,满足更长篇幅需求。-t 64:分配 64 个 CPU 线程,匹配多 GPU 并行推理的 CPU 调度需求。-c 32768:将上下文长度提升至 32768,支持更长文本输入与生成。--batch-size 2048:提升批量推理效率,适配 8×RTX 5090 多 GPU 并行算力。--mlock:锁定内存,避免内存交换(swap),提升多 GPU 推理稳定性。--flash-attn on:启用 Flash Attention 优化,充分发挥 RTX 5090 硬件性能。--no-mmap:禁用内存映射(mmap),减少内存开销,进一步提升多 GPU 协同推理速度。--numa distribute:启用 NUMA 优化,将执行任务均匀分配到所有 CPU 节点,平衡 CPU 与多 GPU 之间的内存访问效率。如需手动分配层到不同 GPU:
# 示例:前 40 层到 GPU0,后 40 层到 GPU1-7
./build/bin/llama-cli -m models/Qwen_Qwen3-32B-Q4_K_M.gguf -n 2048 --gpu-layers 80 --main-gpu 0 -t 64 -c 32768 -p "撰写关于 8x RTX 5090 服务器用于大语言模型(LLM)推理的技术概述。" --batch-size 2048 --mlock --flash-attn on --no-mmap --numa distribute
--gpu-layers 80:核心分层配置,总加载 80 层模型到 GPU。--main-gpu 0:指定 GPU0 作为主 GPU,llama.cpp 会优先将前 40 层模型加载到主 GPU,剩余的 40 层会自动均匀分配到其余 GPU。
补充:llama.cpp 不支持 --cuda-devices 参数,无需手动指定 GPU 设备(0-7),通过 --main-gpu 0 即可实现分层分配。nvidia-smi 只显示部分卡
llama.cpp 只跑 CPU,不调用 GPU
显存溢出(OOM)
5090 报错:Failed to allocate NvKmsKapiDevice
执行以下命令,确认 8 卡 5090 全量工作:
./build/bin/llama-cli \
-m models/Qwen_Qwen3-32B-Q4_K_M.gguf \
-n 4096 \
--gpu-layers 99 \
-t 64 \
-c 32768 \
-p "阐述 8x RTX 5090 在大型语言模型部署中的优势。" \
--batch-size 2048 \
--mlock \
--flash-attn on
使用 llama-bench 正确的参数格式:
./build/bin/llama-bench \
-m models/Qwen_Qwen3-32B-Q4_K_M.gguf \
-t 64 \
-p 512,2048,8192 \
-n 128,512,2048 \
-ngl 99 \
-b 2048 \
-ub 512 \
-fa 1 \
-r 3
2>&1 | tee benchmark_results.txt
| model | size | params | backend | ngl | fa | test | t/s |
|---|---|---|---|---|---|---|---|
| qwen3 32B Q4_K - Medium | 18.40 GiB | 32.76 B | CUDA | 99 | 1 | pp512 | 3569.28 ± 44.41 |
| qwen3 32B Q4_K - Medium | 18.40 GiB | 32.76 B | CUDA | 99 | 1 | pp2048 | 3744.03 ± 0.42 |
| qwen3 32B Q4_K - Medium | 18.40 GiB | 32.76 B | CUDA | 99 | 1 | pp8192 | 3512.90 ± 0.50 |
| qwen3 32B Q4_K - Medium | 18.40 GiB | 32.76 B | CUDA | 99 | 1 | tg128 | 66.56 ± 0.02 |
| qwen3 32B Q4_K - Medium | 18.40 GiB | 32.76 B | CUDA | 99 | 1 | tg512 | 66.29 ± 0.07 |
| qwen3 32B Q4_K - Medium | 18.40 GiB | 32.76 B | CUDA | 99 | 1 | tg2048 | 65.12 ± 0.03 |
build: 08f21453a (8589)

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online