問題
今天在跑程式碼的時候,使用到了wandb記錄訓練資料。
我在23伺服器上跑的好好的,但將環境遷移到80伺服器上重新開始跑時,卻遇到了如下報錯
看這個報錯資訊是由於wandb沒有apis這個屬性,於是我定位到具體的報錯程式碼
?原來程式在import wandb時就丟擲異常了。
解決方法
我嘗試驗證是報錯的原因在於程式匯入wandb不成功而導致報錯。
因此,我在終端開啟python直譯器,執行import wandb
,果然出現了一模一樣的報錯資訊
既然是wandb庫的原因,一個很自然的想法便是對比27和80伺服器上兩個wandb庫的版本號。
23伺服器上wandb的版本號為0.15.11
80伺服器上wandb的版本號為0.15.12
我抱著試試看的心態將80伺服器上wandb的版本號更換為0.15.11,然後再次執行程式,成功!
pip install wandb==0.15.11
版本號不同的原因
事後,我思考了一下為什麼會導致版本號不同。首先我利用27上匯出的yml檔案在80上建立環境,即用conda env create -f mdistiller.yml
而該yml檔案中wandb的版本號是正確的0.15.11
但後來我在透過該yml檔案安裝pytorch時中斷了,因此使用pip install
單獨安裝了pytorch。
然而pytorch安裝中斷會導致在pytorch之後剩下的包沒有安裝。所以,我使用了程式碼庫的requirements.txt對剩下的包進行安裝。
結果我看了下requirement.txt中的wandb並沒有指定版本號,這就導致了安裝的wandb為0.15.12版本
至於為什麼透過yml檔案在安裝pytorch時會中斷,我想可能是因為我當初安裝pytorch時使用了pip而不是conda安裝