疫情初期,开始在Windows 10上玩Docker容器,有幸成功安装和使用了几个基于WSL2的容器,比如FB的LASER项目,但一直无法使用Windows的显卡,在网上找到一些攻略,望而却步了。我一向奉行“拿来主义”,不能轻松拿来的,我是不太会继续费力不讨好的。
最近突然想起这事来,上网一搜,说最新版本的Docker已经支持在容器里使用GPU了,而且安装起来非常简便,只需拉取Nvidia自己制作的镜像,哈,喜大普奔呀!
首先上网搜到了Docker Hub的Nvidia镜像网址:
https://hub.docker.com/r/nvidia/cuda?_gl=1*1o2jgu*_ga*MTMwNjQ2MzY3OS4xNjkxMjM5Mzgw*_ga_XJWPQMJYHQ*MTY5MTI0Mjg0MC4yLjEuMTY5MTI0MzE0NC41NS4wLjA.
上面说拉取命令行是:docker pull nvidia/cuda,试了一下,出错。继续搜了一下,找到Nivdia在Gitlab上的开发repo,里面提到这个,说已经放弃使用latest这个tag,而上面那个命令行是默认拉取latest。而且还说他们的Ubuntu镜像以及有CUDA 12.2版本。正确的拉取命令行是:
docker pull nvidia/cuda:12.2.0-base-ubuntu20.04
马上试了一下,成功拉取。马上迫不及待地运行一下:docker run -it --gpus=all --rm nvidia/cuda:12.2.0-base-ubuntu20.04 nvidia-smi,出错,说CUDA版本不匹配。用nvidia-smi命令行查询,说我的当前安装的CUDA版本是12.0。果断转到Nvidia的最新CUDA下载网址:
http://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_network
安装几分钟到十几分钟,之后需要重新启动操作系统。这里说一点我的经验,CUDA每次升级,并不会把之前的旧版本删除:不同版本的CUDA是安装在不同文件夹下,以不同的版本号区分,而且会在系统变量里加上这些不同版本号以及相应路径,这样不同的程序要想调用相应的CUDA版本,读取相应的系统变量即可。
重启完毕,再次运行上面那个命令行,哈,成功显示GPU信息:
Docker命令行,我一直比较发憷,连最基本的都记不住(可能有老年痴呆迹象了)。这次成功运行,让我很有成就感,于是想深挖一下其具体含义,闻了一下ChatGPT:
嗯,不错。稍微改造一下,用
docker run -it --gpus=all nvidia/cuda:12.2.0-base-ubuntu20.04
成功进入我想要的交互界面。我知道Nvidia这个Ubuntu镜像,只是特别安装了CUDA,以便能够使用显卡。开发环境,比如Anaconda,还是要自己继续安装的。