在 wsl-ubuntu 里通过 docker 启动 gpu-jupyter
- [0. 背景](#0. 背景)
- [1. 安装 docker-ce](#1. 安装 docker-ce)
- [2. 安装 NVIDIA Container Toolkit](#2. 安装 NVIDIA Container Toolkit)
- [3. 使用 nvidia-ctk 命令配置容器运行](#3. 使用 nvidia-ctk 命令配置容器运行)
- [4. 通过 docker 运行 nvidia-smi](#4. 通过 docker 运行 nvidia-smi)
- [5. 运行 gpu-jupyter](#5. 运行 gpu-jupyter)
- [6. 访问 gpu-jupyter](#6. 访问 gpu-jupyter)
- [7. 测试 gpu-jupyter 是否可以访问 cuda](#7. 测试 gpu-jupyter 是否可以访问 cuda)
0. 背景
今天突然想尝试一下在 wsl-ubuntu 里通过 docker 启动支持 gpu 的 jupyter,那就开始着手干吧。
1. 安装 docker-ce
在 wsl-ubuntu 里面安装 docker-ce,先运行以下命令卸载所有冲突的包,
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
使用 apt 存储库安装,设置 Docker 的 apt 存储库。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装 Docker 软件包。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
通过运行 hello-world 映像来验证 Docker 引擎安装是否成功。
sudo docker run hello-world
您现在已经成功安装并启动了 Docker Engine。
refer: https://docs.docker.com/engine/install/ubuntu/
2. 安装 NVIDIA Container Toolkit
使用 Apt 安装,配置生产存储库,
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
安装 NVIDIA Container Toolkit 软件包,
sudo apt-get install -y nvidia-container-toolkit
refer: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
3. 使用 nvidia-ctk 命令配置容器运行
使用 nvidia-ctk 命令配置容器运行时,
sudo nvidia-ctk runtime configure --runtime=docker
nvidia-ctk 命令修改主机上的 /etc/docker/daemon.json 文件。该文件已更新,以便 Docker 可以使用 NVIDIA 容器运行时。
重新启动 Docker 守护进程,
sudo systemctl restart docker
refer: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
4. 通过 docker 运行 nvidia-smi
使用 Docker 运行示例工作负载,
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
输入结果如下,
refer: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/sample-workload.html
5. 运行 gpu-jupyter
使用 Docker 运行 gpu-jupyter,
mkdir /u01/data/jupyter-work; chmod 777 /u01/data/jupyter-work
docker run --gpus all -d --name gpu-jupyter --network host -v /u01/data/jupyter-work:/home/jovyan/work -e GRANT_SUDO=yes -e JUPYTER_ENABLE_LAB=yes --user root cschranz/gpu-jupyter:v1.6_cuda-12.0_ubuntu-22.04
refer: https://github.com/iot-salzburg/gpu-jupyter
6. 访问 gpu-jupyter
查看 gpu-jupyter 的 login token,
token=$(docker exec -it gpu-jupyter jupyter server list | grep -oP '(?<=token=)[a-zA-Z0-9]+')
echo $token
使用浏览器打开 http://127.0.0.1:8888/lab 进行访问,
7. 测试 gpu-jupyter 是否可以访问 cuda
import torch
torch.cuda.is_available()
torch.__version__
输出结果如下,
完结!