当前位置:   article > 正文

在Windows11中的Docker Desktop创建的容器内使用GPU_怎么在wsl的docker容器里面使用gpu

怎么在wsl的docker容器里面使用gpu

在Windows11中的Docker Desktop创建的容器内使用GPU

PS:由于自己的智商掉线,此过程持续了近三天的时间,非常痛苦,记录一下,以明我不再犯错的决心之志/(ㄒoㄒ)/~~

系统与软件版本

  • win11 版本:专业版22000.258
  • WSL2
  • Docker Desktop 版本:4.7.1 (77678)
  • CUDA driver for WSL 版本:512.15
  • 宿主机上的CUDA版本为11.0、对应cudnn版本为8.0.5(因为写代码使用的是tensorflow2.4.0)

配置过程

因为我已实现在win11下用docker创建运行我代码的某个镜像,现在考虑在该镜像实例中(容器)调用GPU,加速代码运行速度。
即我已完成:

  • 启用WSL2
  • 安装Docker Desktop

第一步:安装CUDA driver for WSL

注意哦,此步是在宿主机上安装:官网链接
PS:好像下载的就是最新的nvidia windows 驱动程序,其中已带有了对WSL的CUDA支持。(【小白谨慎)
tips:可以在宿主机的终端中,输入nvidia-smi查看当前驱动程序版本。
在这里插入图片描述

第二步:验证容器是否可访问GPU

  • 方法1:打开宿主机的终端,执行命令:
docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
  • 1

输出如下内容,即证明可访问

> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
GPU Device 0: "Pascal" with compute capability 6.1

> Compute 6.1 CUDA device: [NVIDIA GeForce GTX 1060]
10240 bodies, total time for 10 iterations: 9.040 ms
= 115.995 billion interactions per second
= 2319.891 single-precision GFLOP/s at 20 flops per interaction
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(PS:懒得执行了,直接copy我参考的大佬的博文里的)

  • 方法2:在你喜爱的容器内,执行命令nvidia-smi
    同上理可看到如下输出,即证明可访问
    在这里插入图片描述

第三步:在容器内安装CUDA和cudnn

注意!!!,此时仅仅是可以访问,对应要在一些深度学习框架中真正使用之,还需要在你喜爱的容器内,配置相应的CUDA和cudnn环境。
因为我宿主机和容器内用的都是tensorflow2.4.0,而且我容器内的系统版本是Ubuntu16.04,所以只要在官网中下载对应的cuda(版本为11.0)和cudnn(版本为8.0.5),并在容器安装即可。
CUDA11.0官网链接
cudnn官网链接

(1)按照官网给的安装过程安装CUDA

我使用的是run的安装方式,因为听说用deb格式安装的话,会在安装过程中替换掉已经安装好的nvidia显卡驱动。
在这里插入图片描述
下载好run文件后,执行命令sudo sh cuda_11.0.3_450.51.06_linux.run就进入安装过程,具体安装过程截图找不到了,首先是输入accept,然后再直接选install即可。
PS:安装过程中,并没有提醒是否移除已有的nvidia显卡驱动,也没有安装相应的驱动,而是在安装结束后多输出一些信息,如下:
在这里插入图片描述
上述信息是警告,提醒CUDA没有对应的驱动,可以执行命令安装之:

sudo sh cuda_11.0.3_450.51.06_linux.run --silent --driver
  • 1

不谙世事的我…一开始乖乖执行了,但现在觉得不执行也可以,因为在容器内执行命令nvidia-smi已经有输出驱动的版本,说明驱动已经安装好了,只是cuda安装程序检测不到cuda for wsl的驱动?
Anyway,接下来按常规操作,配置环境路径,输入命令sudo vim ~/.bashrc,在该文件末尾加入:

export PATH=/usr/local/cuda-11.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
  • 1
  • 2

保持退出,再执行命令source ~/.bashrc 刷新一下环境变量。
最后执行命令nvcc -V,输出cuda版本(如下)即证明cuda安装成功。
在这里插入图片描述

(2)安装cudnn

下载对应版本的cudnn的三个文件:
在这里插入图片描述
分别执行命令:

sudo dpkg -i libcudnn8_8.0.5.39-1+cuda11.0_amd64.deb
sudo dpkg -i libcudnn8-dev_8.0.5.39-1+cuda11.0_amd64.deb
sudo dpkg -i libcudnn8-samples_8.0.5.39-1+cuda11.0_amd64.deb
  • 1
  • 2
  • 3

安装结束后,输入命令:

cp -r /usr/src/cudnn_samples_v8/ ~
cd ~/cudnn_samples_v8/mnistCUDNN/
make clean && make
./mnistCUDNN
  • 1
  • 2
  • 3
  • 4

输出如下即证明cudnn安装成功。
在这里插入图片描述
中间的输出省略。。太长了
在这里插入图片描述
最后看到test passed!即可

补充

容器的一些相关操作

  • 创建一个需要使用宿主机GPU的容器时,使用命令:
docker run -it --gpus all  --shm-size=8gb 镜像名
  • 1
  • 容器需要挂载宿主机的文件夹时,即共享一些文件(也叫容器数据卷?),使用命令:
docker run -it --gpus all  -v宿主机文件夹地址:容器内对应地址 --shm-size=8gb 镜像名
  • 1
  • 将配置好环境的容器生成新的镜像(commit命令),使用命令:
docker ps #查看当前运行的容器及其id
docker commit -a="作者名字" -m="描述信息" 容器id 新镜像名字:版本号
docker images #查看本机已有的镜像
  • 1
  • 2
  • 3

查看linux版本信息

  • 查看linux内核版本
uname -a
  • 1

在这里插入图片描述

  • 查看linux发行版本(release版本)
cat /etc/issue
  • 1

在这里插入图片描述

  • 查看ubuntu版本
lsb_release -a
  • 1
显示如下
Distributor ID: Ubuntu                           //类别是ubuntu
Description:  Ubuntu 16.04.3 LTS          //16年3月发布的稳定版本,LTS是Long Term Support:长时间支持版本,支持周期长达三至五年
Release:    16.04                                    //发行日期或者是发行版本号
Codename:   xenial                               //ubuntu的代号名称

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

参考博文

https://www.cnblogs.com/booturbo/p/13960935.html
https://blog.csdn.net/chenxizhan1995/article/details/117855448
https://www.cnblogs.com/coco9821/p/14859325.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/631914
推荐阅读
相关标签
  

闽ICP备14008679号