在 Ubuntu 系统上部署和运行大模型(LLM)时,硬件性能只是基础,系统层面的优化配置对于最大化 GPU 利用率、降低延迟、提高吞吐量以及保障稳定性至关重要。
以下是针对 Ubuntu 系统的大模型服务器优化配置指南,分为 内核与驱动层、系统资源层、网络与存储层、软件栈层 和 监控与安全层。
1. 内核与驱动层优化
这是最底层也是最关键的环节,直接影响 GPU 的计算效率和通信带宽。
✅ 安装最新 NVIDIA 驱动与 CUDA
- 使用官方仓库安装:避免使用
apt install nvidia-driver-*,建议使用 NVIDIA 官方.run文件或添加cuda-repo-ubuntu源安装,确保获得最新的稳定版驱动。 - 匹配 CUDA 版本:根据你使用的框架(PyTorch, TensorFlow, vLLM, TGI 等)要求的 CUDA 版本进行匹配。例如,PyTorch 2.x 通常推荐 CUDA 11.8 或 12.1+。
- 验证安装:
nvidia-smi # 查看驱动版本和 GPU 状态 nvcc --version # 查看 CUDA 编译器版本
✅ 启用 PEER-to-PEER (P2P) 访问
多 GPU 之间需要高速通信(如张量并行 TP)。默认情况下 P2P 可能未启用。
# 检查 P2P 状态
nvidia-smi p2p -g <GPU_ID> -s
# 如果显示 Unsupported 或 Disabled,需确保主板 BIOS 中启用了 IOMMU 和 ACS override,并在内核参数中添加:
# GRUB_CMDLINE_LINUX_DEFAULT="... pci=nommio" (某些场景下需要)
# 或者通过 nvidia-persistenced 服务保持驱动常驻
sudo systemctl enable nvidia-persistenced
sudo systemctl start nvidia-persistenced
✅ 调整内核参数(sysctl)
编辑 /etc/sysctl.conf 或创建 /etc/sysctl.d/99-gpu.conf:
# 增加共享内存大小,防止大型模型加载时 OOM
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
# 增加文件描述符限制(大模型加载大量权重文件时需要)
fs.file-max = 2097152
# 允许更多进程同时运行
kernel.pid_max = 65535
应用配置:
sudo sysctl -p /etc/sysctl.d/99-gpu.conf
2. 系统资源层优化
✅ 禁用不必要的服务与节能模式
- 关闭 CPU 节能模式:让 CPU 始终处于高性能状态,避免上下文切换开销。
sudo cpupower frequency-set -g performance # 永久生效:编辑 /etc/default/cpufrequtils 或 systemd 服务 - 关闭图形界面(Headless):如果是纯推理服务器,建议安装
ubuntu-server而非 Desktop 版,或禁用 GDM3。sudo systemctl disable gdm3 sudo systemctl set-default multi-user.target
✅ 内存管理优化
- 禁用 Swap:大模型运行时若触发 Swap,性能将急剧下降甚至崩溃。
sudo swapoff -a # 永久禁用:注释掉 /etc/fstab 中的 swap 行 - 调整 overcommit 策略:
vm.overcommit_memory = 1这允许内核在内存不足时仍分配内存,配合 PyTorch 的自动卸载机制更稳定。
✅ NUMA 感知调度
现代服务器多为 NUMA 架构(非统一内存访问),CPU 核心与 GPU 不在同一节点会导致跨 NUMA 访问延迟。
- 使用
numactl启动进程:numactl --cpunodebind=0 --membind=0 python main.py - 固定 CPU-GPU 绑定:通过 cgroups 或 systemd 将特定 GPU 的任务绑定到其对应的 NUMA 节点 CPU 上。
3. 网络与存储层优化
✅ 网络优化(特别是分布式训练/多机推理)
- 启用 Jumbo Frames(巨型帧):如果使用 InfiniBand 或 RoCEv2,设置 MTU 为 9000。
ip link set dev <interface> mtu 9000 - 优化 TCP 缓冲区:
net.core.rmem_max = 134217728 net.core.wmem_max = 134217728 net.ipv4.tcp_rmem = 4096 87380 134217728 net.ipv4.tcp_wmem = 4096 65536 134217728 - 关闭 TCP Timestamps(可选,减少头部开销):
net.ipv4.tcp_timestamps = 0
✅ 存储优化
- 使用 NVMe SSD:模型权重文件极大(几十 GB 到 TB 级),HDD 会成为瓶颈。
- 文件系统选择:推荐使用 XFS 或 EXT4,避免 Btrfs(在高并发小文件写入时性能较差)。
- 挂载选项:
mount -t xfs -o noatime,nodiratime /dev/nvme0n1p1 /datanoatime避免每次读取文件时更新访问时间戳,提升 I/O 性能。
4. 软件栈层优化
✅ 使用高效推理引擎
不要直接用原生 PyTorch 跑所有场景,选择专用引擎:
- vLLM:目前最流行的 LLM 推理引擎,支持 PagedAttention,吞吐量极高。
- TensorRT-LLM:NVIDIA 官方优化库,极致性能,但学习曲线陡峭。
- TGI (Text Generation Inference):Hugging Face 出品,适合生产环境部署。
- SGLang:新兴的高性能推理框架,支持复杂编排。
✅ 混合精度训练/推理
- 使用
FP16或BF16而非FP32,可节省一半显存并提速计算。 - 在 PyTorch 中启用:
torch.backends.cuda.matmul.allow_tf32 = True # Ampere 架构及以上 torch.backends.cudnn.benchmark = True # 自动寻找最优卷积算法
✅ 环境变量优化
在 .bashrc 或启动脚本中设置:
export NCCL_DEBUG=WARN # 减少 NCCL 日志噪音
export NCCL_IB_DISABLE=0 # 启用 InfiniBand(如果有)
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True # PyTorch 2.1+ 动态内存碎片优化
5. 监控与自动化
✅ 安装监控工具
- nvtop:类似 htop 的 GPU 实时监控工具。
- Prometheus + Grafana:采集 GPU 温度、功耗、利用率、内存占用等指标。
- dstat / iostat:监控系统整体 I/O 和 CPU 负载。
✅ 设置健康检查与自动重启
使用 systemd 管理服务,确保 GPU 驱动异常时能自动恢复:
[Unit]
Description=My LLM Service
After=network.target
[Service]
ExecStart=/usr/bin/python3 /path/to/app.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
总结:关键检查清单
| 类别 | 关键操作 |
|---|---|
| 驱动 | 安装最新 NVIDIA 驱动 + CUDA,启用 nvidia-persistenced |
| 内核 | 调整 shmmax, file-max, 禁用 Swap,设置 overcommit_memory=1 |
| 电源 | CPU 设为 performance 模式,禁用图形界面 |
| NUMA | 使用 numactl 绑定 CPU/GPU 到同一节点 |
| 存储 | 使用 NVMe,挂载 noatime,选用 XFS/EXT4 |
| 软件 | 使用 vLLM/TensorRT-LLM,启用 TF32/BF16,优化 NCCL 环境变量 |
| 监控 | 部署 nvtop/Prometheus,设置 systemd 自动重启 |
通过以上配置,你可以显著降低大模型推理的延迟,提高吞吐量,并确保系统在长时间高负载下的稳定性。
轻量云Cloud