??首先, DL_Image_Gen這個平臺是在1080上順利運行的, 環(huán)境如下
os: ubuntu16.04 LTS
Driver: 384.130
CUDA: 9.0.176
CUDNN: 7.0.5
torch:0.4.0
1. CUDA10
環(huán)境如下
os: ubuntu18.04 LTS
Driver: 410.78
CUDA: 10.0.130
CUDNN: 7.4.2
??開始的時候, 裝torch是直接pip3 install torch, 裝上的是1.0.1版本, 這個時候跑RNAN(in DL_Image_Gen)會出現(xiàn)下面的問題
RuntimeError: cuda runtime error (11) : invalid argument at /pytorch/aten/src/THC/THCGeneral.cpp:844
??這個問題出現(xiàn)的原因還是pytorch的版本和CUDA版本對不上的問題, 之前BY在CUDA9.0下面也碰到這個問題, 但不同的是, 雖然同樣出現(xiàn)了THCudaCheck FAIL
, 但他的代碼在出現(xiàn)了這個error之后還是可以順利運行過去, 我的就不行
??pytorch的論壇和github上, 很多人也都碰到了這個問題, 多數(shù)也都是在RTX2080或者2080Ti上, 有建設(shè)意見的有兩個
https://github.com/1adrianb/face-alignment/issues/123
??這個小姐姐最后的解決方案是pytorch源碼安裝, 其實源碼安裝也并不復(fù)雜, 但問題是
Makefile:127: recipe for target 'all' failed
??這個坑我過不去, 上面csdn那篇博客上說降級gcc/g++到4.9, 但試了一下gcc/g++的4.9版本沒法通過sudo apt-get install
直接裝, 裝4.9,5.5都不好使, 所以這條路斷絕了
??另外一個
https://discuss.pytorch.org/t/thcudacheck-fail-file-pytorch-aten-src-thc-thcgeneral-cpp/31788/6
torch.backends.cudnn.benchmark=False
??我之前確實在程序一開頭設(shè)置過torch.backends.cudnn.benchmark=False
, 但是還是出現(xiàn)了上面說的問題, 后來又用之前沒加distiller那個簡化版的DL_Image_Gen來試, 還是不行, 發(fā)現(xiàn)在solver.py
里面, cudnn.benchmark=True
, -_-! 改成False之后, Bing! 之前的錯誤不見了, 但有一個新問題
cublas runtime error: the GPU program failed to execute
??這個問題是在運行torch.matmul()
函數(shù)的時候出現(xiàn)的
??再搜這個問題, 各種牛鬼蛇神又出來了, 靠譜的是這個
https://discuss.pytorch.org/t/bad-cuda-error-when-using-torch-matmul-with-cuda-10-0/36558
??一句話, 就是要用在Cuda10下編譯出來的pytorch, 而直接裝上的那個不知道是在什么環(huán)境下編譯的, 所以又重新在https://pytorch.org/get-started/previous-versions/下了cu100/torch-1.0.0-cp36-cp36m-linux_x86_64.whl, 裝上了之后, 就可以順利運行了
??奇怪的是一點, 就是裝了這個版本, 即使是把cudnn.benchmark=True
, 也不會再報之前的THCudaCheck FAIL
問題了, 很干凈, 連在BY那兒出現(xiàn)的雖然FAIL但程序依然可以運行的問題都沒有
??ps: 多說一句, DL_ImageGen的dependencies里面有tensorflow, 而tensorflow是沒有cuda10下的官方版本的, 要pip3 install tf-nightly-gpu
, 如果直接pip3 install tf-gpu
的話, 會報錯
can’t import “l(fā)ibcublas.so.9.0”
??總結(jié)一下, 在CUDA10下, 要把DL_Image_Gen跑起來, 其實關(guān)鍵是要在pytorch官網(wǎng)上, 安裝對應(yīng)CUDA10的那個torch版本, 而cudnn.benchmark=True or False
其實并不影響, 下面, 就是要試一下在CUDA9.0的環(huán)境下能不能跑起來
2. CUDA9.0
環(huán)境如下
os: ubuntu18.04 LTS
Driver: 410.78
CUDA: 9.0.176
CUDNN: 7.0.5
??先完全照之前1080上的配置, 然后下pytorch官網(wǎng)的cu90/torch-0.4.0-cp36-cp36m-linux_x86_64.whl, 看能不能跑起來
??重新回到CUDA9.0之后, 按照在CUDA10.0上的經(jīng)驗, 我們把cudnn.benchmark=False
, 并且安裝pytorch提供的在CUDA9.0下編譯出來的0.4.0版本, 運行RNAN的時候, 沒有再報之前的
RuntimeError: cuda runtime error (11) : invalid argument at /pytorch/aten/src/THC/THCGeneral.cpp:844
??但是, 出現(xiàn)了CUDA10上也出現(xiàn)過的問題, 就是在運行torch.matmul()
的時候, 出現(xiàn)報錯
cublas runtime error : the GPU program failed to execute at /pytorch/aten/src/THC/THCBlas.cu:411
??我又在當(dāng)前的環(huán)境下跑了BY的SRGAN和mini DL_Image_Gen中的c3srcnn, 雖然依然有THCudaCheck FAIL
, 但是都可以訓(xùn)練起來
??也就是說, 這個版本的pytorch實際上還是有問題, 只能說支持了一部分的cuda上的操作, 但是torch.matmul()
或這torch.mm()
這樣的操作在cuda上就會有問題
https://discuss.pytorch.org/t/cublas-runtime-error/11243/7
??暫時還沒有看到有什么解決方案, 所以現(xiàn)在的狀態(tài)就是, 在CUDA10上, 用上一章的那套配置確定可以跑起來, 但是CUDA9上, 只要碰到torch.matmul()
就跑不起來, 并且暫時沒看到有好的解決方案
??下一步, 還是先用CUDA10+torch1.0.0(cuda10上沒有編的torch0.4.0的版本)跑起來, 就跑在1080上跑的那個訓(xùn)練, 把torch.backends.cudnn.deterministic = True
也開上, 然后看訓(xùn)練出來的模型的performance差異多大