跳到主要内容8 卡 RTX 5090 服务器 llama.cpp 部署与性能测试指南 | 极客日志Python
8 卡 RTX 5090 服务器 llama.cpp 部署与性能测试指南
8 卡 RTX 5090 服务器 llama.cpp 部署与性能测试指南 一、系统与硬件准备 1.1 系统要求 推荐:**Ubuntu 22.04 LTS(64 位)** 内核:**6.8+ HWE 内核**(5090 必须高内核) 禁用:**Nouveau 开源驱动**(与 NVIDIA 驱动冲突) 1.2 硬件检查 
RTX 5090(Blackwell)必须用 open-dkms 开源内核模块驱动,闭源驱动会报错。
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update
sudo apt install nvidia-driver-590-open -y
sudo reboot
nvidia-smi
三、安装 CUDA Toolkit(llama.cpp 依赖)
3.1 安装 CUDA 12.4(与 590 驱动匹配)
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
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
nvcc -V
3.2 安装基础编译工具(llama.cpp 多 GPU 核心依赖)
sudo apt update
sudo apt install git build-essential cmake pkg-config libopenblas-dev -y
四、编译 llama.cpp(开启 8 卡 CUDA 加速)
4.1 克隆源码
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
4.2 编译(开启 CUDA + 多 GPU + 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
cmake --build build -j$(nproc)
4.3 验证编译
./build/bin/llama-cli --help | grep -E "cuda|gpu"
五、准备 GGUF 模型(测试用)
5.1 下载测试模型(以 Qwen3 32B Q4_K_M 为例)
mkdir -p models && cd models
wget https://hf-mirror.com/bartowski/Qwen_Qwen3-32B-GGUF/resolve/main/Qwen_Qwen3-32B-Q4_K_M.gguf
cd ..
六、8 卡 5090 llama.cpp 测试(核心步骤)
6.1 单卡基础测试(验证 CUDA)
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
6.2 8 卡并行测试(多 GPU 自动负载均衡)
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
[ Prompt: 289.1 t/s | Generation: 66.6 t/s ]
6.3 8 卡显存与负载验证
8 张 5090 显存均被占用(≈4GB/卡)、GPU 利用率 =55%。
七、性能调优(8 卡 5090 专属)
7.1 关键参数优化
./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(非统一内存访问)优化,采用"distribute"模式,将执行任务均匀分配到所有 CPU 节点,适配多 CPU 节点服务器,平衡 CPU 与多 GPU 之间的内存访问效率,避免资源瓶颈
[ Prompt: 280.4 t/s | Generation: 65.2 t/s ]
8 张 5090 显存均被占用(≈4GB/卡)、GPU 利用率 =55%。

7.2 多 GPU 显存分配(手动指定)
./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
-n 2048:最大生成 token 数,满足技术概述长文本撰写需求;
-t 64:分配 64 个 CPU 线程,匹配多 GPU 并行推理的 CPU 调度,提升协同效率;
-c 32768:上下文长度 32768,支持长文本输入与生成;
--batch-size 2048:提升批量推理效率,适配 8×RTX 5090 多 GPU 算力;
--mlock:锁定内存,避免内存交换,提升推理稳定性;
--flash-attn on:启用 Flash Attention 优化,充分发挥 RTX 5090 硬件性能;
--no-mmap:禁用内存映射,减少内存开销,提升多 GPU 协同速度;
--numa distribute:NUMA 优化,均匀分配任务到所有 CPU 节点,避免资源瓶颈;
--gpu-layers 80:核心分层配置,总加载 80 层模型到 GPU(前 40 层 + 后 40 层),需确保该层数不超过 Qwen3-32B 模型总层数(适配 32B 模型,80 层为合理分配值);
--main-gpu 0:关键分层参数,指定 GPU0 作为主 GPU,llama.cpp 会优先将前 40 层模型加载到主 GPU(GPU0),剩余的 40 层会自动均匀分配到其余 GPU(GPU1-GPU7),完全匹配'前 40 层到 GPU0,后 40 层到 GPU1-7'的需求;
补充:llama.cpp 不支持 --cuda-devices 参数,无需手动指定 GPU 设备(0-7),通过 --main-gpu 0 即可实现分层分配,系统会自动识别剩余 GPU 并分配后续层数。
[ Prompt: 248.7 t/s | Generation: 65.1 t/s ]
八、常见问题排查
- nvidia-smi 只显示部分卡
- 重启服务器、检查 PCIe 插槽与供电
- 确认驱动为 590-open,非闭源
- llama.cpp 只跑 CPU,不调用 GPU
- 编译时必须加
-DLLAMA_CUDA=ON
- 运行时加
--gpu-layers ≥32
- 验证 CUDA:
nvcc -V
- 显存溢出(OOM)
- 降低
--gpu-layers(如 99→80)
- 使用更低量化(Q3_K_M)
- 增大
-c 上下文窗口
- 5090 报错:Failed to allocate NvKmsKapiDevice
- 必须用
nvidia-driver-xxx-open 开源驱动
- 内核必须 ≥6.8
九、最终验证与基准测试
./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
[ Prompt: 229.4 t/s | Generation: 65.7 t/s ]
输出测试效果
./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 |
相关免费在线工具
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online