背景
深度学习的环境配置通常是一项比较麻烦的工作,尤其是在多个用户共享的服务器上。虽然conda集成了virtualenv这样的工具用来隔离不同的依赖环境,但这种解决方案仍然没办法统一地分配计算资源。现在,我们可以通过容器技术为每个用户创建一个属于他们自己的容器,并为容器分配相应的计算资源。目前市面上基于容器的深度学习平台产品已经有很多了,比如超益集伦的AiMax。这款产品本身集成了非常多的功能,但如果你只是需要在容器内调用一下GPU,可以参考下面的步骤。
使用 Docker Client 调用 GPU
依赖安装
docker run --gpu
命令依赖于 nvidia Linux 驱动和 nvidia container toolkit,如果你想查看安装文档请点击这里,本节的下文只是安装文档的翻译和提示。
在Linux服务器上安装nvidia驱动非常简单,如果你安装了图形化界面的话直接在Ubuntu的“附加驱动”应用中安装即可,在nvidia官网上也可以下载驱动。
接下来就是安装nvidia container toolkit,我们的服务器需要满足一些先决条件:
-
GNU/Linux x86_64 内核版本 > 3.10
-
Docker >= 19.03 (注意不是Docker Desktop,如果你想在自己的台式机上使用toolkit,请安装Docker Engine而不是Docker Desktop,因为Desktop版本都是运行在虚拟机之上的)
-
NVIDIA GPU 架构 >= Kepler (目前RTX20系显卡是图灵架构,RTX30系显卡是安培架构)
-
NVIDIA Linux drivers >= 418.81.07
然后就可以正式地在Ubuntu或者Debian上安装NVIDIA Container Toolkit,如果你想在 CentOS 上或者其他 Linux 发行版上安装,请参考官方的安装文档。
安装 Docker
$ curl https://get.docker.com | sh \
&& sudo systemctl --now enable docker
当然,这里安装完成后请参考官方的安装后需要执行的一系列操作。如果安装遇到问题,请参照官方的安装文档。
安装 NVIDIA Container Toolkit¶
设置 Package Repository和GPG Key
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& 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/$distribution/libnvidia-container.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
请注意:如果你想安装 NVIDIA Container Toolkit 1.6.0 之前的版本,你应该使用 nvidia-docker repository 而不是上方的 libnvidia-container repositories。
如果遇到问题请直接参考安装手册
安装 nvidia-docker2 应该会自动安装libnvidia-container-tools
libnvidia-container1
等依赖包,如果没有安装可以手动安装
完成前面步骤后安装 nvidia-docker2
$ sudo apt update
$ sudo apt install -y nvidia-docker2
重启 Docker Daemon
$ sudo systemctl restart docker
接下来你就可以通过运行一个CUDA容器测试下安装是否正确。
docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Shell 中显示的应该类似于下面的输出:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+----------------------------------------------------------------