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

1次阅读
没有评论

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

image.webp

背景痛点

在 CentOS7 环境下,使用 Docker 调用 GPU 资源时常常会遇到一些兼容性和配置问题。这些问题主要源于以下几个方面:

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

  • 内核版本限制:CentOS7 默认内核版本为 3.10,这个版本较旧,对现代 GPU 驱动的支持有限。特别是 NVIDIA 显卡驱动,通常需要更高版本的内核才能完全发挥性能。
  • 运行时差异:Docker 默认的运行时(如 runc)不支持直接调用 GPU 资源,而 NVIDIA Container Runtime 专门为此设计,能够在容器内部直接访问 GPU 硬件。

技术实现

1. 内核升级与驱动安装

为了确保 GPU 驱动的兼容性,我们需要先升级 CentOS7 的内核版本。以下是具体步骤:

  1. 安装 ELRepo 仓库(需 sudo 权限):

    sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

  2. 安装最新稳定版内核:

    sudo yum --enablerepo=elrepo-kernel install kernel-lt -y

  3. 重启系统并选择新内核启动:

    sudo reboot

  4. 安装 NVIDIA 驱动(需禁用 Nouveau 驱动):

    sudo echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf
    sudo dracut --force
    sudo reboot

  5. 下载并安装 NVIDIA 驱动:

    sudo sh NVIDIA-Linux-x86_64-<version>.run

2. 安装 NVIDIA Container Toolkit

安装完驱动后,我们需要配置 Docker 以支持 GPU 调用。以下是安装 NVIDIA Container Toolkit 的步骤:

  1. 添加 NVIDIA 容器工具包仓库(需 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. 安装 nvidia-docker2:

    sudo yum install -y nvidia-docker2

  3. 重启 Docker 服务:

    sudo systemctl restart docker

  4. 验证安装(运行 nvidia-smi 测试):

    docker run --gpus all nvidia/cuda:11.0-base nvidia-smi

代码示例

1. Dockerfile 示例

以下是一个支持 GPU 调用的 Dockerfile 示例,包含错误处理和 CUDA 环境变量配置:

FROM nvidia/cuda:11.0-base

# 安装必要的依赖
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

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

# 安装 Python 依赖
COPY requirements.txt .
RUN pip3 install -r requirements.txt

# 复制应用代码
COPY . /app
WORKDIR /app

# 启动命令
CMD ["python3", "app.py"]

2. docker-compose.yml 配置

以下是一个支持多 GPU 分配的 docker-compose.yml 配置片段:

version: '3'

services:
  gpu-app:
    image: my-gpu-app
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 2  # 分配 2 个 GPU
              capabilities: [gpu]
    volumes:
      - ./data:/data
    environment:
      - NVIDIA_VISIBLE_DEVICES=all

生产建议

1. GPU 显存 OOM 监控

在生产环境中,GPU 显存不足(OOM)是一个常见问题。我们可以使用 Prometheus 监控 GPU 显存使用情况。以下是一个简单的配置示例:

  1. 安装 NVIDIA DCGM Exporter:

    docker run -d --gpus all --name dcgm-exporter -p 9400:9400 nvidia/dcgm-exporter

  2. 配置 Prometheus 采集指标:

    scrape_configs:
      - job_name: 'dcgm'
        static_configs:
          - targets: ['dcgm-exporter:9400']

2. 常见错误排查

以下是一些常见错误代码及其排查方法:

  • Error 255:通常表示驱动或库版本不匹配。解决方法是检查驱动版本和 CUDA 版本是否兼容。
  • Driver/library 版本不匹配 :运行nvidia-smi 和nvcc --version检查驱动和 CUDA 版本是否一致。

延伸阅读

通过以上步骤和配置,你可以在 CentOS7 环境下高效地使用 Docker 调用 GPU 资源,为深度学习训练等任务提供强大的计算支持。

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