一、背景介绍

nvidia-container-toolkit是Docker与NVIDIA GPU之间的桥梁,也就是只有安装了nvidia-container-toolkit,Docker才能使用本机的GPU;

二、安装步骤

1、安装Docker

sudo apt-get remove docker docker-engine docker.io containerd runc

sudo apt-get update

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo systemctl restart docker

上面的步骤有些需要科学上网;

验证安装是否成功

sudo docker version

 2、安装nvidia-container-toolkit

sudo apt-get update
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://#' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

最后验证是否安装成功

nvidia-container-cli --version

重新启动一下docker 

sudo systemctl restart docker

3、拉取Pytorch镜像

终端进入到自己项目的工作目录

通过PyTorch | NVIDIA NGC可以查看自己需要的镜像名字,并更改拉取的镜像名字

# $(pwd):/app 表示把当前host工作路径挂载到容器的/app目录下
# --name env_pyt_1.12 表示容器的名称是env_pyt_1.12
docker run --gpus all -it --name env_pyt_1.12 -v $(pwd):/app nvcr.io/nvidia/pytorch:22.03-py3

正常的话就已经进入到容器内的 shell 交互界面,然后验证容器内的环境是否可用

# 容器内部检查pytorch可用性
$ python
>>> import torch
>>> torch.__version__
>>> print(torch.cuda.is_available())

4、vscode插件

Vs code 提供的插件可以让我们访问容器内部:ms-vscode-remote.remote-containers

安装该插件后,在vscode的view下的Command Palette搜索container,选择containers: Attach to Running Container

 这样就可以直接在容器内部操作;

Logo

一站式 AI 云服务平台

更多推荐