一、問題描述
????????今天在調(diào)試模型的代碼,然后代碼一直運行得好好地,就突然出現(xiàn)了一下的錯誤:
RuntimeError: CUDA error: invalid device ordinal
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
? ? ? ? 覺得十分詭異,前面運行的時候沒出現(xiàn)這個Error,但是后面點擊運行的時候就出現(xiàn)了,而且多次點擊運行,都會報的這個錯。
? ? ? ? 上面的錯誤大概就是說我的CUDA設備序號出錯。例如,訓練模型的機器上只有4張顯卡,那么CUDA設備序號分別是0、1、2、3。當你在程序中使用4、5或者更加大的數(shù)字時,這個錯誤信息就會自動地報出來。
? ? ? ? 令我覺得詭異的地方是,在我運行模型的機器中,明明有4個可以使用的CUDA設備,也就是擁有4張顯卡,而我不能使用1、2、3對應的CUDA設備,然后就報了上面的這個錯誤。所以我覺得十分奇怪。
二、解決方法
????????首先,我觀察了我設置程序使用CUDA設備的代碼:
os.environ['CUDA_VISIBLE_DEVICES'] = '%d' % m_gpu
torch.cuda.set_device(m_gpu)
torch.cuda.is_available()
torch.cuda.current_device()
? ? ? ? 其中上邊的m_gpu是設置CUDA設備序號的變量。
????????然后我發(fā)現(xiàn)在設置CUDA設備序號時,如果調(diào)用了下面的代碼,就不會出現(xiàn)上門的報錯信息:
torch.cuda.device_count()
? ? ? ? 最終,設置CUDA設備序號的代碼改為:
torch.cuda.device_count()
os.environ['CUDA_VISIBLE_DEVICES'] = '%d' % m_gpu
torch.cuda.set_device(m_gpu)
torch.cuda.is_available()
torch.cuda.current_device()
? ? ? ? 這樣就解決了我上面所遇到的問題。
三、設備信息
? ? ? ? NVIDIA驅(qū)動:NVIDIA-SMI 515.65.01 ? ?Driver Version: 515.65.01 ? ?CUDA Version: 11.7
? ? ? ? Python版本:Python 3.6.9
? ? ? ? PyTorch版本:1.10.2文章來源:http://www.zghlxwxcb.cn/news/detail-784726.html
? ? ? ? Linux系統(tǒng):Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-041500-generic x86_64)文章來源地址http://www.zghlxwxcb.cn/news/detail-784726.html
到了這里,關于一行代碼解決PyTorch訓練模型時突然出現(xiàn)的For debugging consider passing CUDA_LAUNCH_BLOCKING=1報錯的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!