wsl即適用于Windows的Linux子系統(tǒng)支持幾種常見的Linux系統(tǒng)刻剥,我主要用了ubuntu2004。
- 確實很方便滑凉,Windows下直接可以打開Linux環(huán)境欧聘,
- 顯卡直通,Linux子系統(tǒng)直接可以認(rèn)出Nvidia顯卡员淫,不用額外裝驅(qū)動合蔽,這個好像用其他虛機做不到。并且在子系統(tǒng)里跑cuda任務(wù)介返,可以直接在Windows任務(wù)管理器做性能監(jiān)控拴事,感覺還是方便的。
- Linux子系統(tǒng)可以從/mnt直接讀取Windows盤符圣蝎,例如讀取d盤的download的目錄:
cd /mnt/d/download
1. 系統(tǒng)環(huán)境要求
我用的win11刃宵,沒怎么在意操作系統(tǒng)要求,直接就是滿足的徘公,貌似專業(yè)版和家庭版都可以牲证。
-
控制面板->程序和功能->啟用或關(guān)閉windows功能,打開三個項目:
- 虛擬機平臺
- 適用于Linux的Windows子系統(tǒng)
-
Windows虛擬機監(jiān)控服務(wù)平臺(我沒開关面、沒問題) 坦袍,這個據(jù)說主要解決多個hypervisor共存問題,比如vmware+hyper-v
2. WSL2操作(大多是命令行)
2.1 安裝wsl
理論上在管理員權(quán)限下命令提示符運行:
wsl --update
即可等太。
一些文章要求手動執(zhí)行兩個dism命令捂齐,但如果不出問題應(yīng)該可以不用執(zhí)行。
#開啟Windows Subsystem for Linux
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestar
#開啟虛擬機特性
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
2.2 建議直接將默認(rèn)版本設(shè)置為WSL 2(但可能不做這一步默認(rèn)也是2)
wsl --set-default-version 2
2.3 檢查版本或狀態(tài)信息
wsl --status
wsl --version
wsl -l -v(主要是驗證安裝的)
在大多數(shù)情況下WSL2比1好缩抡,比如有完整的Linux內(nèi)核等等奠宜。WSL1明顯的好處只有一條:
從 Linux子系統(tǒng)中訪問 windows 中的文件時,仍然是 WSL1 快瞻想。
2.4 安裝Linux子系統(tǒng)
推薦直接到Windows Store中直接搜压真,比如Ubuntu 20.04等。
也可以用命令行通過網(wǎng)絡(luò)安裝蘑险,比如先列出可用的Linux發(fā)行版:
wsl --list --online
#或者
wsl --install
但我運行連接不上滴肿,參考其他文章,至少需要改DNS漠其,或者之間那個啥嘴高。
基本安裝指令:
wsl --install <發(fā)行版名稱>
列出已經(jīng)安裝的子系統(tǒng):
wsl --list --verbose
或
wsl -l -v
但是上述兩種安裝方法,對后續(xù)的維護(hù)貌似是有差別的:
- 用windows store做安裝和屎,后續(xù)有也可以直接在圖形界面刪除這個實例拴驮。
- 用命令行方式安裝,卸載仍然要使用命令行方式柴信,否則重裝實例時會出錯:
wsl.exe --unregister Ubuntu-20.04
這里沒怎么做測試套啤,可能用store安裝之后,后續(xù)也需要unregister
2.5 修改安裝位置
默認(rèn)的安裝位置:
<用戶文件夾>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_<隨機數(shù)>
最后一段總之是CanonicalGroupLimited開頭的、很長的一個名字潜沦。在里面可以找到以一個名為LocalState文件夾萄涯,里面有個會有一個幾十GB的vhdx文件,這個應(yīng)該就是虛擬磁盤了唆鸡。
修改安裝位置理論上有兩種方式涝影,一個是安裝之前設(shè)定工作目錄(還沒測試):
wsl --cd <Directory>
或者采用后文介紹的快照回滾方法,在進(jìn)行回滾(import)時争占,可以指定一個新的位置燃逻。
2.6 啟動鏡像
可以在開始菜單找圖標(biāo),或者在命令行執(zhí)行:
wsl -d Ubuntu-20.04
貌似直接在命令行寫名字也能啟動:
ubuntu2004
在命令行環(huán)境直接exit就可以退出來臂痕。
2.7 如果啟動實例報錯
Error: 0x800701bc WSL 2 ??????????????????
網(wǎng)上搜這個文件下載安裝:
wsl_update_x64.msi
3. CUDA+CUDNN
3.1 安裝cuda
Nvidia的下載界面如圖所示:
- 可以i直接選擇wsl-ubuntu伯襟,貌似這個是不帶顯卡驅(qū)動的,wsl方式不需要(有人說禁止)安裝nvidia驅(qū)動握童。
- 有三種安裝方式可選姆怪, 有文章推薦使用runfile方式進(jìn)行安裝,但只說安裝沒啥差別澡绩,頁面下方就有安裝方法稽揭。
- 他這個deb(network),下面的提示沒看懂英古,不知道如何體現(xiàn)出這是什么版本淀衣。
- 此外,不同安裝方式召调,貌似卸載方式也是不同的,如果安裝錯誤蛮浑,runfile方式卸載起來好像容易一些唠叛,我之前用deb(network)部署,卸載時出了一些問題沮稚,我Ubuntu不是特別熟艺沼,沒深究。但如果一次性把版本和步驟都做完蕴掏,這些爛事就都遇不到了障般。
再安裝cuda toolkit:
sudo apt install nvidia-cuda-toolkit
查看一下安裝狀態(tài)、版本等信息:
nvcc -V
或
nvidia-smi
或
cat /usr/local/cuda/version.json
#很多文章說查看的是version.txt盛杰,但至少11.8版本cuda沒有這個文件挽荡,只有json,意思應(yīng)該是一樣的即供,json內(nèi)容很多定拟。
配置環(huán)境變量:
編輯bashrc:
vim ~/.bashrc
在最后填寫兩行(注意路徑中的版本號):
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
然后生效一下:
source ~/.bashrc
3.2 cudnn
首先下載cudnn文件,建議直接下載對應(yīng)的deb包逗嫡。
WSL是能夠直接訪問windows目錄的青自,直接從/mnt文件夾下面就可以找到下載目錄和文件株依。
在文件所在目錄下執(zhí)行:
sudo dpkg -i cudnn-local-repo-ubuntu2004-8.8.1.3_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
#第二句是根據(jù)系統(tǒng)提示加的,我之后又運行了一遍dpkg延窜,理論上不用
#這個更新一定執(zhí)行一下
sudo apt-get update
然后執(zhí)行三句話恋腕,暖它一整天:
sudo apt-get install libcudnn8=8.8.1.3-1+cuda11.8
sudo apt-get install libcudnn8-dev=8.8.1.3-1+cuda11.8
sudo apt-get install libcudnn8-samples=8.8.1.3-1+cuda11.8 (主要為了下面的測試)
注意對應(yīng)的cudnn的文件名:
cudnn-local-repo-ubuntu2004-8.8.1.3_1.0-1_amd64.deb
其中8.8.1.3,以及結(jié)合實際的cuda版本11.8逆瑞,這個信息一定要結(jié)合實際信息修修改荠藤,否則找不到包。
比如呆万,如果執(zhí)行結(jié)果信息中有Unable商源、not found啥的,就是字符串沒搞對:
E: Version '8.8.1.3_1.0-1+cuda11.8' for 'libcudnn8' was not found
總之這里一定要好好看輸出信息有沒有不對勁的地方谋减。
最后測試一下牡彻,首先建議執(zhí)行:
sudo apt-get install libfreeimage3 libfreeimage-dev
否則下面編譯時可能出現(xiàn):
fatal error: FreeImage.h: No such file or directory
執(zhí)行:
cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN
正常情況下,應(yīng)該一通輸出之后顯示
Test passed!
3.3 制作一個wsl快照
好不容易裝好的出爹,建議搞個快照備份一下:
在管理員權(quán)限的宿主機命令提示符下執(zhí)行:
wsl --export Ubuntu-20.04 d:\downloda\wsl-ubuntu2004-20230626.tar
我沒有關(guān)虛機庄吼。但貌似導(dǎo)出的時候自己退出來了,導(dǎo)出過程大概用了幾分鐘严就,出來一個17GB的tar文件总寻,里面看上去就是文件目錄格式,應(yīng)該不包括內(nèi)存狀態(tài)梢为。
回滾的方法(只總結(jié)了網(wǎng)上的教程渐行,但不同版本教程基本都是這三步):
#先注銷虛機
wsl --unregister Ubuntu-20.04
#然后回滾(中間參數(shù)為還原的位置,可能可以不設(shè)置铸董,沒測試過)
wsl --import Ubuntu d:\wsl d:\downloda\wsl-ubuntu2004-20230626.tar
#設(shè)置默認(rèn)用戶名(ubuntu2004 是系統(tǒng)默認(rèn)給出的名字祟印,這個沒注意從哪里查)
ubuntu2004 config --default-user USERNAME
3.4 tensorflow裝一下看看
這個版本的ubuntu,自帶的python是3.8粟害,沒有pip蕴忆。建議裝完上述內(nèi)容,運行幾次”sudo apt-get update“之后悲幅,再根據(jù)提示安裝pip套鹅,麻煩會少一些。
直接在ubuntu環(huán)境下安裝tensorflow汰具,自動裝的2.12卓鹿,跑了個簡單代碼試了一下,確實能看出再跑GPU郁副,可以直接在windows任務(wù)管理器做監(jiān)控:
4. pycharm遠(yuǎn)程調(diào)試
- 在Pycharm上編碼减牺,然后反正WSL可以訪問到windows文件系統(tǒng)的代碼,所以直接在wsl里面執(zhí)行python命令跑代碼就行,也可以直接再pycharm的終端窗口運行wsl命令拔疚,比如ubuntu2004肥隆,進(jìn)入虛擬機操作。
- 注意linux下的代碼稚失,訪問windows路徑時的字符串寫法栋艳,別的沒啥了。
- 其他更高級的辦法待查句各。
5. WSL的圖形化界面
參考微軟官網(wǎng):
直接apt-get install需要的軟件即可吸占,比如gedit、或者Nautilus(一個文件管理器)等凿宾。安裝好之后可以直接運行軟件矾屯,軟件界面直接在windows中打開,十分的人性初厚。
6. 利用Docker實現(xiàn)GPU加速
參考微軟官網(wǎng)的文章:
基本一條一條照著操作即可件蚕,目前看不需要科學(xué)的那啥。
只有一條产禾,在執(zhí)行最后的docker run命令之前排作,重啟一下docker服務(wù)。
sudo service docker restart
否則找不到顯卡亚情。
這個教程里的容器妄痪,自帶cuda10.2,以及python3.6和tensorflow2.1楞件,版本比較老衫生,但確實可以直接用。不過我覺得這個容器的方法不如前面直接裝cuda的方式土浸。
99. troubleshoot
- 據(jù)說WSL2利用了hyper-v障簿,但我并沒有主動安裝hyper-v,不知道是否會有性能差異栅迄。
但我利用:
bcdedit
命令查看信息時,有一條信息是:
hypervisorlaunchtype Auto
如果不是皆怕,則可以執(zhí)行:
bcdedit /set hypervisorlaunchtype auto
不知道是否是系統(tǒng)自動管理hyper-v的意思毅舆,這個沒查到有什么具體影響,沒問題可以先不管愈腾。