CentOS7下Docker使用GPU的完整指南:从驱动配置到容器编排

1次阅读
没有评论

共计 2133 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

背景与挑战

内核兼容性问题

CentOS7 默认搭载 3.10 内核版本,对现代 NVIDIA GPU 驱动支持存在以下限制:

CentOS7 下 Docker 使用 GPU 的完整指南:从驱动配置到容器编排

  • 缺少新版 GPU 需要的 GPL 符号导出(如 GSP 驱动架构依赖的接口)
  • 内核头文件版本与 DKMS 编译要求不匹配
  • 缺省未开启 PCIe ACS 覆盖特性(影响多 GPU 透传)

容器运行时差异

  • 默认 runc:无法识别 GPU 设备文件(如 /dev/nvidia0)
  • nvidia-container-runtime:通过 prestart hook 自动注入:
  • GPU 设备文件
  • CUDA 库路径
  • 驱动版本检查

环境准备

内核升级(需要 sudo 权限)

  1. 添加 ELRepo 仓库并安装最新长期支持内核:

    sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    sudo rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
    sudo yum --enablerepo=elrepo-kernel install kernel-lt -y

  2. 修改 grub 配置并重启:

    sudo grub2-set-default 0
    sudo reboot

驱动安装验证

  1. 禁用 Nouveau 驱动:

    echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
    sudo dracut --force

  2. 安装 NVIDIA 驱动(以 R470 版本为例):

    sudo yum install epel-release -y
    sudo yum install dkms -y
    sudo bash NVIDIA-Linux-x86_64-470.199.02.run --dkms

  3. 验证驱动状态:

    nvidia-smi  # 应显示 GPU 信息
    modinfo nvidia | grep version  # 核对驱动版本 

容器化配置

NVIDIA Container Toolkit 安装

  1. 配置仓库(需要 sudo):

    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

  2. 安装组件:

    sudo yum install -y nvidia-container-toolkit nvidia-container-runtime

  3. 重启 Docker 服务:

    sudo systemctl restart docker

Dockerfile 示例

FROM nvidia/cuda:11.7.1-base-centos7

# 设置 CUDA 环境变量
ENV CUDA_HOME=/usr/local/cuda
ENV PATH=${CUDA_HOME}/bin:${PATH}
ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}

# 安装基础工具
RUN yum install -y \
    python3 \
    python3-pip && \
    rm -rf /var/cache/yum

# 验证安装
RUN nvidia-smi && \
    python3 -c "import torch; print(torch.cuda.is_available())"

docker-compose 多 GPU 配置

version: '3.8'

services:
  trainer:
    image: nvidia/cuda:11.7.1-base-centos7
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 2  # 申请 2 块 GPU
              capabilities: [gpu]
    runtime: nvidia  # 指定运行时 

生产环境建议

显存监控方案

  1. 配置 Prometheus 的 nvidia_gpu_exporter:

    docker run -d \
      --name gpu-exporter \
      --runtime=nvidia \
      -v /run/prometheus:/run/prometheus \
      nvidia/gpu-monitoring-tools:2.3.2

  2. Grafana 仪表盘关键指标:

  3. nvidia_gpu_memory_used_bytes
  4. nvidia_gpu_utilization

常见错误处理

错误代码 排查步骤
Error 255 1. 检查内核模块加载状态 lsmod | grep nvidia 2. 验证驱动版本匹配性
CUDA_ERROR_UNKNOWN 1. 确认容器内 CUDA 版本与主机驱动兼容 2. 检查设备文件权限
OOM Killer 触发 1. 设置容器内存限制 2. 监控显存使用峰值

延伸阅读

通过上述步骤,开发者可以在保持 CentOS7 稳定性的同时,获得现代 GPU 加速能力。建议定期检查 NVIDIA 驱动与容器工具链的版本兼容性矩阵,特别是在升级关键组件时。

正文完
 0
评论(没有评论)