WSL2和CUDA踩坑
WSL2里可以直接跑cuda了, 目前(2020年10月) 功能可用, 但bug很多, 不够完善
1. 安装
主要参考: https://docs.nvidia.com/cuda/wsl-user-guide/index.html
注意:
1. 目前需要加入windows体验计划, 并选dev通道, 更新到开发版的windows
2. 开启hyper-v/wsl/虚拟化平台等windows的功能并安好wsl, 可能需要wsl –update更新内核
4. 在wsl里安cuda的话是用: cuda-toolkit-11-1
Do not choose the cuda, cuda-11-0, or cuda-drivers meta-packages under WSL 2 since these packages will result in an attempt to install the Linux NVIDIA driver under WSL 2.
2. 常见问题
1. DNS有问题
在/etc/resolv.conf 里加自已的dns可暂时解决
永久解决要新建/etc/wsl.conf文件内容如下:
[network]
generateResolvConf = false
删掉 原来的 /etc/resolv.conf (这是个链接) 换成好用的dns设置
2. 太占C盘空间
最简单的移动方法, 找到wsl2的ext4.vhdx文件在哪:
一般在类似这种地方: C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState
把ext4.vhdx移到其它盘, 再作一个SymbolLink就可以了 New-Item -ItemType SymbolicLink -Path . -Name ext4.vhdx -Target $newLocation
3. wsl读写速度慢
和wsl1不同现在的/mnt/下的碰盘访问走的是网络, 在读写大量小文件时慢的怀疑人生. 尽量用本地的盘吧
4. wsl扩容
wsl2默认只有256G的大小, 可以直接用hyper-v中的磁盘工具给ext4.vhdx扩容. 再到wsl里重新给/划空间
sudo resize2fs /dev/sdb <sizeInMegabytes>G
5. wsl2和代理工具Proxifer互相冲突 [ 参考的对象类型不支持尝试的操作 The attempted operation is not supported for the type of object referenced ].
问题:
参考的对象类型不支持尝试的操作。(The attempted operation is not supported for the type of object referenced.)
解决方法:
1. 临时解决方案(不推荐):
以管理员身份运行CMD,输入:
netsh winsock reset (不过这样Proxifer就废了)
重启计算机即可修复。
2. 比较长期解决的方案(推荐):
(使用到目前,仍未出现问题)
(1)下载此软件:
www.proxifier.com/tmp/Test20200228/NoLsp.exe
(因需要梯子访问下载,有些朋友不方便,所以我上传到百度云分享在这里:)
(链接:https://pan.baidu.com/s/1bVZ0OXZPxEt8l1IHYaFK3A ,提取码:vjge)
(2)管理员身份运行CMD输入:
NoLsp.exe C:\windows\system32\wsl.exe
1
请自行注意NoLsp.exe程序的位置,以及你的wsl.exe位置。
产生原因和解决方法分析:
代理软件和wsl2的sock端口冲突,使用netsh winsock reset重置修复。
Proxifer开发人员解释如下:
如果Winsock LSP DLL被加载到其进程中,则wsl.exe将显示此错误。最简单的解决方案是对wsl.exe使 用WSCSetApplicationCategory
WinAPI调用来防止这种情况。在后台,该调用在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog中为wsl.exe创建一个条目。
这将告诉Windows不要将LSP DLL加载到wsl.exe进程中