報錯AttributeError: Attempted to set WANDB to False, but CfgNode is immutable

littletreee發表於2023-10-05

問題

 今天在跑程式碼的時候,使用到了wandb記錄訓練資料。
 我在23伺服器上跑的好好的,但將環境遷移到80伺服器上重新開始跑時,卻遇到了如下報錯
image

 看這個報錯資訊是由於wandb沒有apis這個屬性,於是我定位到具體的報錯程式碼
image
 ?原來程式在import wandb時就丟擲異常了。

解決方法

 我嘗試驗證是報錯的原因在於程式匯入wandb不成功而導致報錯
 因此,我在終端開啟python直譯器,執行import wandb,果然出現了一模一樣的報錯資訊
image
 既然是wandb庫的原因,一個很自然的想法便是對比27和80伺服器上兩個wandb庫的版本號。
 23伺服器上wandb的版本號為0.15.11
image
 80伺服器上wandb的版本號為0.15.12
image
 我抱著試試看的心態將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。
image

然而pytorch安裝中斷會導致在pytorch之後剩下的包沒有安裝。所以,我使用了程式碼庫的requirements.txt對剩下的包進行安裝。

 結果我看了下requirement.txt中的wandb並沒有指定版本號,這就導致了安裝的wandb為0.15.12版本
image

至於為什麼透過yml檔案在安裝pytorch時會中斷,我想可能是因為我當初安裝pytorch時使用了pip而不是conda安裝

相關文章