盼望着,盼望着,wsl2终于支持GPU了!之前预热了好久,一直等待着能正式上车,今天终于如愿以偿。关于wsl2的背景,关心的朋友大都知道,我就废话少说,直接来在wsl2上装CUDA!(不会真有人用AMD来炼丹吧。。
Windows侧驱动安装
- 首先需要升级到最新的fast预览版,版本号为20150,正好是618这天更新的,上车方法为参与Windows预览体验计划,选择fast ring,然后检查更新即可。
- 其次需要装好wsl2,这个就不用赘述了。
- 为了使用CUDA,我们还需要安装最新的测试版Nvidia驱动(需要申请一下Nvidia开发者账号,装过CuDnn的朋友们大多都有),下载链接如下:
Linux侧环境配置
好了,准备工作做完了,如果你是AMD的GPU,那恭喜你,可以直接开始炼丹了。如果是Nvidia的GPU,根据NV的说法,在linux上build的CUDA程序可以直接运行,但是我手头并没有linux的机器,而且NV更推荐使用docker来配置CUDA,所以在此直接介绍基于docker的方案。
首先安装docker:
$ curl https://get.docker.com | sh
添加NV的docker源:
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list
然后安装NV的docker runtime:
$ sudo apt update
$ sudo apt install -y nvidia-docker2
重启一下docker服务:
$ sudo service docker stop
$ sudo service docker start
安装合适的CUDA docker镜像
既然NV的GPU是通过docker实现GPU支持,那自然所有配置好了CUDA环境的镜像都是可以直接使用的。NV的文档中给出了TensorFlow的官方docker镜像例子,如果需要使用TF可以安装并运行这一镜像:
$ docker pull tensorflow/tensorflow:latest-gpu-py3-jupyter
$ docker run -it --gpus all -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter
这里一定需要添加--gpus all
的参数,才能支持GPU,安装运行后,在浏览器打开localhost:8888/?token=xxxxxxxxxx
即可直接使用启用GPU支持的Jupyter notebook,效果如下:
如果不需要使用TF,而是像我一样需要在julia
中使用CUDA.jl
,则需要重头开始新建一个环境。由于CUDA.jl
安装时会自动安装CUDA
,CUDNN
以及CUTENSOR
等而不依赖系统,为了方便我直接使用了nvidia/cuda:10.2-base
这一docker镜像(仅有41M)作为底包。之所以不直接用ubuntu
是因为nvidia提供的底包里面添加了自己的源哈哈哈。 如果有其他包的需求可以看cuda镜像的tag,链接在此:https://ngc.nvidia.com/catalog/containers/nvidia:cuda/tags
$ docker pull nvidia/cuda:10.2-base
$ docker run -it --gpus all nvidia/cuda:10.2-base /bin/bash
进来以后直接就是root环境,然后就可以开始配置你自己的开发环境了,新建用户,安装build-essential
,julia
等,和普通ubuntu没有任何差异。配置完成后千万千万记住要commit,保存对原镜像的修改。需要使用docker ps
和docker tag
等命令,在此不再赘述。
好了,大功告成!来看看效果吧:
还有更多有关的细节可以参考以下链接:
CUDA Toolkit Documentationdocs.nvidia.com