也许你疑惑过对于自己电脑中的NVIDIA显卡型号,应该装什么CUDA版本的pytroch-gpu。结论是太老或者太新的CUDA版本都不行,一个显卡型号能支持的CUDA版本是一个有限的范围。
首先打开NVIDIA控制面板,点击“帮助->系统信息->组件”,能够看到NVCUDA.dll后面的一个CUDA版本,这个就是当前驱动程序支持的最大CUDA版本,如果你升级了驱动,可能会支持更高的CUDA版本,也可能不会提升。
而当你想跑别人的一份远古pytorch版本的代码时,也许你会发现对于新型号显卡如果安装太老CUDA版本的pytorch-gpu也会无法调用GPU(调用GPU会报错),实际上一个显卡型号支持的CUDA版本也有下限。
具体来说,每种显卡型号具有一个Compute Capability,可以在https://developer.nvidia.com/cuda-gpus查到,一般而言新型号显卡的Compute Capability更高。
可以粗略地认为每个CUDA版本只能支持一定范围的Compute Capability,新的CUDA版本支持的Compute Capability上下限都更高一些,而旧的CUDA版本支持的Compute Capability上下限就低一些。因此过旧的CUDA版本无法支持更新的显卡型号的Compute Capability。
对于一个显卡型号,取所有支持自己的Compute Capability的CUDA版本,就是能够使用的CUDA版本范围了(假设驱动程序为最新,否则驱动程序也决定了所能支持的上限),新出的CUDA版本如果还支持自己的Compute Capability,那么这个范围的上限就会提升(也就是升级驱动后能支持更高的CUDA版本)。
每个pytorch-gpu版本所能匹配的Compute Capability可以在https://github.com/moi90/pytorch_compute_capabilities/blob/main/table.md查到。
而较老的pytorch-gpu版本一般未适配更高的CUDA版本,因此新型号显卡无法用较老的pytorch-gpu版本调用GPU。
建议在选择安装版本前先查询下自己显卡的Compute Capability,假设是8.6,那么再去上面那个匹配表格中Ctrl+F查看sm_86所支持的pytorch-gpu版本。
附上一段检测GPU调用可用性的代码:
import torch
print(torch.cuda.is_available()) # not enough
print(torch.zeros(1).cuda())
import tensorflow as tf
import tensorflow.keras # 为了能用tf.keras
print(tf.config.list_physical_devices('GPU'))
参考资料: