当您需要在GPU集群中快速部署可弹性伸缩的应用程序时,NVIDIA GPU在深度学习和机器学习等领域发挥着重要作用。为了在Docker容器中使用NVIDIA GPU加速,本文将指导您如何使用NVIDIA容器工具包在您的集群中设置一个简单的示例。

 参考文档

步骤一:安装NVIDIA容器工具包

首先,您需要安装NVIDIA容器工具包。以下是在不同系统上安装的步骤:

在Ubuntu或Debian上安装:
#安装docker
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt install docker-ce
sudo systemctl start docker
sudo systemctl enable docker
#安装工具包
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg   && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list |     sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' |     sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
在CentOS或Red Hat上安装:
#安装docker
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
#安装工具包
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 yum install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

步骤二:创建Dockerfile

 gpu base

接下来,我们将创建一个简单的Dockerfile来构建我们的示例容器。以下是一个示例Dockerfile的内容:

FROM nvidia/cuda:10.2-devel-ubi8

RUN dnf update -y && dnf install -y git make && \
    rm -rf /var/cache/dnf/*

RUN cd /usr/local/cuda-10.2 && \
    git clone https://github.com/NVIDIA/cuda-samples.git && \
    cd cuda-samples && make -j"$(nproc)" -k || true

WORKDIR /usr/local/cuda-10.2/cuda-samples/Samples/vectorAdd_nvrtc

LABEL io.k8s.display-name="NVIDIA Validation Container"
LABEL name="NVIDIA Validation Container"
LABEL vendor="NVIDIA"
LABEL version="1.0.0"
LABEL release="N/A"
LABEL summary="NVIDIA Container to Validate GPU Support"
LABEL description="See summary"

COPY ./LICENSE ./licenses/LICENSE

CMD ./vectorAdd_nvrtc
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

生产上建议不要用devel tag的镜像,建议用runtime

# 第一阶段:构建Python
FROM nvidia/cuda:12.3.2-runtime-ubi8 AS builder

RUN dnf update -y && dnf install -y tar zlib zlib-devel gcc openssl-devel bzip2-devel libffi-devel make && \
    curl -O https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz && \
    tar -xzf Python-3.9.7.tgz && \
    cd Python-3.9.7 && ./configure --enable-optimizations && make && make install && \
    python3.9 --version && \
    rm -rf Python-3.9.7.tgz Python-3.9.7 && \
    dnf clean all && \
    rm -rf /var/cache/dnf

# 第二阶段:运行环境
FROM nvidia/cuda:12.3.2-runtime-ubi8

COPY --from=builder /usr/local /usr/local

COPY requirements.txt /tmp/requirements.txt
RUN mkdir /code \
    && pip3 install --upgrade pip \
    && pip3 install --default-timeout=1000 --no-cache-dir -r /tmp/requirements.txt \
    && pip3 install opencv-python-headless

WORKDIR /code
COPY code_light_ai_v1/  .
EXPOSE 8000
CMD gunicorn -w 2 -b 0.0.0.0:8000 app_lamp:app
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

步骤三:构建并运行容器

现在,让我们构建并运行我们的示例容器。使用以下命令:

docker build -t cuda-vectorAdd .
docker run --gpus all -ti --rm cuda-vectorAdd
  • 1.
  • 2.

这将构建一个名为 cuda-vectorAdd 的容器镜像,并在GPU集群中的所有GPU上运行 vectorAdd_nvrtc 示例。

通过这个简单的示例,您可以快速地在GPU集群中部署并运行基于NVIDIA的容器。您可以根据自己的需求定制Dockerfile,并利用NVIDIA的容器工具包在集群中管理GPU资源。希望这篇文章能帮助您开始使用GPU集群进行高性能计算和机器学习任务!