目录
Docker容器可以从底层虚拟化,使我们能够在 不降级 CUDA驱动程序的情况下使用 任何版本的CUDA Toolkit,非常方便。
当然,Docker容器并不会提供真正的硬件虚拟化,而是通过隔离喝共享宿主机的操作系统内核来实现虚拟化。
准备
1. WSL安装cuda container toolkit
需要docker深度学习的这个必装,因为我们后续是从wsl中创建docker container。
安装说明链接:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
我是按以下安装的:
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
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
systemctl --user restart docker
2. win11 Docker Desktop 设置
Docker Desktop setting里设置如下,这样wsl中的docker image 和 container 也都可以在Docker Desktop这里看到。
3. WSL创建docker container并连接cuda
在docker中使用nvidia gpu需要使用nvidia/cuda发布的images,看tag可以选cuda-toolkit版本。我选的是11.6的,这里需要注意的是runtime版本虽然小,但是cuda-toolkit不完整,所以最后我选的是11.6.1-cudnn8-devel-ubuntu20.04
。
在wsl里运行:
docker pull nvidia/cuda:11.6.1-cudnn8-devel-ubuntu20.04
# 为了保证可视化 run image 时加以下参数
docker run -it --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all --name 自定义 --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --device=/dev/dri:/dev/dri -p 自定义:自定义 nvidia/cuda:11.6.1-cudnn8-devel-ubuntu20.04 bash
安装VcXsrv可以可视化,可视化的部分请看这篇。
这时候已经有/cuda
了。
(robodiff) root@108c7c90b1f5:/usr/local# ls
bin cuda cuda-11 cuda-11.6 etc games include lib man sbin share src
但这时候 nvcc -V
应该是不可以的,需要先给/cuda
和/cuda-11.6
建立链接,然后在~/.bashrc
里添加以下,记得source ~/.bashrc
。
# 给`/cuda`和`/cuda-11.6`建立链接
ln -sf /usr/local/cuda-11.6 /usr/local/cuda
export CUDA_HOME=/usr/local/cuda
export PATH=${PATH}:${CUDA_HOME}/bin
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
这时候nvcc -V
可以,是我想要的v11.6
如下图。
我们也可以用cuda-samples
进一步验证。(此步可略)
cd /usr/local/cuda/
git clone https://github.com/NVIDIA/cuda-samples.git
cd cuda-samples
git checkout tags/v11.6 #选择指定tag的版本
cd Samples/1_Utilities/deviceQuery
make #这时候会生成名为 deviceQuery 的可执行文件
./deviceQuery #运行它会显示cuda相关的所有信息
最后一行显示了 Result = PASS
就说明我们cuda安装成功并且可以运行了。
此时,装的pytorch
就可以使用GPU了。
4. container安装miniconda(可选)
container中可以安装 minicoda,各个版本的链接在这:https://repo.anaconda.com/miniconda/。选个自己需要的版本安装,我的版本是Miniconda3-py39_24.1.2-0-Linux-x86_64.sh
。
mkdir -p /opt/conda
wget https://repo.anaconda.com/miniconda/Miniconda3-py39_24.1.2-0-Linux-x86_64.sh -O /opt/conda/miniconda.sh \ && bash /opt/conda/miniconda.sh -b -p /opt/miniconda
chmod +x /opt/conda/miniconda.sh
. /opt/miniconda/bin/activate
这时候会打开conda并创建base环境,说明我们安装成功。为了不每次打开conda都要运行. /opt/miniconda/bin/activate
,我把它写在~/.bashrc
里,然后source ~/.bashrc
,这样打开的所有terminal都可以使用conda。
开始我们的深度学习吧 ~