在 Ubuntu 系统上部署和运行大模型(LLM),除了安装 CUDA、cuDNN 和 PyTorch/TensorFlow 等基础软件栈外,系统层面的优化对于稳定性、吞吐量、延迟和资源利用率至关重要。
以下是针对 GPU 服务器跑大模型的 Ubuntu 系统级优化配置指南,分为核心模块:
1. 内核与驱动优化(Kernel & Driver)
✅ 禁用自动更新(防止中断训练)
GPU 驱动和内核更新可能导致重启或驱动不兼容,中断长时间训练任务。
# 禁止内核自动更新
sudo apt-mark hold linux-image-$(uname -r) linux-headers-$(uname -r)
# 禁止 NVIDIA 驱动自动更新
sudo apt-mark hold nvidia-driver-*
✅ 启用 HugePages(大页内存)
大模型加载时涉及大量内存映射,HugePages 可减少 TLB(Translation Lookaside Buffer)缺失,提升内存访问效率。
# 编辑 /etc/sysctl.conf
echo "vm.nr_hugepages = 1000" | sudo tee -a /etc/sysctl.conf
# 应用配置
sudo sysctl -p
# 验证
cat /proc/meminfo | grep HugePages_Total
✅ 调整 NUMA 策略
多路 CPU + 多 GPU 服务器上,确保进程绑定到本地 NUMA 节点,避免跨 NUMA 访问内存导致带宽瓶颈。
# 安装 numactl
sudo apt install numactl
# 启动服务时指定 NUMA 节点(例如节点 0)
numactl --cpunodebind=0 --membind=0 python train.py
2. 文件系统与 I/O 优化
✅ 使用 XFS 或 EXT4 文件系统
- XFS:更适合大文件并发读写,适合存储大型数据集。
- EXT4:通用性强,小文件性能稍好。
⚠️ 避免使用 NTFS/FAT32 等非 Linux 原生文件系统。
✅ 挂载选项优化
在 /etc/fstab 中为数据盘添加以下挂载选项:
# 示例:/dev/nvme0n1p1 /data xfs defaults,noatime,nodiratime 0 2
noatime, nodiratime:禁止记录文件访问时间,减少不必要的磁盘写入。discard或none:根据 SSD/HDD 类型决定是否启用 TRIM。
✅ 预读设置(Readahead)
增加块设备预读大小,提升顺序读取性能(如加载模型权重)。
# 查看当前预读值
blockdev --getra /dev/sda
# 设置为 4096 扇区(约 2MB)
sudo blockdev --setra 4096 /dev/sda
3. 网络优化(Multi-GPU / Multi-Node 通信)
✅ 关闭防火墙(仅内网环境)
如果所有节点都在可信内网,关闭防火墙可消除 iptables/nftables 带来的包过滤开销。
sudo ufw disable
sudo systemctl stop firewalld
✅ 优化 TCP 缓冲区
# /etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_congestion_control = bbr # 启用 BBR 拥塞控制
✅ 启用 SR-IOV 或 InfiniBand/RoCE
- 如果使用 InfiniBand,确保安装
libibverbs和rdma-core。 - 如果使用 RoCE v2,需配置 DCQCN 或 ECN 以支持无损以太网。
4. 电源管理与性能模式
✅ 锁定 GPU 频率(P-State)
默认情况下,GPU 可能动态降频以节能,影响推理/训练稳定性。
# 将 GPU 功率限制设为最大,并锁定频率
sudo nvidia-smi -pl 350 # 设置功耗上限为 350W(根据型号调整)
sudo nvidia-smi -lgc 1000,1000 # 锁定最小/最大时钟频率(单位 MHz)
✅ CPU 性能模式
# 安装 cpupower
sudo apt install linux-cpupower
# 设置 governor 为 performance
sudo cpupower frequency-set -g performance
5. 安全与权限优化
✅ 禁用 SELinux/AppArmor(可选)
某些深度学习框架(如 TensorFlow)可能与强制访问控制冲突,建议暂时禁用或调整为宽松模式。
# 检查状态
sestatus
# 临时禁用(重启后失效)
sudo setenforce 0
✅ 用户组配置
确保运行用户属于 video 和 render 组,以便访问 GPU 设备节点。
sudo usermod -aG video,render $USER
6. 监控与诊断工具安装
安装以下工具便于排查瓶颈:
# GPU 监控
sudo apt install nvtop htop glances
# 网络诊断
sudo apt install iperf3 netperf
# 内存分析
sudo apt install valgrind perf
# 日志集中管理(可选)
sudo apt install rsyslog
7. Docker 容器化最佳实践(推荐)
如果你使用 Docker 运行大模型,请遵循以下规范:
✅ 使用 NVIDIA Container Toolkit
# 安装 nvidia-container-toolkit
distribution=$(. /etc/os-release; echo $ID)
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list |
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
✅ 容器内资源限制
# docker-compose.yml 示例
services:
llm-server:
image: my-llm-image
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
✅ 共享内存优化(用于多进程 DataLoader)
# 增加共享内存大小,避免 DataLoader 进程间通信报错
sudo mount -t tmpfs -o size=16G tmpfs /dev/shm
8. 常见陷阱与注意事项
| 问题 | 解决方案 |
|---|---|
| OOM (Out of Memory) | 检查是否启用了 swap,建议禁用 swap(sudo swapoff -a),因为 swap 会严重拖慢 GPU 计算。 |
| CUDA Context 创建失败 | 确保没有残留的僵尸 CUDA 进程,定期清理:sudo fuser -k /dev/nvidia* |
| PCIe 带宽瓶颈 | 在多 GPU 服务器上,确保 GPU 通过 PCIe Switch 连接,而非直连 CPU,否则 NVLink 无法生效。 |
| 时间同步 | 分布式训练中,所有节点必须使用 NTP 同步时间,否则参数服务器通信会出错。 |
总结 checklist
- [ ] 固定内核和驱动版本,禁用自动更新。
- [ ] 启用 HugePages 和 NUMA 绑定。
- [ ] 文件系统挂载
noatime,优化预读。 - [ ] 关闭非必要防火墙,优化 TCP 参数。
- [ ] 锁定 GPU 频率和 CPU 性能模式。
- [ ] 安装
nvtop,iperf3,numactl等监控工具。 - [ ] 使用 Docker + NVIDIA Container Toolkit 隔离环境。
这些优化能显著提升大模型训练的稳定性、吞吐量和资源利用率,尤其在生产环境中至关重要。
云知识CLOUD