如何检查PyTorch是否使用GPU?nvidia-smi命令可以检测GPU活动,但我想直接从Python脚本中检查它。
当前回答
由于这里没有提出,我添加了一个使用torch.device的方法,因为这非常方便,在正确的设备上初始化张量时也是如此。
# setting device on GPU if available, else CPU
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print('Using device:', device)
print()
#Additional Info when using cuda
if device.type == 'cuda':
print(torch.cuda.get_device_name(0))
print('Memory Usage:')
print('Allocated:', round(torch.cuda.memory_allocated(0)/1024**3,1), 'GB')
print('Cached: ', round(torch.cuda.memory_reserved(0)/1024**3,1), 'GB')
编辑:torch.cuda。Memory_cached已重命名为torch.cuda.memory_reserved。因此,对于旧版本使用memory_cached。
输出:
Using device: cuda
Tesla K80
Memory Usage:
Allocated: 0.3 GB
Cached: 0.6 GB
如上所述,使用设备可以:
将张量移动到相应的设备: torch.rand(10),(设备) 直接在设备上创建一个张量: 火炬。兰特(10,设备=设备)
这使得CPU和GPU之间的切换舒适,而不改变实际的代码。
编辑:
由于有一些问题和困惑的缓存和分配内存,我添加了一些关于它的额外信息:
max_memory_cached(device=None)返回缓存分配器管理的最大GPU内存,单位为字节 鉴于设备。 memory_allocated(device=None)返回给定设备的当前GPU内存使用情况(以字节为单位)。
你可以直接移交一个设备,就像上面提到的那样,或者你可以让它为None,它将使用current_device()。
附加注意:旧的图形卡与Cuda计算能力3.0或更低可能是可见的,但不能被Pytorch使用!感谢hekimgil指出这一点!“发现了GPU0 GeForce GT 750M, cuda能力3.0。PyTorch不再支持这个GPU,因为它太老了。我们支持的cuda最低能力是3.5。”
其他回答
查询是否有可用的GPU。
torch.cuda.is_available()
如果上面的函数返回False,
你要么没有GPU, 或者没有安装Nvidia驱动程序,所以OS看不到GPU, 或者GPU被环境变量CUDA_VISIBLE_DEVICES隐藏。当CUDA_VISIBLE_DEVICES的值为-1时,将隐藏所有设备。你可以用下面这行代码检查这个值:os.environ['CUDA_VISIBLE_DEVICES']
如果上面的函数返回True,这并不一定意味着你正在使用GPU。在Pytorch中,您可以在创建设备时将张量分配给它们。默认情况下,张量被分配给cpu。要检查张量的分配位置,请执行以下操作:
# assuming that 'a' is a tensor created somewhere else
a.device # returns the device where the tensor is allocated
注意,您不能操作在不同设备中分配的张量。要了解如何将张量分配给GPU,请参见这里:https://pytorch.org/docs/stable/notes/cuda.html
在官方网站的入门页面,你可以像这样检查PyTorch的GPU是否可用:
import torch
torch.cuda.is_available()
参考:PyTorch | Get Started
Query | Command |
---|---|
Does PyTorch see any GPUs? | torch.cuda.is_available() |
Are tensors stored on GPU by default? | torch.rand(10).device |
Set default tensor type to CUDA: | torch.set_default_tensor_type(torch.cuda.FloatTensor) |
Is this tensor a GPU tensor? | my_tensor.is_cuda |
Is this model stored on the GPU? | all(p.is_cuda for p in my_model.parameters()) |
如果你使用的是Linux,我建议安装nvtop https://github.com/Syllo/nvtop
你会得到这样的结果:
步骤1:导入火炬库
import torch
#步骤2:创建张量
tensor = torch.tensor([5, 6])
#步骤3:查找设备类型
#输出1:在下面的输出中,我们可以得到size(tensor.shape), dimension(tensor.ndim), #和处理张量的设备
tensor, tensor.device, tensor.ndim, tensor.shape
(tensor([5, 6]), device(type='cpu'), 1, torch.Size([2]))
#or
#输出2:在下面,输出我们可以得到的唯一设备类型
tensor.device
device(type='cpu')
#由于我的系统使用cpu处理器“第11代英特尔(R)酷睿(TM) i5-1135G7 @ 2.40GHz 2.42 GHz”
#find,如果张量处理GPU?
print(tensor, torch.cuda.is_available()
# the output will be
tensor([5, 6]) False
#上面的输出是假的,因此它不在gpu上
#快乐编码:)
推荐文章
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列
- 熊猫在每组中获得最高的n个记录
- 熊猫数据帧得到每组的第一行