Windows10 子系統 WSL 位置遷移問題_wsl --import 未指定的錯誤

钢之炼丹术师發表於2024-05-19

CSDN搬家失敗,手動匯出markdown後再匯入部落格園

最近想體驗下世界上最好的 Linux 發行版 Win10(bushi),拿來深度學習煉丹,所以參考了在 WSL2 中使用 CUDA 提到的方法安裝。

列舉下遇到的問題:

1 Windows 預覽版本沒響應

按理說在設定 - 更新和安全 - Windows 預覽體驗計劃裡面註冊後,就能直接更新 insider preview 版本的作業系統,但是我試了幾次都沒用,所以直接去微軟官網下載 iso 映象 https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewiso,在下拉框選擇版本,注意要安裝 cuda 的話英偉達要求 windows 版本為 Build 20145 或更高,所以選擇 dev channel。

這裡吐槽一下微軟的伺服器,下載真滴慢,不到 200k,而且下載連結有時限,好像是 12 小時,折騰了半天最後是用海外的 VPS 離線下載完轉發回來的,Windows10_InsiderPreview_Client_x64_zh-cn_21286.iso。

![[output/attachments/a05f4facbd6a6e5ffe2e0138a664ed77_MD5.png]]

下載完直接安裝即可,有機率失敗回滾,多試幾次。。。

使用映象安裝之後設定 - 更新和安全 - Windows 預覽體驗計劃就會變成正常的狀態。

2 CUDA on WSL 驅動安裝

CUDA on WSL 驅動下載地址

https://developer.nvidia.com/cuda/wsl

根據自己的 GPU 型別(GeForce and Quadro) 選擇對應的驅動。

我的桌上型電腦顯示卡是 2070s,就下載 GeForce 驅動。

不需要在 wsl 下安裝 nvidia 驅動,windows 會自動為 wsl 安裝 nvidia 驅動!

不需要在 wsl 下安裝 nvidia 驅動,windows 會自動為 wsl 安裝 nvidia 驅動!

不需要在 wsl 下安裝 nvidia 驅動,windows 會自動為 wsl 安裝 nvidia 驅動!

3 WSL2 安裝

WSL2 的具體安裝方法參看微軟官方指南:適用於 Linux 的 Windows 子系統安裝指南 (Windows 10),非常簡單。

這裡有個大坑,Ubuntu 是強制安裝在 C 盤的,如果想長期用 wsl2 的話,絕大多數人的 C 盤容量肯定不夠用。

為了把 wsl 轉移到 E 盤,我找到了 LxRunOffline 這個工具,LxRunOffline 使用教程 - WSL 自定義安裝、備份,裡面提到可以直接將安裝在 C 盤的 wsl 移動到任意位置。

但是在使用

wsl --terminate <DistritubtionName>  # 先關閉相關的分發,以免後續造成不必要的問題
wsl --export <DistributionName> <FileName>  # 匯出Linux子系統
wsl --unregister Ubuntu-18.04  # 登出這個分發
wsl --import <DistributionName> <InstallLocation> <FileName>  # 匯入/還原之前的分發版本

命令後報錯,LxRunOffline 遷移 wsl 失敗 Indicates that the directory trying to be deleted is not empty.

谷歌查到 LxRunOffline 專案的 Issue,https://github.com/DDoSolitary/LxRunOffline/issues/150,發現是 win 某個版本更新後出現了這個問題。

查了半天發現 wsl 本身就有備份還原的功能,Windows10 Linux 子系統安裝 / 遷移到非系統盤提到

sudo apt update
sudo apt install build-essential

重新匯入後的 Linux 分發版不再以 APP 的形式出現於開始選單中:

這樣操作以後不能像原來一樣在開始選單點選圖示啟動此 Linux 分發,其他並未改變。可以透過 wsl -s Ubuntu 命令、Windows terminal 程式等方式啟動。或者將其設為預設分發版,透過 wsl、bash 啟動。

另一方面,不能像原來那樣在應用商店裡更新。

不存在原來那樣的 Ubuntu804.exe 這樣的命令。

實際上我操作後發現重新匯入的 Linux 分發版跟 Windows 商店下載的完全一樣,沒有任何變化(沒試過能不能在商店更新) ,可以直接透過開始選單點選圖示啟動。

當然這麼修改之後啟動 Linux 是預設用 root 賬戶的,可以透過以下步驟來改成普通使用者:

檢視使用者 UID ,一般是 1000

tar -zxvf cudnn-11.2-linux-x64-v8.1.0.77.tgz
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-11.0/lib64/
sudo cp  cuda/include/cudnn.h /usr/local/cuda-11.0/include/

然後在 PowerShell 中使用 LxRunOffine 直接修改預設使用者

sudo chmod a+r /usr/local/cuda-11.0/include/cudnn.h 
sudo chmod a+r /usr/local/cuda-11.0/lib64/libcudnn*

4 安裝 cuda

直接去英偉達官網下載想用的版本,這裡建議選擇 run 檔案,簡單方便。

如果安裝 cuda 的時候報錯,一般是缺少編譯環境,用下面命令安裝後重試。

cd /usr/local/cuda/samples/4_Finance/BlackScholes
sudo make
./BlackScholes

![[output/attachments/f6f8b3a999421d8700872fe33d09346f_MD5.png]]

cuda 安裝完之後,一定會顯示 Driver not selected,正常。

5 安裝 cuDNN

其實後面的就跟普通的 Linux 安裝 TensorFlow-GPU 一樣了。

下載 cuDNN,https://developer.nvidia.com/cudnn

tar -zxvf cudnn-11.2-linux-x64-v8.1.0.77.tgz
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-11.0/lib64/
sudo cp  cuda/include/cudnn.h /usr/local/cuda-11.0/include/

設定讀寫許可權

sudo chmod a+r /usr/local/cuda-11.0/include/cudnn.h 
sudo chmod a+r /usr/local/cuda-11.0/lib64/libcudnn*

要驗證的話,去 cuda 安裝目錄下面編譯一個 sample 即可。

cd /usr/local/cuda/samples/4_Finance/BlackScholes
sudo make
./BlackScholes

出現 Test Passed

![[output/attachments/9a90dc1596f824ebb4c90d18d7bdd4a4_MD5.png]]

6 後續

再然後就是熟悉的套路了,要麼安裝 anaconda,要麼用 docker,常規操作。

相關文章