技术背景
笔者尝试过不少编程环境搭建的方案,例如常见的Ubuntu、Deepin、CentOS,也用过很多人力荐的Manjaro,这些发行版在需要办公的条件下,一般都需要结合Windows双系统使用。MacOS更适用于本地环境搭建,但是能兼容的显卡型号还是比较有限的。经过一些测试,其实我认为Win11+WSL2+Docker会是一个比较不错的解决方案(本来打算也试试虚拟机,但是听朋友说虚拟机调CUDA有坑,因此暂时不做考虑)。虽然直接用WSL2也可以搭建一个本地的编程环境,但是这样的环境具有一些不稳定因素,以及不可迁移的性质,因此我个人认为还是WSL2+Docker的方案稳定性会更高一些。
配置Docker环境
安装WSL2
在应用商店里面直接搜wsl2,找一个稳定版本下载安装,我选择的是Ubuntu20.04:
下载Docker桌面版软件
去Docker官网下载一个Win11版本的Docker桌面版并安装:
启用虚拟化相关启动项
在控制面板里面找到"启用或关闭Windows功能":
找到虚拟机监控、子系统、Hyper-V、虚拟机平台这些,打上勾:
安装Docker桌面版软件:
这一步比较简单,按照顺序操作即可:
这就开始启动安装程序了:
安装完成后,可以在"用户-用户名-.docker"目录下找到daemon.json
配置文件:
在这个文件中你可以配置一些你自己需要的镜像源,比如我这边配置了几个不同的镜像源:
json
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
],
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
需要注意的是,国内有些地方的网络不能正常访问docker官网或者登录dockerhub,这个问题需要自行解决。安装完成后打开啊Docker桌面版是这样的:
其实,如果只是使用Docker的话,登录不上DockerHub只是说你不能向DockerHub上Push你自己的本地镜像,但并不影响本地使用。
配置WSL中的Docker
在前面的步骤中已经完成了WSL2的安装,此时打开Win11的终端窗口,可以选择打开哪一类的终端,例如我们下载的Ubuntu20.04:
初次登录,有可能需要自己配置相应的账号密码。配置完成后,可以在Docker桌面版的设置-资源中,找到我们使用的WSL子系统:
然后在WSL中添加docker专用的用户组,就可以开始拉取远程镜像了:
这里我们拉取的是一个MindSpore2.2.14的GPU版本的镜像。在本地拉取完成后,可以在Docker桌面版中看到相应镜像的存在:
除了拉取这种专用的软件镜像之外,更多人会选择拉取一些基础镜像,例如Ubuntu、CentOS等操作系统的基础镜像,然后再自己写一个Dockerfile来构建自己的本地镜像。
运行Docker
拉取完本地镜像之后,你可以选择在Docker桌面版上直接启动相关镜像:
但是我个人习惯在Win11桌面上搞一个简单的Bash脚本来启动:
bash
docker run -it --env="DISPLAY" -v A:\container-mindspore\:/home/ --runtime=nvidia mindsponge:latest
启动成功后,可以通过docker ps -a
来查看正在运行的容器,也可以通过docker images
来使用命令行查看本地的镜像列表,还可以用docker commit
把相应的容器内修改提交到镜像中。有一点需要提醒的是,因为是需要搭建一个本地的编程环境,我们最好是把我们的本地工作目录映射到Docker中的指定目录,这样在Docker中针对于这个目录下的修改可以直接同步保存到本地路径中。
编程环境搭建
Docker相关插件
这里我们首选推荐VSCode作为IDE使用,因为VSCode的扩展非常丰富,我们用得到其中关于Docker的远程编程工具Remote Development
和Dev Containers
:
还有Docker
扩展:
安装完成后,可以在这个Docker的扩展中找到我们已经启动的容器镜像mindsponge:latest
然后选择相应的镜像,Attach到VSCode的编程环境中:
Attach成功之后,再打开自己的workspace就会看到我们的项目已经链接到相应的容器镜像环境中运行:
Python相关插件
此时链接到容器镜像环境中后,其实我们可以直接在Terminal里面去运行和测试,但是VSCode中有一些可以让Python编程和Debug更加方便的插件可以考虑一下。例如这个Code Runner
,可以在编程界面的右上角增添一个三角形图标一键运行:
还有这个Pylance
和Python
也是非常推荐的扩展工具,可以实现ctrl+左键
快捷跳转到定义处:
Git相关插件
这里推荐三个跟Git相关的扩展插件:GitLens
、Git Graph
、Git History
:
这几个插件可以把`git diff`的功能可视化,编辑界面更加漂亮和方便一些:
还可以把git相关的一些操作如`add`、`commit`、`log`、`push`等等可视化到界面里面,即使是对git的操作指令没有那么熟悉的用户也可以轻松使用:
关于QT工具的Debug
在Docker镜像中使用到一些QT软件(例如silx)的时候,有可能出现一些找不到相关lib的报错,此时需要打开QT的debug选项,确认清楚QT软件无法使用的原因:
bash
export QT_DEBUG_PLUGINS=1
如果遇到一些明确的报错说:libxxx.so.1 not found
。就可以使用apt install libxxx-1
来安装相关的软件库。当然,这些相关的操作可以直接保存到镜像中,或者是通过修改Dockerfile来直接构建一个可用QT的基础镜像。我这里有一份安装silx需要用到的软件安装脚本,有需要的可以拿去用:
bash
# export QT_DEBUG_PLUGINS=1
cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
sed -i "s@http://.*archive.ubuntu.com@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list
sed -i "s@http://.*security.ubuntu.com@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list
apt update
apt install -y libgl1
apt install -y libglib2.0-0
apt install -y libfontconfig1
apt install -y libxcb-icccm4
apt install -y libxcb-image0
apt install -y libxcb-keysyms1
apt install -y libxcb-randr0
apt install -y libxcb-render-util0
apt install -y libxcb-shape0
apt install -y libxcb-xfixes0
apt install -y libxcb-xinerama0
apt install -y libxcb-xkb1
apt install -y libxkbcommon-x11-0
apt install -y libdbus-1-3
export QT_DEBUG_PLUGINS=
export XDG_RUNTIME_DIR=/usr/lib/
总结概要
本文介绍了一个在Win11系统下,通过WSL2+Docker+VSCode的方案搭建了一个mindspore-gpu的编程环境。这种方案既可以实现Linux系统编程以及部署的便捷性,又可以兼顾Windows系统强大的办公软件生态,甚至还可以借助Docker达到一定的软件可迁移性和可复制性。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/win11-mindspore.html
作者ID:DechinPhy
更多原著文章:https://www.cnblogs.com/dechinphy/
请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html