WSL2和CUDA踩坑
- 2020 年 10 月 24 日
- 筆記
- Windows
WSL2和CUDA踩坑
WSL2里可以直接跑cuda了, 目前(2020年10月) 功能可用, 但bug很多, 不夠完善
1. 安裝
主要參考: //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
(因需要梯子訪問下載,有些朋友不方便,所以我上傳到百度雲分享在這裡:)
(鏈接://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進程中