4. 我的解決
后續(xù)發(fā)現(xiàn)其實(shí)是某張卡有問題,
- 0~3一共4個(gè)GPU,只在使用0號GPU的時(shí)候會出問題
- 0號卡似乎是被某個(gè)進(jìn)程鎖了,還是怎么樣,不用那個(gè)卡就沒事了
其實(shí)不難發(fā)現(xiàn),我報(bào)錯(cuò)的位置基本都是從gpu
往cpu
轉(zhuǎn)換的時(shí)候出現(xiàn)的問題。
- 因此考慮是不是cpu內(nèi)存不太夠了,所以內(nèi)存訪問發(fā)生錯(cuò)誤了
- 由于我使用的是容器,因此在docker-compose或者dockerfile里將配置項(xiàng)改為:
shm_size: 64G → shm_size: 128G
- shm_size,共享內(nèi)存(shared memory)
- 之后就基本不報(bào)錯(cuò)了。。。
1. 錯(cuò)誤描述
例行吐槽,第一次遇到這個(gè)錯(cuò)誤,我是非常無語的。以前是不報(bào)錯(cuò)的,和以前相比,不同的地方有
- 數(shù)據(jù)變多了,從80例變成了100例
- 換了個(gè)docker鏡像,可能pytorch版本和cuda版本上有些問題
- 檢查了代碼,沒有發(fā)生修改
2. 自我嘗試
2.1 減小batch_size
感覺上可能會和顯存有點(diǎn)關(guān)系吧
第一次報(bào)錯(cuò)
- 結(jié)合自己的代碼,我這個(gè)是在第一個(gè)epoch訓(xùn)練完成,validation階段報(bào)的錯(cuò)(line 243)
- 報(bào)錯(cuò)后調(diào)整
batch_size
變?。?0→8),繼續(xù)報(bào)錯(cuò)
- 不過上一步validation的地方已經(jīng)走過去了,line 258報(bào)錯(cuò)
- 說明把batch_size變小是有一定的效果的
按照這個(gè)思路繼續(xù)把batch_size
調(diào)小(8→5),又換了個(gè)位置報(bào)錯(cuò)。。
- line 305報(bào)錯(cuò)
2.2 換卡改代碼
換思路
- 換了張卡,從0卡變到了1卡。。
- 刪除了非必須的CPU和GPU交換數(shù)據(jù)部分的代碼
- 依然報(bào)錯(cuò)
- 用兩張卡,batch_size設(shè)置10,不使用預(yù)訓(xùn)練模型,還是報(bào)錯(cuò)
- 從頭訓(xùn)練,單卡,batch_size=5
- 從頭訓(xùn)練,單卡,batch_size=4
情況好了一點(diǎn),都跑到第8個(gè)epoch了。但是還是斷了
3. 調(diào)研情況
報(bào)錯(cuò)信息是CUDA丟出來的一個(gè)運(yùn)行時(shí)錯(cuò)誤,發(fā)生了非法內(nèi)存訪問。網(wǎng)上關(guān)于這個(gè)問題的討論也很多,但是并沒有發(fā)現(xiàn)有找到真正原因的。
很多都是靠感覺的
參考:文章來源地址http://www.zghlxwxcb.cn/news/detail-797671.html
- pytorch的github issue:RuntimeError: CUDA error: an illegal memory access was encountered
- 這個(gè)回答好像有效的人比較多,一次慘痛的debug的經(jīng)歷-RuntimeError: CUDA error: an illegal memory access was encountered,這個(gè)人就是這么解決的
- 另外還有一些是經(jīng)驗(yàn)論的,
- CSDN博客:[徹底解決]CUDA error: an illegal memory access was encountered(CUDA錯(cuò)誤 非法訪問內(nèi)存)
- yolo的GitHub issue:Cuda illegal memory access when running inference on *.engine #6311
4. 自定義cuda配置
搜索/etc/X11/xorg.conf
文章來源:http://www.zghlxwxcb.cn/news/detail-797671.html
參考:
- https://download.nvidia.com/XFree86/Linux-x86_64/396.51/README/editxconfig.html
- https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#address-custom-xorg-conf-if-applicable
- https://unix.stackexchange.com/questions/200553/multi-nvidia-gpu-overclocking-for-computations-cuda
到了這里,關(guān)于RuntimeError: CUDA error: an illegal memory access was encountered的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!