我们正在使用gitlab持续集成来构建和测试我们的项目。最近,一个项目增加了对CUDA的要求,以启用GPU加速。我不想更改我们的管道(docker和gitlab-ci对我们来说运行良好),所以我想以某种方式使docker能够与nvidia GPU对话。
其他详细信息:
--runtime
参数,因此您不能使用nvidia建议的docker调用。 [编辑:实际上,您现在可以。参见https://gitlab.com/gitlab-org/gitlab-runner/merge_requests/764] 答案 0 :(得分:1)
有多个步骤:
请注意,如果您只想编译CUDA代码并且不需要运行它,则无需使用nvidia-docker2,在主机PC上具有nvidia驱动程序,并且无需获取任何特殊步骤。它在gitlab CI中工作。 (即,您只需要执行步骤3)
恐怕我对docker不太熟悉,所以如果我将容器和图像混合在一起,我深表歉意。如果有更多知识的人想要修复有关docker的任何错字,将不胜感激。
您在这里有两个选择。您可以使用主机操作系统的推荐步骤。这很容易,但是这意味着环境可能在构建服务器之间有所不同。 另一个选择是直接从nVidia(即https://www.nvidia.com/object/unix.html)下载安装程序,以便您可以将它与docker容器一起分发。
我当前的测试PC是archlinux,因此这是从AUR使用它的一种情况。 nVidia为多个操作系统提供了存储库,因此请参见nvidia-docker github页面上的快速入门指南。
您应该按照快速入门指南测试您的nvidia-docker安装。从主机PC运行以下命令:
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
应该运行并输出如下内容:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 415.18 Driver Version: 415.18 CUDA Version: 10.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 GeForce GTX 106... Off | 00000000:02:00.0 On | N/A |
| 28% 39C P0 24W / 120W | 350MiB / 6071MiB | 3% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
请注意,尽管我已经指定了基于9.0的映像,但是nvidia-smi报告了Cuda10。我认为这是因为在主机PC上安装了Cuda 10。 nvidia-docker文档说它将使用来自docker映像的cuda,所以这应该不是问题。
除非有充分的理由,否则应直接使用Nvidia dockerhub docker映像。就我而言,我想使用基于Debian的docker映像,但是Nvidia仅提供Ubuntu和CentOS的映像。幸运的是,Nvidia为其图像发布了dockerfile,因此您可以从其中复制其dockerfile的相关部分。我基于https://gitlab.com/nvidia/cuda/blob/ubuntu16.04/9.2/base/Dockerfile
dockerfile的魔术部分包括:
# Install cuda manually
RUN wget https://developer.nvidia.com/compute/cuda/9.2/Prod2/local_installers/cuda_9.2.148_396.37_linux
COPY install_cuda.exp install_cuda.exp
RUN mv cuda_* cuda_install_bin && \
chmod +x cuda_install_bin && \
expect install_cuda.exp && \
rm cuda_*
# Magic copied from nvidia's cuda9.2 dockerfile at
# https://gitlab.com/nvidia/cuda/blob/ubuntu16.04/9.2/base/Dockerfile
ENV CUDA_VERSION 9.2.148
LABEL com.nvidia.volumes.needed="nvidia_driver"
LABEL com.nvidia.cuda.version="${CUDA_VERSION}"
RUN echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf && \
echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf
ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64
# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
ENV NVIDIA_REQUIRE_CUDA "cuda>=9.2"
“期望”命令允许您编写脚本以自动自动接受许可协议等。发布install_cuda.exp
文件对我来说不是一个好主意(因为我无法接受您的同意),但就我而言,我接受了eula,同意将其安装在不受支持的操作系统上, em> not 安装图形驱动程序,安装了cuda,使用了默认路径,安装了指向usr / local / cuda的符号链接,并且未安装示例。
有关Expect的更多信息,请参见手册页 [online man page here]。
检查文件主要由expect -- "(y)es/(n)o/(q)uit:" { send "y\r" }
您应该检查是否可以使用自己的容器运行nvidia-smi的nvidia-smi test命令。 (即docker run --runtime=nvidia -it your_image_here /bin/sh
)
在网络上进行调查时,大多数消息来源告诉您,您无法从gitlab运行器配置中提供--runtime
标志。实际上,根据此merge request,您可以。为此,您必须编辑/etc/gitlab-runner/config.toml
并将runtime = "nvidia"
添加到正确的位置。
例如,我的跑步者配置如下:
[[runners]]
name = "docker-runner-test"
url = "<<REDACTED>>"
token = "<<REDACTED>>"
executor = "docker"
[runners.docker]
tls_verify = false
image = "build_machine"
privileged = false
disable_cache = false
runtime = "nvidia"
volumes = ["/cache"]
pull_policy = "never"
shm_size = 0
[runners.cache]
答案 1 :(得分:1)
自 13.9 版起,GitLab Runners 支持 --gpus all
参数:
答案 2 :(得分:0)
作为记录,如果有人偶然发现此问题,因为docker 19.03
在docker client中包含对GPU的本机支持,因此此方法is now deprecated。
但是,在撰写本文时,gitlab-runner does not support yet这个新的API。
我已经检查过,即使不赞成使用旧方法,现在也仍然可以使用。
答案 3 :(得分:0)
查看 GitLab 13.9(2021 年 2 月):
<块引用>机器学习中使用的专门计算工作负载可以显着受益于对 GPU 的访问。
开发人员可以通过转发 --gpu
标志来配置 GitLab Runner 以利用 Docker 执行器中的 GPU。
您也可以在 GitLab’s fork of Docker Machine 的最新支持下使用它,这允许您accelerate workloads with attached GPUs。
这样做有助于控制与可能昂贵的机器配置相关的成本。
参见 Documentation 和 Issue。