0.问题描述
??之前用自己的主机跑深度学习模型的时候,模型载入到显存很慢(基本上2-3s才load1M),之前也查了很多资料,有怀疑过cuda版本和驱动问题,但是经过一番验证,发现“没问题”,这个问题也搁置了一段时间,想着慢就慢点吧。
??但是“欠的账是要还的”,这不是赶上了。今天在复现别人的模型时,别人使用的是pytorch_lightning来实现的,里面有个valid_sanity来进行训练前的校验,以避免训练了半天发现,代码有问题,就在这阶段,出现了下面的warning:
NVIDIA GeForce RTX 3060 with CUDA capability sm_86 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 compute_37. If you want to use the NVIDIA GeForce RTX 3060 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/pytorch.org
刚开始,我觉得仅仅是warning,应该没事,继续训练下去,结果很快就报错了:
RuntimeError: cublas runtime error :cu:***
1.问题分析
??之前没用pytorch_lightning,仅仅表现模型载入慢,没有报错;这次有报错,所以解决起来也比较有头绪,通过 高版本的RTX3090不能支持低版本的cuda10.0 这个博客发现仅仅通过nvidia-smi来查看自己的显卡驱动支持的最高cuda版本来选择自己cuda版本存在一定的局限性,尤其针对一些消费级显卡(诸如GeForce RTX 3060这类)。我们应当还应该结合自身的显卡型号来确定合适的cuda版本,其中nvidia官方提供了显卡的型号对应的运算能力,有需要可自行查询。
2.解决办法
??知道问题后就好办了,显卡显然短时间无法改变,那么只能让cuda去适配显卡了,在pytorch官网上去寻找自己要安装的torch版本,然后再安装合适的cuda版本,个人总结的经验是通过nvidia-smi去查看自己驱动最高支持的cuda版本号,然后适当的降低点就行了,比如我的显卡最高支持11.4:
再结合我需要安装torch==1.7.1,可以选择最接近11.4的cuda:
至此,这个问题就解决了,over.
3.总结
??因为之前是在别的服务器上跑,服务器上装的cuda是10.*,所以在自己主机上也安装这个cuda版本,但是忽略了两个显卡是不一样的,架构也是不一样的。前面也是折腾来折腾去,又是显卡驱动和cuda版本,又是怀疑是不是装系统装的有问题,又或者是硬件读写的问题。最后才发现是nvidia针对不同显卡有不同架构,cuda的适配也是不同的,torch.cuda.is_available()不能全信,说到底还是自己对硬件的底层支持了解的太少,且行且学习吧!