4、集群操作系统与驱动:Ubuntu Server 22.04 LTS安装与优化、NVIDIA驱动与CUDA Toolkit安装、Docker与NVIDIA Container Toolkit配置
这一章,我们聊聊AI算力集群的“地基”。说白了,就是操作系统、驱动和容器环境。我见过不少团队,模型调得再好,底层环境没搭对,跑起来各种玄学报错。嗯,咱们一步步来,把这块硬骨头啃下来。
核心逻辑:AI集群的软件栈,从下往上依次是:操作系统 → 硬件驱动 → CUDA运行时 → 容器引擎。每一层都依赖下层,任何一层出问题,上层都跑不起来。
4.1 Ubuntu Server 22.04 LTS 安装与优化
我个人习惯,AI集群首选 Ubuntu Server 22.04 LTS。为什么?生态好,驱动支持全,社区活跃。你想想看,遇到问题搜一下,十有八九能找到答案。
安装要点:
- 分区方案:建议单独分一个
/data分区给训练数据,避免系统盘被撑爆。我在项目中遇到过,有人把数据和系统混在一起,结果日志一多,系统直接挂了。 - 文件系统:推荐 ext4 或 XFS。XFS 对大文件支持更好,适合存模型权重。
- 网络配置:集群节点建议用静态IP,别用DHCP。否则节点重启后IP变了,整个集群都得重新发现。
小技巧:安装时勾选“Install OpenSSH server”,省得装完系统再手动配SSH。
系统优化:
# 关闭交换分区(AI训练吃内存,交换分区会拖死性能)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 调整内核参数(提升网络和文件系统性能)
cat >> /etc/sysctl.conf <
注意:关闭交换分区后,如果内存不够,进程会被OOM Killer杀掉。确保你的物理内存足够大,或者配置好内存监控。
4.2 NVIDIA驱动与CUDA Toolkit安装
驱动安装,我踩过不少坑。最稳妥的方式是用NVIDIA官方提供的 runfile 安装,或者用Ubuntu的 apt 源。我个人推荐用 runfile,因为可控性更强。
安装步骤:
- 卸载旧驱动:
sudo apt purge nvidia* -y sudo apt autoremove -y - 安装依赖:
sudo apt update sudo apt install build-essential dkms -y - 禁用nouveau驱动:
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nvidia-nouveau.conf sudo update-initramfs -u # 重启后验证:lsmod | grep nouveau 应该无输出 - 安装NVIDIA驱动:
chmod +x NVIDIA-Linux-x86_64-535.154.05.run sudo ./NVIDIA-Linux-x86_64-535.154.05.run - 安装CUDA Toolkit:
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run sudo sh cuda_12.2.0_535.54.03_linux.run
验证安装:
nvidia-smi # 查看驱动和GPU状态
nvcc --version # 查看CUDA版本
我曾经遇到过一个问题:驱动装好了,nvidia-smi 也能跑,但CUDA程序就是报错。后来发现是环境变量没配。记得把下面这行加到 ~/.bashrc 里:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
4.3 Docker与NVIDIA Container Toolkit配置
容器化是AI集群的标配。Docker 保证环境一致性,NVIDIA Container Toolkit 让容器能调用GPU。说白了,就是让每个训练任务跑在独立的“小盒子”里,互不干扰。
安装Docker:
# 使用官方脚本一键安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 将当前用户加入docker组(避免每次sudo)
sudo usermod -aG docker $USER
newgrp docker
安装NVIDIA Container Toolkit:
# 添加NVIDIA容器仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt update
sudo apt install nvidia-container-toolkit -y
# 重启Docker服务
sudo systemctl restart docker
验证GPU容器:
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi
如果能看到GPU信息,说明配置成功。
Docker运行时配置优化:
# 配置Docker使用systemd cgroup驱动(与Kubernetes兼容)
cat > /etc/docker/daemon.json <
避坑指南:我曾经在集群里发现,不同节点的Docker版本不一致,导致镜像层缓存失效,每次拉镜像都重新下载。建议所有节点统一Docker版本,最好用 apt-mark hold docker-ce 锁定版本。
4.4 环境验证与常见问题
装完别急着跑训练,先做个全链路验证:
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| GPU驱动 | nvidia-smi |
显示GPU型号、驱动版本、显存使用 |
| CUDA编译 | nvcc --version |
显示CUDA版本号 |
| Docker运行 | docker run hello-world |
打印Hello from Docker! |
| GPU容器 | docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi |
容器内能看到GPU |
常见问题:
- nvidia-smi 报错 "Failed to initialize NVML":驱动没装好,或者内核模块没加载。试试
sudo modprobe nvidia。 - Docker 容器内看不到GPU:检查
nvidia-container-toolkit是否安装,Docker daemon 是否配置了默认runtime。 - CUDA版本不匹配:驱动版本和CUDA Toolkit版本有对应关系。比如驱动535对应CUDA 12.x,别混搭。
我的经验:环境搭建最怕“玄学问题”。我建议每装完一层,就做一次验证。别等全装完再排查,否则定位问题会非常痛苦。
公众号:蓝海资料掘金营,微信deep3321