CentOS7下Docker使用GPU实战指南:从环境配置到避坑实践

1次阅读
没有评论

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

image.webp

为什么要在 Docker 中使用 GPU?

在深度学习和 AI 开发中,GPU 加速能大幅提升模型训练和推理的速度。而 Docker 提供了环境隔离和便捷部署的优势,两者结合可以让我们:

CentOS7 下 Docker 使用 GPU 实战指南:从环境配置到避坑实践

  • 避免污染宿主机环境
  • 快速复现实验条件
  • 方便分享和迁移训练环境

常见的应用场景包括:

  • TensorFlow/PyTorch 模型训练
  • 计算机视觉任务处理
  • 大规模数据并行计算

环境准备

1. 确认 NVIDIA 驱动安装

首先确保你的 CentOS7 已经正确安装了 NVIDIA 驱动:

nvidia-smi

如果看到类似下面的输出,说明驱动安装正常:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02    Driver Version: 450.80.02    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+

如果命令不存在,需要先安装 NVIDIA 驱动:

  1. 添加 ELRepo 仓库:

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

  2. 安装驱动:

    yum install nvidia-detect
    nvidia-detect
    yum install kmod-nvidia

2. 安装 Docker CE

  1. 卸载旧版本:

    yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

  2. 设置仓库:

    yum install -y yum-utils
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

  3. 安装 Docker:

    yum install docker-ce docker-ce-cli containerd.io

  4. 启动 Docker:

    systemctl start docker
    systemctl enable docker

3. 安装 nvidia-container-toolkit

  1. 设置 nvidia-docker2 仓库:

    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. 安装工具包:

    yum install -y nvidia-container-toolkit

  3. 配置 Docker 使用 nvidia runtime:

    nvidia-ctk runtime configure --runtime=docker
    systemctl restart docker

Dockerfile 示例

下面是一个支持 GPU 的 PyTorch 环境 Dockerfile:

# 使用 NVIDIA 官方 CUDA 基础镜像
FROM nvidia/cuda:11.8.0-base

# 设置环境变量
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV PATH /opt/conda/bin:$PATH

# 安装基础工具
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    wget \
    bzip2 \
    ca-certificates \
    libglib2.0-0 \
    libxext6 \
    libsm6 \
    libxrender1 \
    git \
    && rm -rf /var/lib/apt/lists/*

# 安装 Miniconda
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
    /bin/bash ~/miniconda.sh -b -p /opt/conda && \
    rm ~/miniconda.sh && \
    /opt/conda/bin/conda clean -tipsy && \
    ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
    echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc

# 安装 PyTorch
RUN conda install -y pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

# 设置工作目录
WORKDIR /workspace

常见问题解决

1. 权限问题

如果你遇到类似错误:

docker: Got permission denied while trying to connect to the Docker daemon socket...

解决方法:

sudo usermod -aG docker $USER
newgrp docker

2. CUDA 版本与驱动不兼容

错误示例:

CUDA driver version is insufficient for CUDA runtime version

解决方法:
1. 检查驱动支持的 CUDA 版本:

nvidia-smi

2. 选择匹配的 Docker 镜像标签

3. 容器内无法识别 GPU

检查步骤:
1. 确保启动容器时添加了 --gpus all 参数:

docker run --gpus all -it my_gpu_image

2. 检查容器内能否运行nvidia-smi

性能优化建议

  1. 共享 GPU 内存:

    docker run --gpus all --shm-size=8g -it my_gpu_image

  2. 限制 GPU 使用:

    docker run --gpus '"device=0,1"' -it my_gpu_image  # 只使用 GPU 0 和 1 

安全注意事项

  1. 不要在容器内安装驱动 – 驱动应该安装在宿主机
  2. 使用资源限制:
    docker run --gpus all --cpus 4 --memory 16g -it my_gpu_image

验证 GPU 是否可用

构建并运行容器:

docker build -t gpu_test .
docker run --gpus all -it gpu_test nvidia-smi

你应该看到与宿主机类似的 GPU 信息输出。现在,你可以开始在这个环境中运行你的 GPU 加速应用了!

遇到问题时,建议查阅 NVIDIA 官方文档或相关社区讨论。祝你的 GPU 加速之旅顺利!

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