banner

Docker容器调度GPU-NVIDIA

Scroll down

本文作者:丁辉

Github-k8s-device-plugin仓库

Github-nvidia-container-toolkit仓库

Github-nvidia-docker软件包-已经停止维护

NVIDIA官方安装文档

Docker容器调度GPU-NVIDIA

请提前准备好 Docker 环境,准备好,我们发车啦

介绍

想让在 Docker 中使用GPU资源,有两个选择

  • 安装 NVIDIA Container Toolkit
  • 安装 NVIDIA Docker
  1. NVIDIA Docker (nvidia-docker2): NVIDIA Docker 以前是一种用于在 Docker 中启用 GPU 支持的工具,它是 NVIDIA 为 Docker 提供的一个插件,通过 nvidia-docker 命令行工具,使 GPU 资源可以在容器中使用。但是,nvidia-docker2 已经停止维护,NVIDIA Container Toolkit 替代了它,并成为 NVIDIA 官方支持的工具。
  2. NVIDIA Container Runtime (nvidia-container-runtime): NVIDIA Container Runtime 是 NVIDIA Container Toolkit 的一部分,它提供了一个 Docker 运行时(runtime),用于在容器中启用 GPU 支持。这个运行时可以替代 Docker 默认的运行时,以便容器能够正确地访问主机上的 NVIDIA GPU。在使用 NVIDIA Container Toolkit 时,通常会配置 Docker 使用这个运行时,而不是 Docker 默认的运行时。
  3. NVIDIA Container Toolkit: NVIDIA Container Toolkit 是 NVIDIA 官方提供的一组工具,用于在容器中启用 GPU 支持。这组工具包括 nvidia-container-runtime,以及用于与 Docker 集成的工具。安装 NVIDIA Container Toolkit 时,通常会配置 Docker 使用 NVIDIA Container Runtime,以确保容器能够正确访问 GPU 资源。

所以,安装 NVIDIA Container Toolkit 后可以使用 GPU 资源,实际上是因为 NVIDIA Container Toolkit 包含了 NVIDIA Container Runtime,并通过配置 Docker 来启用 GPU 支持。这样,您无需额外安装 nvidia-docker2,因为 nvidia-docker2 已经过时,官方建议使用 NVIDIA Container Toolkit。

Centos安装

在线安装

  1. 加载安装源
1
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
  1. 安装 nvidia-container-toolkit

可以使用 yum clean expire-cache 更新包列表

1
yum install -y nvidia-container-toolkit
  1. Docker 配置 NVIDIA 容器运行时
1
2
3
4
5
6
7
8
9
10
11
cat > /etc/docker/daemon.json << EOF
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
EOF
  1. 重启 Docker
1
systemctl restart docker
  1. 通过运行 CUDA 容器来验证结果
1
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

离线环境安装

步骤是一样的但是咱们需要将离线的软件包准备出来

  1. 获取 nvidia-container-toolkit RPM 包
1
2
mkdir /root/nvidia-container-toolkit && cd /root/nvidia-container-toolkit
repotrack nvidia-container-toolkit

找一台有公网服务器拉取 RPM 包

repotrack 用于从软件源或软件仓库中下载指定软件包及其依赖项到本地系统目录

  1. 打包
1
cd /root && tar -zcvf nvidia-container-toolkit.tar.gz ./nvidia-container-toolkit
  1. 离线环境安装安装
1
2
tar -zxvf nvidia-container-toolkit.tar.gz && cd nvidia-container-toolkit
rpm -Uvh --force --nodeps *.rpm

Ubuntu安装

在线安装

  1. 加载安装源
1
2
3
4
5
6
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
  1. 安装 nvidia-container-toolkit
1
sudo apt-get install -y nvidia-container-toolkit
  1. Docker 配置 NVIDIA 容器运行时
1
2
3
4
5
6
7
8
9
10
11
cat > /etc/docker/daemon.json << EOF
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
EOF
  1. 重启 Docker
1
systemctl restart docker
  1. 通过运行 CUDA 容器来验证结果
1
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

离线环境安装

步骤是一样的但是咱们需要将离线的软件包准备出来

  1. 获取 nvidia-container-toolkit APT 包
1
2
mkdir /root/nvidia-container-toolkit && cd /root/nvidia-container-toolkit
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances nvidia-container-toolkit | grep "^\w" | sort -u)

找一台有公网服务器拉取 APT 包

  1. 打包
1
cd /root && tar -zcvf nvidia-container-toolkit.tar.gz ./nvidia-container-toolkit
  1. 离线环境安装安装
1
2
tar -zxvf nvidia-container-toolkit.tar.gz && cd nvidia-container-toolkit
dpkg -i ./*

安装 NVIDIA 驱动程序

一般云服务器都是自带的,大部分只有私有服务器需要部署

NVIDIA中文官方驱动下载页面

Linux 安装 NVIDIA 驱动

  1. 查看显卡型号
1
lspci | grep -i nvidia

结果

1
2
[root@offends ~]# lspci | grep -i nvidia
00:08.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
  1. 根据自己的显卡型号去下载驱动
1
wget https://cn.download.nvidia.com/tesla/440.95.01/NVIDIA-Linux-x86_64-440.95.01.run

例如:

  • Product Type:Tesla
  • Product Series:T
  • Product:T4
  • Operating System:Linux 64-bit
  • CUDA Toolkit:Any
  • Language:Chinese (Traditional)
  1. 部署
1
bash NVIDIA-Linux-x86_64-440.95.01.run
  1. 测试效果
1
nvidia-smi

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@offends ~]# 
Mon Oct 2 16:22:37 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.106.00 Driver Version: 460.106.00 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| 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:08.0 Off | 0 |
| N/A 30C 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 |
+-----------------------------------------------------------------------------+

Linux 卸载 NVIDIA 驱动

  • 有部署文件情况下
1
bash NVIDIA-Linux-x86_64-440.95.01.run --uninstall
  • 没有原部署文件的情况下
1
/usr/bin/nvidia-uninstall

重新安装遇到报错

  • 卸载完驱动重启安装报错
1
2
3
4
5
ERROR: An NVIDIA kernel module 'nvidia' appears to already be loaded in your kernel.  This may be because it is in use (for example, by an X server, a CUDA program, or the NVIDIA Persistence Daemon), but this may also happen  
if your kernel was configured without support for module unloading. Please be sure to exit any programs that may be using the GPU(s) before attempting to upgrade your driver. If no GPU-based programs are running, you
know that your kernel supports module unloading, and you still receive this message, then an error may have occured that has corrupted an NVIDIA kernel module's usage count, for which the simplest remedy is to reboot
your computer.

解决方法直接 reboot 重启服务器成功率 99% 哈哈

I'm so cute. Please give me money.

其他文章
cover
Docker-compse部署Harbor
  • 24/04/22
  • 09:37
  • Docker
cover
Docker安装Gitlab
  • 24/04/22
  • 09:37
  • Docker
目录导航 置顶
  1. 1. Docker容器调度GPU-NVIDIA
    1. 1.1. 介绍
    2. 1.2. Centos安装
      1. 1.2.1. 在线安装
      2. 1.2.2. 离线环境安装
    3. 1.3. Ubuntu安装
      1. 1.3.1. 在线安装
      2. 1.3.2. 离线环境安装
    4. 1.4. 安装 NVIDIA 驱动程序
      1. 1.4.1. Linux 安装 NVIDIA 驱动
      2. 1.4.2. Linux 卸载 NVIDIA 驱动
      3. 1.4.3. 重新安装遇到报错
请输入关键词进行搜索