首先, DL_Image_Gen这个平台是在1080上顺利运行的, 环境如下
os: ubuntu16.04 LTS
Driver: 384.130
CUDA: 9.0.176
CUDNN: 7.0.5
torch:0.4.0
1. CUDA10
环境如下
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)会出现下面的问题
RuntimeError: cuda runtime error (11) : invalid argument at /pytorch/aten/src/THC/THCGeneral.cpp:844
这个问题出现的原因还是pytorch的版本和CUDA版本对不上的问题, 之前BY在CUDA9.0下面也碰到这个问题, 但不同的是, 虽然同样出现了THCudaCheck FAIL
, 但他的代码在出现了这个error之后还是可以顺利运行过去, 我的就不行
pytorch的论坛和github上, 很多人也都碰到了这个问题, 多数也都是在RTX2080或者2080Ti上, 有建设意见的有两个
https://github.com/1adrianb/face-alignment/issues/123
这个小姐姐最后的解决方案是pytorch源码安装, 其实源码安装也并不复杂, 但问题是
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
我之前确实在程序一开头设置过torch.backends.cudnn.benchmark=False
, 但是还是出现了上面说的问题, 后来又用之前没加distiller那个简化版的DL_Image_Gen来试, 还是不行, 发现在solver.py
里面, cudnn.benchmark=True
, -_-! 改成False之后, Bing! 之前的错误不见了, 但有一个新问题
cublas runtime error: the GPU program failed to execute
这个问题是在运行torch.matmul()
函数的时候出现的
再搜这个问题, 各种牛鬼蛇神又出来了, 靠谱的是这个
https://discuss.pytorch.org/t/bad-cuda-error-when-using-torch-matmul-with-cuda-10-0/36558
一句话, 就是要用在Cuda10下编译出来的pytorch, 而直接装上的那个不知道是在什么环境下编译的, 所以又重新在https://pytorch.org/get-started/previous-versions/下了cu100/torch-1.0.0-cp36-cp36m-linux_x86_64.whl, 装上了之后, 就可以顺利运行了
奇怪的是一点, 就是装了这个版本, 即使是把cudnn.benchmark=True
, 也不会再报之前的THCudaCheck FAIL
问题了, 很干净, 连在BY那儿出现的虽然FAIL但程序依然可以运行的问题都没有
ps: 多说一句, DL_ImageGen的dependencies里面有tensorflow, 而tensorflow是没有cuda10下的官方版本的, 要pip3 install tf-nightly-gpu
, 如果直接pip3 install tf-gpu
的话, 会报错
can’t import “libcublas.so.9.0”
总结一下, 在CUDA10下, 要把DL_Image_Gen跑起来, 其实关键是要在pytorch官网上, 安装对应CUDA10的那个torch版本, 而cudnn.benchmark=True or False
其实并不影响, 下面, 就是要试一下在CUDA9.0的环境下能不能跑起来
2. CUDA9.0
环境如下
os: ubuntu18.04 LTS
Driver: 410.78
CUDA: 9.0.176
CUDNN: 7.0.5
先完全照之前1080上的配置, 然后下pytorch官网的cu90/torch-0.4.0-cp36-cp36m-linux_x86_64.whl, 看能不能跑起来
重新回到CUDA9.0之后, 按照在CUDA10.0上的经验, 我们把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
但是, 出现了CUDA10上也出现过的问题, 就是在运行torch.matmul()
的时候, 出现报错
cublas runtime error : the GPU program failed to execute at /pytorch/aten/src/THC/THCBlas.cu:411
我又在当前的环境下跑了BY的SRGAN和mini DL_Image_Gen中的c3srcnn, 虽然依然有THCudaCheck FAIL
, 但是都可以训练起来
也就是说, 这个版本的pytorch实际上还是有问题, 只能说支持了一部分的cuda上的操作, 但是torch.matmul()
或这torch.mm()
这样的操作在cuda上就会有问题
https://discuss.pytorch.org/t/cublas-runtime-error/11243/7
暂时还没有看到有什么解决方案, 所以现在的状态就是, 在CUDA10上, 用上一章的那套配置确定可以跑起来, 但是CUDA9上, 只要碰到torch.matmul()
就跑不起来, 并且暂时没看到有好的解决方案
下一步, 还是先用CUDA10+torch1.0.0(cuda10上没有编的torch0.4.0的版本)跑起来, 就跑在1080上跑的那个训练, 把torch.backends.cudnn.deterministic = True
也开上, 然后看训练出来的模型的performance差异多大