8卡RTX 4090服务器 从 NVIDIA驱动安装 → CUDA环境 → llama.cpp编译 → 多GPU测试 的完整、可直接执行流程(基于 Ubuntu 22.04 LTS,适配Ada Lovelace架构)。

一、系统与硬件准备(必做)

1.1 系统要求

  • 推荐:Ubuntu 22.04 LTS(64位)
  • 内核:5.15+ HWE内核(4090兼容5.15及以上内核,无需强制6.8+)
  • 禁用:Nouveau开源驱动(与NVIDIA驱动冲突)

1.2 硬件检查

# 查看8张4090是否被识别
 lspci | grep -i nvidia
# 应输出8条 NVIDIA Corporation Device 2782 (rev a1)(4090专属设备ID)

二、安装NVIDIA驱动(4090专属流程)

2.1 卸载旧驱动与禁用Nouveau

 # 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

2.2 安装适配内核(4090可选,推荐升级)


# 安装5.15+ HWE内核(4090兼容,可选升级至6.8+提升性能)
 sudo apt update
 sudo apt install linux-generic-hwe-22.04 -y
 sudo reboot


# 验证内核版本(≥5.15即可,推荐≥6.8)
uname -r
 # 输出示例:5.15.0-119-generic 或 6.8.0-45-generic
            

2.3 安装4090专用驱动(闭源/开源均可,推荐闭源)

RTX 4090(Ada Lovelace架构)支持闭源驱动和开源驱动,闭源驱动性能更稳定,推荐使用535及以上版本(适配CUDA 12.2+)。

# 添加显卡驱动PPA
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update


# 安装535闭源驱动(4090推荐,适配性最佳)
 sudo apt install nvidia-driver-535 -y

 # 重启
sudo reboot

 # 验证驱动(8卡均正常显示)
 nvidia-smi

三、安装CUDA Toolkit(llama.cpp依赖)

3.1 安装CUDA 12.2(与535驱动匹配)

# 下载CUDA 12.2安装包

wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run


# 安装(仅安装CUDA Toolkit,不装驱动)
sudo sh cuda_12.2.0_535.54.03_linux.run --silent --toolkit

# 配置环境变量
echo 'export PATH=/usr/local/cuda-12.2/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc


# 验证CUDA
nvcc -V
 # 输出应显示 release 12.2

3.2 安装基础编译工具(llama.cpp多GPU核心依赖)

sudo apt update && sudo apt install git build-essential cmake pkg-config libopenblas-dev -y

四、安装llama.cpp编译依赖

              # 基础编译工具(若已安装可跳过)

sudo apt update
sudo apt install git build-essential cmake pkg-config libopenblas-dev -y

# 验证依赖
gcc --version  # ≥11
cmake --version # ≥3.22

五、编译llama.cpp(开启8卡CUDA加速)

5.1 克隆源码

git clone https://github.com/ggerganov/llama.cpp.git

解压安装

sudo apt update && sudo apt install unzip -y

sudo unzip llama.cpp.zip

cd llama.cpp

5.2 编译(开启CUDA + 多GPU + 4090算力sm_89)

关键说明:RTX 4090专属算力为sm_89(Ada Lovelace架构),

其余参数适配多GPU优化。

  1. 优先解决权限:

sudo chown -R hmtsgpu:hmtsgpu /home/hmtsgpu/llama.cpp # 赋予当前用户llama.cpp目录完整权限 

sudo chmod -R 755 /home/hmtsgpu/llama.cpp # 开放目录读写执行权限

  1. 删除残留build目录,重新创建(避免旧文件冲突): 

cd /home/hmtsgpu/llama.cpp # 确保在llama.cpp目录下

rm -rf build # 删除异常的build目录 

mkdir -p build # 手动创建build目录,确保可正常写入 

sudo chown -R hmtsgpu:hmtsgpu build # 给build目录单独赋予权限

  1. 重新执行编译命令(顺序执行,不要跳过步骤):

# 关键参数: # LLAMA_CUDA=1:启用CUDA # LLAMA_CUDA_DMMV_X=32:提升多GPU显存效率 # LLAMA_CUDA_N_GRAPH_LAYERS=9999:全层GPU卸载 # LLAMA_CUDA_ARCHS=89:4090专属算力(sm_89)

cmake -B build \ 

-DLLAMA_CUDA=ON \ 

-DLLAMA_CUDA_DMMV_X=32 \ 

-DLLAMA_CUDA_N_GRAPH_LAYERS=9999 \ 

-DLLAMA_CUDA_ARCHS=89 \ 

-DCMAKE_BUILD_TYPE=Release 

# 8线程编译(匹配服务器CPU核心)

cmake --build build -j$(nproc)

5.3 验证编译

./build/bin/llama-cli --help | grep -E "cuda|gpu"

# 应输出:--cuda, --gpu-layers N 等CUDA参数

六、准备GGUF模型(测试用)

6.1 下载测试模型(以Qwen3 32B Q4_K_M为例)

4090单卡24GB显存,Q4_K_M量化版本(4-bit)显存占用约18GB,8卡总显存可轻松承载,无需降低量化等级。

# 进入模型目录

mkdir -p models && cd models
# 下载Qwen3 32B Q4_K_M量化模型(4-bit,显存友好)

wget -c https://hf-mirror.com/bartowski/Qwen_Qwen3-32B-GGUF/resolve/main/Qwen_Qwen3-32B-Q4_K_M.gguf

cd ..

七、8卡4090 llama.cpp测试(核心步骤)

7.1 单卡基础测试(验证CUDA)

cd .. 

 ./build/bin/llama-cli \
-m models/Qwen_Qwen3-32B-Q4_K_M.gguf \
--gpu-layers 99 \
-t 64 \
-c 32768 \
-p "你好"

[ Prompt: 128.3 t/s | Generation: 42.9 t/s ]

同时另开一个终端,执行以下命令监控GPU状态:

Plain Text
watch -n 1 nvidia-smi

观察输出:CUDA 0 被使用、显存占用≈18GB、速度 > 80 tok/s。

7.2 8卡并行测试(多GPU自动负载均衡)

llama.cpp 自动识别所有NVIDIA GPU,无需手动指定卡ID,4090多卡协同效率适配PCIe 4.0/5.0带宽。

./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 4090服务器用于大语言模型(LLM)推理的技术概述。" \
--batch-size 1024 \
--mlock \
--flash-attn on



[ Prompt: 442.5 t/s | Generation: 42.2 t/s ]

7.3 8卡显存与负载验证

新开终端,实时监控:

watch -n 1 nvidia-smi

8张4090显存均被占用(≈4-5GB/卡)、GPU利用率 ≈60%,多GPU负载均衡。

八、性能调优

8.1 关键参数优化

# 8卡极致性能参数(适配4090显存与算力)

 ./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 4090服务器用于大语言模型(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 4090多GPU并行算力;

--mlock:锁定内存,避免内存交换(swap),提升多GPU推理稳定性;

--flash-attn on:启用Flash Attention优化,充分发挥RTX 4090硬件性能,显著提升推理速度;

--no-mmap:禁用内存映射(mmap),减少内存开销,进一步提升多GPU协同推理速度;

--numa distribute:启用NUMA(非统一内存访问)优化,采用“distribute”模式,将执行任务均匀分配到所有CPU节点,适配多CPU节点服务器,平衡CPU与多GPU之间的内存访问效率,避免资源瓶颈。

示例输出(实际以服务器运行结果为准):

[ Prompt: 427.4 t/s | Generation: 41.2 t/s ]

8张4090显存均被占用(≈4-5GB/卡)、GPU利用率 ≈50%,推理稳定无卡顿。

8.2 多GPU显存分配(手动指定)

如需手动分配层到不同GPU,适配4090显存特性,合理分配层数避免显存溢出:

# 示例:前30层到GPU0,后50层到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 4090服务器用于大语言模型(LLM)推理的技术概述。" --batch-size 2048 --mlock --flash-attn on --no-mmap --numa distribute
            

参数补充说明:

  • --gpu-layers 80:核心分层配置,总加载80层模型到GPU(前30层+后50层),适配Qwen3-32B模型总层数,匹配4090显存容量;
  • --main-gpu 0:指定GPU0作为主GPU,llama.cpp会优先将前30层模型加载到主GPU(GPU0),剩余的50层会自动均匀分配到其余GPU(GPU1-GPU7),实现分层负载均衡;
  • 补充:llama.cpp不支持--cuda-devices参数,无需手动指定GPU设备(0-7),通过--main-gpu 0即可实现分层分配,系统会自动识别剩余GPU并分配后续层数。

  • [ Prompt: 461.8 t/s | Generation: 41.2 t/s ]

九、常见问题排查

  • 1. nvidia-smi 只显示部分卡

            ○ 重启服务器、检查PCIe插槽与供电(4090单卡TDP 450W,8卡总功耗较高,需确保电源足额)

            ○ 确认驱动为535及以上版本,适配4090架构
  • 2. llama.cpp 只跑CPU,不调用GPU
            ○ 编译时必须加 -DLLAMA_CUDA=ON,且LLAMA_CUDA_ARCHS=89(4090专属)

            ○ 运行时加 --gpu-layers ≥32

            ○ 验证CUDA:nvcc -V(确认版本≥12.2)
  • 3. 显存溢出(OOM)

            ○ 降低 --gpu-layers(如99→80)

            ○ 使用更低量化(Q3_K_M),进一步降低显存占用

            ○ 减小 -c 上下文窗口(如32768→16384)
  • 4. 4090 报错:Failed to initialize CUDA

            ○ 确认内核版本≥5.15,驱动与CUDA版本匹配(535驱动对应CUDA 12.2)

            ○ 重新编译llama.cpp,确保算力参数为LLAMA_CUDA_ARCHS=89

十、最终验证

执行以下命令,确认 8卡4090全量工作:

 ./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 4090在大型语言模型部署中的优势。" \
--batch-size 2048 \
--mlock \
--flash-attn on



[ Prompt: 360.8 t/s | Generation: 41.7 t/s ]

十、输出测试效果:使用 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 |  2663.83 ± 21.19 |

| qwen3 32B Q4_K - Medium | 18.40 GiB | 32.76 B | CUDA  |  99 |  1 | pp2048 | 2836.83 ± 2.82 |

| qwen3 32B Q4_K - Medium | 18.40 GiB | 32.76 B | CUDA  |  99 |  1 |  pp8192 | 2648.67 ± 0.69 |

| qwen3 32B Q4_K - Medium |  18.40 GiB | 32.76 B | CUDA |  99 |  1 |     tg128 |     43.17 ± 0.02 |

| qwen3 32B Q4_K - Medium  | 18.40 GiB | 32.76 B | CUDA |  99 |  1 |      tg512 |    42.95 ± 0.03 |

| qwen3 32B Q4_K - Medium | 18.40 GiB | 32.76 B | CUDA  |  99 |  1 |    tg2048 |    42.21 ± 0.00 |

build: 08f21453a (8589)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐