Win10+wsl2+mmdetection3d(GPU)

实现过程

  1. 安装WSL2
    踩坑点:
  • 基于发行版安装,无法更新wsl1,查证了当前的wi10的驱动是满足要求的,但是无法更新。所以一定要先去更新驱动!
  • 刚开始没有装到C盘,选择装到别的盘,cuda总是因为各种文件问题还找不到路径之类的错误,无奈卸载了发行版,去Microsoft store下载,然后export到其他盘。
  1. 基于docker部署mmdetection3d
  • 选择基于docker安装也是因为mmdetection本身有很多现有的景象支持,让这个本来就不稳定的环境少一些发生错误的可能。大概重装了两次wsl都是因为cuda和pytorch安装问题,用docker安装可以少很多这样的弯路。
  • 也有docker下载一个现成的也不一定能在这里用,但是没有关系,不纠结直接换另一个可行的就可以。

我会尽量把这其中遇到的困难都记录下来。

安装wsl2

总体来说,需要1 安装win10最新的驱动;2 确保各项虚拟化相关的设置都是正确的;3 为了方便和减少出错的可能,需要按照教程把wsl、ubuntu20.04按照应用商店的应用安装。
参考教程:
https://zhuanlan.zhihu.com/p/621142457

  1. 这个教程里面会有systemctl不能用的报错:
    System has not been booted with systemd as init system (PID 1). Can’t operate. Failed to connect to bus: Host is down
    参考:
    https://www.zhihu.com/question/535145130

  2. 迁移系统可详细看:https://zhuanlan.zhihu.com/p/643184142

  3. 报错 Error code: Wsl/Service/WSL_E_DISTRO_NOT_FOUND
    我选择重新安装wsl,然后解决问题

安装docker

报错: WSL2+Ubuntu 20.4+Docker: merged/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1: file exists: unknown. 无法使用GPU,重新下一个,我下载的可用的是这个:
在这里插入图片描述
安装地址:https://hub.docker.com/r/artzha/mmdetection3d

另外docker下载镜像需要国内镜像源加速,配置方法:https://blog.csdn.net/elong490/article/details/114627211


补充:下载其他镜像的时候发现同样有这个问题,我的问题是镜像只能建立不带GPU的容器,没办法建立带GPU的容器,如果不带GPU的容器也没办法建立的话,看下图的方法,但是我没试过. 针对性的解决办法:
具体的报错信息:

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'   
nvidia-container-cli: mount error: file creation failed: 
/var/lib/docker/overlay2/992e2cfa26431a881e3831e93c6659708625b05d1d9c5df663eb2951e62a8c90/merged/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1: file exists: unknown.
错误摘要:
Docker守护进程无法为容器创建任务。
OCI运行时报告无法启动容器进程。
nvidia-container-cli 在尝试挂载文件(libnvidia-ml.so.1)时遇到错误,因为容器的文件系统中已经存在该文件。

在尝试为容器创建任务时,Docker容器初始化过程中出现了问题。具体来说,nvidia-container-cli 报告了一个挂载错误,因为它无法在指定路径创建文件。这通常是由于容器镜像中的NVIDIA库存在冲突所致。
解决方案

  1. 使用nvidia-docker 启动原始镜像的非GPU容器。或者使用docker而不是nvidia-docker, 这应该不会产生错误。
  2. 在容器内部,手动删除或重命名冲突的文件,即 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 和 /usr/lib/x86_64-linux-gnu/libcuda.so.1。
    提交更改以从容器创建新镜像。
  3. 使用新创建的镜像使用 nvidia-docker 启动新容器。
# 第1步:
sudo docker run -it [镜像名称] /bin/bash
# (使用 Docker(而不是 nvidia-docker)启动容器)
sudo docker run --rm -it [镜像名称] /bin/bash

# 第2步:在容器内部删除或重命名冲突的文件
mv /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1.bak
mv /usr/lib/x86_64-linux-gnu/libcuda.so.1 /usr/lib/x86_64-linux-gnu/libcuda.so.1.bak

# 退出容器
exit

# 第3步:提交容器以创建新镜像
sudo docker commit [容器ID] 新镜像名称:标签

# 第4步:使用新镜像使用 nvidia-docker 启动新容器
sudo docker run -it --runtime=nvidia --gpus all 新镜像名称:标签 /bin/bash

与VSCode插件连接

VScode插件可下载:
直接访问WSL系统中的代码
访问docker内的代码

其他问题

  1. your gpu arch (8 9) isn’t compiled in prebuilt
    我用的是RTX4090,一开始下载spconv的2.1.21, 看openmmdetion3D推荐自己安装的spconv-cu113, 但是仔细查看了spconv的版本更新,发现在2.2.4有关于这个prebuild的改进,于是升级为spconv-cu113的2.2.4版本,没有这个警告了.
    在这里插入图片描述
  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值