速卖通素材
奋斗

在GPU服务器上跑大模型,Ubuntu系统需要做哪些优化配置?

服务器

在 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 /data

    noatime 避免每次读取文件时更新访问时间戳,提升 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 » 在GPU服务器上跑大模型,Ubuntu系统需要做哪些优化配置?