我挖掘了两个隐藏概念:GPU设备索引和CUDA设备索引,大家明白了这两个概念的区别,我相信大家对PyTorch的喜欢会更加多一点,因为了解越多,兴趣越浓,喜欢变多。
虽然在PyToch里面使用CPU的方是.cpu,但是使用GPU的方法叫做.cuda而不是.gpu。这是因为GPU的编程接口目前PyTorch采用的是英伟达CUDA,而目前并不是所有的GPU都支持CUDA,只有部分英伟达的GPU才支持。
据说,PyTorch未来可能会支持AMD的GPU,而AMD GPU的编程接口采用OpenCL,因此PyTorch还预留着.cl方法,用于以后支持AMD等的GPU。
CUDA设备索引与GPU设备索引是两个非常容易混淆的东西。如下代码所示:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
上面的0表示GPU设备索引,它是通过nvidia-smi命令可以获得。而下面代码的0则表示不同的含义:
import torch
print(torch.cuda.get_device_name(0))
print(torch.cuda.get_device_properties(0))
上面的0表示CUDA设备索引,出自torch.device类,大家可以查看《PyTorch面试精华》中关于device的相关小节。
根据CUDA设备索引,我们可以获取GPU的名字和属性,如下所示:
import torch
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))
print(torch.cuda.current_device())
print(torch.cuda.get_device_properties(0))
输出结果为:
True
1
NVIDIA GeForce RTX 4090 Laptop GPU
0
_CudaDeviceProperties(name="NVIDIA GeForce RTX 4090 Laptop GPU", major=8, minor=9, total_memory=16375MB, multi_processor_count=76)