NVIDIA 驱动与 CUDA
在 EL(Enterprise Linux)系统上运行 AI 工作负载,首先需要正确安装 NVIDIA GPU 驱动和 CUDA 工具包。本文涵盖驱动安装、CUDA 配置、nvidia-smi 使用以及 NVIDIA Container Toolkit 的部署。
检查 GPU 硬件
Section titled “检查 GPU 硬件”确认系统识别到 GPU
Section titled “确认系统识别到 GPU”lspci | grep -i nvidia输出示例:
3b:00.0 3D controller: NVIDIA Corporation A100 80GB PCIe (rev a1)如果没有输出,说明系统未检测到 NVIDIA GPU,请检查硬件连接或 BIOS 设置。
查看 GPU 详细信息
Section titled “查看 GPU 详细信息”lspci -v -s $(lspci | grep -i nvidia | head -1 | awk '{print $1}')安装 NVIDIA 驱动
Section titled “安装 NVIDIA 驱动”有两种主要方式安装驱动:通过 NVIDIA 官方仓库(推荐)或通过 ELRepo。
确保系统已更新,并安装必要的依赖:
sudo dnf update -ysudo dnf install -y kernel-devel kernel-headers gcc make dkms禁用 nouveau 开源驱动(如果已加载):
# 检查 nouveau 是否加载lsmod | grep nouveau
# 如果有输出,需要禁用它sudo tee /etc/modprobe.d/blacklist-nouveau.conf > /dev/null <<'EOF'blacklist nouveauoptions nouveau modeset=0EOF
# 重建 initramfssudo dracut --force
# 重启系统sudo reboot方式一:NVIDIA 官方仓库(推荐)
Section titled “方式一:NVIDIA 官方仓库(推荐)”这是最推荐的方式,能获得最新的驱动版本。根据 EL 版本选择对应仓库。
# 添加 NVIDIA CUDA 仓库(包含驱动和 CUDA)sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/cuda-rhel9.repo
# 清理缓存sudo dnf clean all
# 安装最新驱动(DKMS 模块)sudo dnf module install -y nvidia-driver:latest-dkms# 添加 NVIDIA CUDA 仓库(rhel10)sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/cuda-rhel10.repo
# 清理缓存sudo dnf clean all
# EL 10 的 NVIDIA 仓库不提供 module 流,直接安装开源内核模块驱动sudo dnf install -y nvidia-open如果你更倾向于安装特定版本的驱动:
# 查看可用版本sudo dnf list available nvidia-driver --showduplicates
# 安装指定版本(把 <版本号> 换成上一步列出的版本)sudo dnf install -y nvidia-driver-<版本号>安装完成后重启系统:
sudo reboot方式二:ELRepo 仓库
Section titled “方式二:ELRepo 仓库”ELRepo 是 Enterprise Linux 社区维护的驱动仓库:
# 安装 ELRepo 仓库sudo dnf install -y https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
# 安装 NVIDIA 驱动(kmod 版本,随内核更新自动重编译)sudo dnf install -y kmod-nvidia
# 或安装 DKMS 版本sudo dnf install -y nvidia-x11-drv# 安装 ELRepo 仓库sudo dnf install -y https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm
# 安装 NVIDIA 驱动(kmod 版本)sudo dnf install -y kmod-nvidia
# 或安装 DKMS 版本sudo dnf install -y nvidia-x11-drv重启系统:
sudo reboot验证驱动安装
Section titled “验证驱动安装”nvidia-smi成功输出示例:
+-----------------------------------------------------------------------------------------+| NVIDIA-SMI 580.126.16 Driver Version: 580.126.16 CUDA Version: 13.3 ||-----------------------------------------+------------------------+----------------------+| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. ||=========================================+========================+======================|| 0 NVIDIA A100 80GB PCIe Off | 00000000:3B:00.0 Off | 0 || N/A 32C P0 43W / 300W | 0MiB / 81920MiB | 0% Default |+-----------------------------------------+------------------------+----------------------+nvidia-smi 常用命令
Section titled “nvidia-smi 常用命令”nvidia-smi 是 NVIDIA 系统管理工具,用于监控和管理 GPU。
# 基本信息nvidia-smi
# 持续监控(每秒刷新)watch -n 1 nvidia-smi
# 查看详细 GPU 信息nvidia-smi -q
# 仅查看 GPU 利用率和显存nvidia-smi --query-gpu=index,name,utilization.gpu,memory.used,memory.total --format=csv
# 查看运行在 GPU 上的进程nvidia-smi pmon -i 0
# 设置持久模式(减少首次调用延迟)sudo nvidia-smi -pm 1
# 设置 GPU 功耗限制sudo nvidia-smi -pl 250
# 查看 GPU 温度nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader持久模式守护进程
Section titled “持久模式守护进程”在服务器上建议启用 nvidia-persistenced,避免每次 GPU 调用的初始化延迟:
sudo systemctl enable --now nvidia-persistenced安装 CUDA 工具包
Section titled “安装 CUDA 工具包”CUDA 工具包包含编译器(nvcc)、库和开发工具,是编译 GPU 加速程序所必需的。
通过 NVIDIA 仓库安装
Section titled “通过 NVIDIA 仓库安装”如果你在安装驱动时已经添加了 NVIDIA CUDA 仓库,可以直接安装:
# 安装最新 CUDA 工具包sudo dnf install -y cuda-toolkit
# 或安装特定版本(先查看仓库提供哪些版本)sudo dnf list available 'cuda-toolkit-*'sudo dnf install -y cuda-toolkit-<版本号>配置环境变量
Section titled “配置环境变量”# 添加 CUDA 到 PATHcat >> ~/.bashrc <<'EOF'
# CUDAexport PATH=/usr/local/cuda/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATHEOF
source ~/.bashrc验证 CUDA 安装
Section titled “验证 CUDA 安装”nvcc --version输出示例:
nvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2024 NVIDIA CorporationBuilt on ...Cuda compilation tools, release 13.3, V13.3.xxx编译测试程序
Section titled “编译测试程序”# 安装 CUDA 示例(可选)sudo dnf install -y cuda-samples-12-6
# 编译 deviceQuery 示例cd /usr/local/cuda/samples/1_Utilities/deviceQuery 2>/dev/null || \ echo "示例可能位于其他位置,请检查 /usr/local/cuda/extras/"
# 或手动编写测试程序cat > /tmp/cuda_test.cu <<'EOF'#include <stdio.h>__global__ void hello() { printf("Hello from GPU thread %d\n", threadIdx.x);}int main() { hello<<<1, 5>>>(); cudaDeviceSynchronize(); return 0;}EOF
nvcc /tmp/cuda_test.cu -o /tmp/cuda_test && /tmp/cuda_testcuDNN 安装
Section titled “cuDNN 安装”部分深度学习框架需要 cuDNN 库:
# 通过 NVIDIA 仓库安装sudo dnf install -y cudnn9-cuda-12NVIDIA Container Toolkit
Section titled “NVIDIA Container Toolkit”NVIDIA Container Toolkit 让 Docker 和 Podman 容器能够访问宿主机的 GPU,是在容器中运行 AI 应用的关键组件。
安装 Container Toolkit
Section titled “安装 Container Toolkit”# 添加 NVIDIA Container Toolkit 仓库curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \ sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
# 安装sudo dnf install -y nvidia-container-toolkit配置 Docker
Section titled “配置 Docker”# 配置 Docker 运行时sudo nvidia-ctk runtime configure --runtime=docker
# 重启 Dockersudo systemctl restart docker
# 验证 GPU 在容器中可用sudo docker run --rm --gpus all nvidia/cuda:13.3.1-base-ubi9 nvidia-smi配置 Podman
Section titled “配置 Podman”# 配置 Podman(CDI 方式)sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
# 验证 CDI 设备nvidia-ctk cdi list
# 运行 GPU 容器podman run --rm --device nvidia.com/gpu=all nvidia/cuda:13.3.1-base-ubi9 nvidia-smiDocker Compose 中使用 GPU
Section titled “Docker Compose 中使用 GPU”在 docker-compose.yml 中声明 GPU 资源:
services: ai-app: image: your-ai-image:latest deploy: resources: reservations: devices: - driver: nvidia count: all # 或指定数量如 1 capabilities: [gpu]# 通过 NVIDIA 仓库更新sudo dnf update -y nvidia-driver cuda-toolkit
# 更新后重启sudo reboot如果新驱动有问题,可以回滚到之前的版本:
# 查看已安装的版本rpm -qa | grep nvidia-driver
# 降级到指定版本(把 <版本号> 换成要回滚到的版本)sudo dnf downgrade nvidia-driver-<版本号>sudo rebootnvidia-smi 报错:NVIDIA-SMI has failed
Section titled “nvidia-smi 报错:NVIDIA-SMI has failed”# 检查驱动模块是否加载lsmod | grep nvidia
# 如果没有加载,尝试手动加载sudo modprobe nvidia
# 检查内核日志sudo dmesg | grep -i nvidia
# 最常见原因是 Secure Boot 阻止了未签名的内核模块# 在 BIOS 中禁用 Secure Boot,或对模块进行签名内核更新后驱动失效
Section titled “内核更新后驱动失效”如果使用 DKMS 安装方式,内核更新后驱动应自动重编译。如果失败:
# 检查 DKMS 状态dkms status
# 手动重新编译sudo dkms autoinstall
# 重启sudo reboot多 GPU 环境下指定 GPU
Section titled “多 GPU 环境下指定 GPU”# 查看所有 GPUnvidia-smi -L
# 通过环境变量指定可见的 GPUexport CUDA_VISIBLE_DEVICES=0 # 仅使用 GPU 0export CUDA_VISIBLE_DEVICES=0,1 # 使用 GPU 0 和 1export CUDA_VISIBLE_DEVICES="" # 禁用所有 GPU查看 GPU 兼容的 CUDA 版本
Section titled “查看 GPU 兼容的 CUDA 版本”# nvidia-smi 右上角显示的是驱动支持的最高 CUDA 版本nvidia-smi
# 实际安装的 CUDA 版本nvcc --version