我想在Ubuntu上使用nvidia-docker来创建PyTorch环境
在尝试实现机器学习论文时,可能需要使用多个版本的CUDA和PyTorch来切换使用。
本次我们将尝试使用 nvidia-docker 来构建多个版本的环境。
源代码
目录结构
.
├── .devcontainer
│ └── devcontainer.json
├── docker
│ └── pytorch
│ ├── Dockerfile.111
│ ├── Dockerfile.171
│ ├── Dockerfile.171.2
│ └── requirements.txt
├── docker-compose.yml
└── src
└── pytorch
运动环境
Ubuntu 22.04 -> Ubuntu 22.04版本
英伟达GeForce RTX 3060 Ti
Docker 引擎(Docker 桌面版已不再推荐使用)
预备知识 (yù zhī shí)
在Ubuntu上安装Docker
关于Docker的使用方法的讨论
预备
公式文档
首先,安装Docker所需的用于识别GPU的包。
sudo apt install nvidia-container-runtime
# インストール確認
which nvidia-contaier-runtime-hook
sudo apt install nvidia-docker2
重新启动Docker守护进程
sudo service docker restart
创建Docker镜像
选择要创建的环境的 nvidia-docker 镜像。
让我们从Docker Hub上选择所需的CUDA版本镜像。

由于我经常使用CUDA 11.1或CUDA 11.7,
-
- nvidia/cuda:11.1.1-cudnn8-runtime-ubuntu20.04
- nvidia/cuda:11.7.1-cudnn8-runtime-ubuntu20.04
我尝试选择一下。
根据选择的图像创建Dockerfile。
# サンプルファイル docker/pytorch/Dockerfile.111
FROM nvidia/cuda:11.1.1-cudnn8-runtime-ubuntu20.04
ENV DEBIAN_FRONTEND=noninteractive
WORKDIR /app
RUN apt update && \
apt install -y \
wget \
bzip2 \
build-essential \
git \
git-lfs \
curl \
ca-certificates \
libsndfile1-dev \
libgl1 \
python3.8 \
python3-pip
COPY docker/pytorch/requirements.txt /app
RUN pip3 install --no-cache-dir -U pip && \
pip3 install --no-cache-dir -r requirements.txt
RUN pip3 install --no-cache-dir torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
请尝试使用 Dockerfile 安装 PyTorch。
我們在 https://download.pytorch.org/whl/torch_stable.html 上尋找符合 CUDA 版本的 PyTorch。
我将列举一些例子。
CUDA11.1 = CUDA十一点一
由于存在cu111/torch-1.9.0%…和cu111/torchvision-0.10.0%…,请确保使用pip进行安装。
pip3 install --no-cache-dir torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
CUDA11.7为以下内容提供了改进和新功能。
由于存在cu117/torch-1.13.0%…和cu117/torchvision-0.14.0%,请确保通过pip进行安装。
pip3 install torch==1.13.0+cu117 torchvision==0.14.0+cu117 -f https://download.pytorch.org/whl/torch_stable.html
CUDA11.7,PyTorch 2.0的翻译为:
CUDA11.7,PyTorch 2.0
因为存在cu117/torch-2.0.0%…、cu117/torchvision-0.15.0%…,请使用pip进行安装。
pip3 install torch==2.0.0+cu117 torchvision==0.15.0+cu117 -f https://download.pytorch.org/whl/torch_stable.html
在容器中分配 GPU资源
使用 Docker Compose 启动时分配 GPU
官方文件
在希望连接 GPU 的 Docker 服务中指定 deploy
version: '3.3'
services:
pytorch_111:
build:
context: .
dockerfile: docker/pytorch/Dockerfile.111
container_name: 'nvidia-docker_111'
stdin_open: true
tty: true
volumes:
- ./:/app
deploy:
resources:
reservations:
devices:
- driver: nvidia
- count: 1
- capabilities: [gpu]
启动Docker容器
我认为已经可以通过docker compose up命令来启动了。
docker compose up -d
我想要将容器附加到VSCode中
通过使用VSCode的扩展功能Remote Development和Docker,在容器内部可以通过VSCode进行工作(可以连接到VSCode)。


通过在VSCode的工作目录中创建.devcontainer/devcontainer.json文件,可以将容器连接到VSCode。
“devcontainer.json的示例”
在中国的本地语言中,指定Docker服务名称、docker-compose.yml文件的路径等
"name": "PyTorch",
"dockerComposeFile": "../docker-compose.yml",
"service": "pytorch_111",
"workspaceFolder": "/app",
使用快捷键ctrl + shift + P打开命令面板,然后执行”Dev Containers: Open Folder in Container…”命令。

打开终端,您可以确认已经进入容器。

我們將在 PyTorch 中確認是否能夠識別 GPU。
>>> import torch
>>> print(torch.cuda.get_device_name())
NVIDIA GeForce RTX 3060 Ti
如果要退出容器,请点击左下角的Dev Container: Python,然后选择关闭远程连接。

以上视情况而定。
(Translation: The above is subject to change depending on the situation.)
赠品
我想在docker run命令中分配GPU资源。
在启动容器时,只需指定 –gpus all 即可。
我来试试看是否可以通过 nvidia-smi。
docker build . -f docker/pytorch/Dockerfile.111 -t pytorch_111:1.0 # Dockerfileをビルドしてイメージを作成
docker run -it --rm --gpus all pytorch_111:1.0 nvidia-smi # イメージからコンテナを起動
如果使用Docker Desktop的话。
当时我执行时遇到错误,所以我彻底删除了Docker桌面版,然后重新安装了Docker引擎。