Ubuntu安装docker和nvidia-container-toolkit

一. 安装docker

1. 卸载旧版本

当前的docker称为Docker Engine-Community软件包docker-ce,Docker的旧版本称为docker,docker.io或docker-engine,如果已安装旧版本,请执行卸载:

# apt-get remove docker docker-engine docker-ce docker.io

2. 更新apt包索引

# apt-get update

3. 安装apt依赖包

安装apt依赖包,用于通过HTTPS来获取仓库:

# apt-get install -y apt-transport-https ca-certificates curl software-properties-common

4. 添加Docker的官方GPG密钥

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

5. 设置稳定版仓库

# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

6. 更新apt包索引

# apt-get update

7. 安装docker

7.1. 安装最新版docker

# apt-get install -y docker-ce

7.2. 安装特定版本docker

a. 列出可用版本

要安装特定版本的Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装:

# apt-cache madison docker-ce

b. 安装特定版本

使用上一个步骤输出内容第二列中的版本字符串安装特定版本,如5:18.09.1~3-0~ubuntu-xenial:

# apt-get install docker-ce=<VERSION_STRING>

8. 测试Docker是否安装成功

输入以下指令,打印出以下信息则安装成功:

# docker run hello-world

9. 修改docker的镜像、容器、配置文件存储目录

docker数据默认存储在/var/lib/docker目录,考虑到docker的镜像、容器、配置等文件可能占用较大的磁盘空间,可修改其数据存储目录,由系统盘调整至数据盘。

a. 停止docker

# systemctl stop docker.socket

# systemctl stop docker

b. 在数据盘创建新的docker数据存储目录

# cd /mnt/data/

# mkdir docker

c. 修改docker配置

调整docker配置文件daemon.json,设置data-root属性,指定docker运行时使用的根路径:

# vi /etc/docker/daemon.json

{

    "data-root": "/mnt/data/docker",

    "runtimes": {

        "nvidia": {

            "path": "nvidia-container-runtime",

            "runtimeArgs": []

        }

    }

}

d. 删除docker数据的默认存储目录

# cd /var/lib/

# rm -rf docker/

e. 重新加载服务配置文件并重启docker

# systemctl daemon-reload

# systemctl restart docker

二. 安装nvidia-container-toolkit

Docker中的容器无法直接使用GPU算力,除非在容器中再安装一遍GPU驱动,这将非常麻烦。为解决这一问题,nvidia官方提供了nvidia docker环境,用于将宿主机的GPU运行时映射到容器中。

nvidia docker环境已经经历了nvidia-docker、nvidia-docker2,再到NVIDIA Container Toolkit的迭代。

1. 卸载nvidia-docker

nvidia-docker已经被官方废弃了,如今使用nvidia-container-toolkit替代。如果已安装nvidia-docker,先卸载并清理配置:

# apt-get purge -y nvidia-docker

2. 添加GPG密钥

# curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

3. 配置nvidia-docker.list

a. 读取系统版本名称

读取系统版本名称,如ubuntu16.04,并赋值给任意变量名,如distribution:

# distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

b. 配置nvidia-docker.list

从网络下载与系统版本对应的nvidia-docker.list文件,并将其内容写入/etc/apt/sources.list.d/nvidia-docker.list:

# curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list

4. 更新apt包索引

# sudo apt-get update

5. 安装nvidia-container-toolkit

# apt-get install -y nvidia-container-toolkit

6. 重启docker

# systemctl restart docker

7. 验证安装

使用docker运行一个基础CUDA container,附上参数:--gpus all,确认容器能否使用GPU。

# docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

Unable to find image 'nvidia/cuda:11.0.3-base-ubuntu20.04' locally

11.0.3-base-ubuntu20.04: Pulling from nvidia/cuda

d5fd17ec1767: Pull complete

ea7643e57386: Pull complete

622a04926279: Pull complete

18fcb7509e42: Pull complete

21e5db7c1fa2: Pull complete

Digest: sha256:1db9418b1c9070cdcbd2d0d9980b52bd5cd20216265405fdb7e089c7ff96a494

Status: Downloaded newer image for nvidia/cuda:11.0.3-base-ubuntu20.04

Fri Jul  8 14:10:46 2022      

+-----------------------------------------------------------------------------+

| NVIDIA-SMI 460.91.03    Driver Version: 460.91.03    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 P100-PCIE...  On   | 00000000:00:08.0 Off |                    0 |

| N/A   38C    P0    34W / 250W |  11586MiB / 16280MiB |      0%      Default |

|                               |                      |                  N/A |

+-------------------------------+----------------------+----------------------+

                                                                              

+-----------------------------------------------------------------------------+

| Processes:                                                                  |

|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |

|        ID   ID                                                   Usage      |

|=============================================================================|

+-----------------------------------------------------------------------------+

如果有GPU信息输出,说明安装成功,今后docker运行容器时附上参数:--gpus all即可令容器具备使用GPU的能力。

猜你喜欢

转载自blog.csdn.net/Dancen/article/details/125687417