Pytorch深度學習踩坑記錄


寫這篇博文的主要目的是記錄一下在使用Pytorch做深度學習項目時踩的一些坑,警醒自己,幫助他人😁😀

1 RuntimeError: No CUDA GPUs are available

明明有GPU,而且我的CUDA也裝好了,怎么會出這么個錯誤呢?
為了確保我的顯卡和CUDA都沒問題,我試了下這個:

import torch
torch.cuda.device_count()
# 1
torch.cuda.is_available()
# True

我又試了下這個:nvidia-smi,也是正常的,那是為什么呢?😦
幾經輾轉,可能是os.environ['CUDA_VISIBLE_DEVICES']設置的問題,可以使用nvidia-smi查看自己的顯卡的編號,例如我有兩張顯卡,編號為0,1,那么則設置:os.environ['CUDA_VISIBLE_DEVICES'] = "0,1",問題解決😜


2. RuntimeError: CUDA out of memory. Tried to allocate xxx (GPU 0; xxx total capacity; xxx already allocated; xxx free; 7.43 reserved in total by PyTorch)

出現這么個問題,很顯然,CPU的現存不夠了!😭
要解決這個問題有一個很簡單粗暴的方法:加顯卡!或者換個現存更大的顯卡!那么如果沒💰呢?

  • 減小訓練數據的batch_size
  • 一個可能有用的方法:torch.cuda.empty_cache()。關於這個方法的一些情況可以在About torch.cuda.empty_cache()了解
  • 如果你的CPU、內存很強的化,試試在CPU上訓練模型

3. To use CUDA with multiprocessing, you must use the 'spawn' start method

這個錯誤出現在我使用多進程利用CUDA進行訓練的時候。
光從報錯來看,似乎提到了該怎么解決這個問題:use the 'spawn' start method,但咋一看還是摸不清頭腦,具體該怎么解決這個問題呢?

import torch.multiprocessing as mp

mp.set_start_method('spawn')

if __name__ == "__main__":
	...
	model = ...
	data = ...
	train(model, data)
	...

關於在pytorch中使用多進程,可以參考官方的說明:MULTIPROCESSING BEST PRACTICES,這這個說明里還給出了一個完整的例子:example


4. RuntimeError: CUDA error: initialization error

錯誤來自使用gpu訓練模型時,當時使用的是dgl框架訓練圖神經網絡,使用了其中的NodeDataLoader加載節點數據,先是報了Caught RuntimeError in DataLoader worker process 0.的bug,接着就報了CUDA error: initialization error,報錯的棧幀如圖:

NodeDataLoader初始化時,有一個num_workers參數,我設置為了4,改成默認值(0)后這個bug就消失了。從錯誤信息來看,應該是CUDA的初始化問題,而且把num_workers設置為默認值后就正常了,猜測是因為多線程操作問題導致的,具體的沒有進行深究,但是在github上找到了這個問題 CUDA error (3): initialization error (multiprocessing) #2517


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM