跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    NVIDIA 驱动与 CUDA

    在 EL(Enterprise Linux)系统上运行 AI 工作负载,首先需要正确安装 NVIDIA GPU 驱动和 CUDA 工具包。本文涵盖驱动安装、CUDA 配置、nvidia-smi 使用以及 NVIDIA Container Toolkit 的部署。

    Terminal window
    lspci | grep -i nvidia

    输出示例:

    3b:00.0 3D controller: NVIDIA Corporation A100 80GB PCIe (rev a1)

    如果没有输出,说明系统未检测到 NVIDIA GPU,请检查硬件连接或 BIOS 设置。

    Terminal window
    lspci -v -s $(lspci | grep -i nvidia | head -1 | awk '{print $1}')

    有两种主要方式安装驱动:通过 NVIDIA 官方仓库(推荐)或通过 ELRepo。

    确保系统已更新,并安装必要的依赖:

    Terminal window
    sudo dnf update -y
    sudo dnf install -y epel-release # dkms 来自 EPEL
    sudo dnf install -y kernel-devel kernel-headers gcc make dkms

    禁用 nouveau 开源驱动(如果已加载):

    Terminal window
    # 检查 nouveau 是否加载
    lsmod | grep nouveau
    # 如果有输出,需要禁用它
    sudo tee /etc/modprobe.d/blacklist-nouveau.conf > /dev/null <<'EOF'
    blacklist nouveau
    options nouveau modeset=0
    EOF
    # 重建 initramfs
    sudo dracut --force
    # 重启系统
    sudo reboot

    方式一:NVIDIA 官方仓库(推荐)

    Section titled “方式一:NVIDIA 官方仓库(推荐)”

    这是最推荐的方式,能获得最新的驱动版本。根据 EL 版本选择对应仓库。

    添加 NVIDIA CUDA 仓库并安装驱动(EL 9)
    # 添加 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 仓库并安装驱动(EL 10)
    # 添加 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-<版本号>

    安装完成后重启系统:

    Terminal window
    sudo reboot

    ELRepo 是 Enterprise Linux 社区维护的驱动仓库:

    通过 ELRepo 安装 NVIDIA 驱动(EL 9)
    # 安装 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 安装 NVIDIA 驱动(EL 10)
    # 安装 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

    重启系统:

    Terminal window
    sudo reboot
    Terminal window
    nvidia-smi

    成功输出示例:

    +-----------------------------------------------------------------------------------------+
    | NVIDIA-SMI 580.126.16 Driver Version: 580.126.16 CUDA Version: 13.0 |
    |-----------------------------------------+------------------------+----------------------+
    | 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 是 NVIDIA 系统管理工具,用于监控和管理 GPU。

    Terminal window
    # 基本信息
    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

    在服务器上建议启用 nvidia-persistenced,避免每次 GPU 调用的初始化延迟:

    Terminal window
    sudo systemctl enable --now nvidia-persistenced

    CUDA 工具包包含编译器(nvcc)、库和开发工具,是编译 GPU 加速程序所必需的。

    如果你在安装驱动时已经添加了 NVIDIA CUDA 仓库,可以直接安装:

    安装 CUDA 工具包
    # 安装最新 CUDA 工具包
    sudo dnf install -y cuda-toolkit
    # 或安装特定版本(先查看仓库提供哪些版本)
    sudo dnf list available 'cuda-toolkit-*'
    sudo dnf install -y cuda-toolkit-<版本号>
    Terminal window
    # 添加 CUDA 到 PATH
    cat >> ~/.bashrc <<'EOF'
    # CUDA
    export PATH=/usr/local/cuda/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
    EOF
    source ~/.bashrc
    Terminal window
    nvcc --version

    输出示例:

    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2024 NVIDIA Corporation
    Built on ...
    Cuda compilation tools, release 13.3, V13.3.xxx
    Terminal window
    # 安装与当前 CUDA 主版本匹配的示例包(13.x 对应 cuda-samples-13-*;先 `dnf list 'cuda-samples*'` 确认)
    sudo dnf install -y cuda-samples-13-3
    # 编译 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_test

    部分深度学习框架需要 cuDNN 库:

    Terminal window
    # 通过 NVIDIA 仓库安装(与 CUDA 主版本匹配:13.x 用 cudnn9-cuda-13;先 `dnf list 'cudnn*'` 确认)
    sudo dnf install -y cudnn9-cuda-13

    NVIDIA Container Toolkit 让 Docker 和 Podman 容器能够访问宿主机的 GPU,是在容器中运行 AI 应用的关键组件。

    Terminal window
    # 添加 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
    Terminal window
    # 配置 Docker 运行时
    sudo nvidia-ctk runtime configure --runtime=docker
    # 重启 Docker
    sudo systemctl restart docker
    # 验证 GPU 在容器中可用
    sudo docker run --rm --gpus all nvidia/cuda:13.3.1-base-ubi9 nvidia-smi
    Terminal window
    # 配置 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-smi

    在 docker-compose.yml 中声明 GPU 资源:

    services:
    ai-app:
    image: your-ai-image:latest
    deploy:
    resources:
    reservations:
    devices:
    - driver: nvidia
    count: all # 或指定数量如 1
    capabilities: [gpu]
    Terminal window
    # 通过 NVIDIA 仓库更新
    sudo dnf update -y nvidia-driver cuda-toolkit
    # 更新后重启
    sudo reboot

    如果新驱动有问题,可以回滚到之前的版本:

    回滚到指定版本
    # 查看已安装的版本
    rpm -qa | grep nvidia-driver
    # 降级到指定版本(把 <版本号> 换成要回滚到的版本)
    sudo dnf downgrade nvidia-driver-<版本号>
    sudo reboot
    Terminal window
    # 检查驱动模块是否加载
    lsmod | grep nvidia
    # 如果没有加载,尝试手动加载
    sudo modprobe nvidia
    # 检查内核日志
    sudo dmesg | grep -i nvidia
    # 最常见原因是 Secure Boot 阻止了未签名的内核模块
    # 在 BIOS 中禁用 Secure Boot,或对模块进行签名

    如果使用 DKMS 安装方式,内核更新后驱动应自动重编译。如果失败:

    Terminal window
    # 检查 DKMS 状态
    dkms status
    # 手动重新编译
    sudo dkms autoinstall
    # 重启
    sudo reboot
    Terminal window
    # 查看所有 GPU
    nvidia-smi -L
    # 通过环境变量指定可见的 GPU
    export CUDA_VISIBLE_DEVICES=0 # 仅使用 GPU 0
    export CUDA_VISIBLE_DEVICES=0,1 # 使用 GPU 0 和 1
    export CUDA_VISIBLE_DEVICES="" # 禁用所有 GPU
    Terminal window
    # nvidia-smi 右上角显示的是驱动支持的最高 CUDA 版本
    nvidia-smi
    # 实际安装的 CUDA 版本
    nvcc --version