如何检查Pytork是否正在使用GPU?

2024-06-09 18:33:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道pytorch是否正在使用我的GPU。可以用nvidia-smi检测在这个过程中是否有来自GPU的任何活动,但是我想要用python脚本编写一些东西

有没有办法做到这一点


Tags: 脚本gpu过程pytorchnvidiasmi办法
3条回答

开始运行训练循环后,如果您想从终端手动观察程序是否在使用GPU资源以及使用的程度,则只需使用watch,如下所示:

$ watch -n 2 nvidia-smi

这将每隔2秒持续更新使用情况统计信息,直到您按下ctrl+c


如果您需要对可能需要的更多GPU统计数据进行更多控制,可以使用more sophisticated version of ^{} with ^{}。下面是一个简单的例子:

$ watch -n 3 nvidia-smi --query-gpu=index,gpu_name,memory.total,memory.used,memory.free,temperature.gpu,pstate,utilization.gpu,utilization.memory --format=csv

这将输出类似以下的统计信息:

enter image description here

注意:在--query-gpu=...中以逗号分隔的查询名称之间不应存在任何空格。否则这些值将被忽略,并且不会返回任何统计信息


此外,您还可以通过执行以下操作检查PyTorch安装是否正确检测到CUDA安装:

In [13]: import  torch

In [14]: torch.cuda.is_available()
Out[14]: True

True状态意味着PyTorch配置正确,并且使用GPU,尽管您必须在代码中移动/放置带有必要语句的张量


如果要在Python代码中执行此操作,请查看此模块:

https://github.com/jonsafari/nvidia-ml-py或在pypi中,此处:https://pypi.python.org/pypi/nvidia-ml-py/

由于这里没有提出,我添加了一个使用^{}的方法,因为这非常方便,在正确的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

如上所述,使用device可以执行以下操作:

  • 张量移动到相应的device:

      torch.rand(10).to(device)
    
  • 直接在^{上创建一个张量:

      torch.rand(10, device=device)
    

这使得在CPUGPU之间的切换非常舒适,无需更改实际代码


编辑:

由于对缓存的分配的内存存在一些问题和困惑,我将添加一些关于它的附加信息:

  • ^{}

    返回缓存分配器管理的最大GPU内存(以字节为单位) 给定设备

  • ^{}

    返回给定设备的当前GPU内存使用量(以字节为单位)


您可以直接将device交给帖子中进一步指定的人,也可以将其保留为,然后它将使用^{}


附加说明:具有Cuda计算能力3.0或更低版本的旧图形卡可能可见,但Pytorch无法使用
感谢hekimgil指出这一点“发现GPU0 GeForce GT 750M具有cuda能力3.0。PyTorch不再支持此GPU,因为它太旧了。我们支持的最小cuda能力为3.5。”

这应该起作用:

import torch

torch.cuda.is_available()
>>> True

torch.cuda.current_device()
>>> 0

torch.cuda.device(0)
>>> <torch.cuda.device at 0x7efce0b03be0>

torch.cuda.device_count()
>>> 1

torch.cuda.get_device_name(0)
>>> 'GeForce GTX 950M'

这告诉我CUDA是可用的,可以在您的一个设备(GPU)中使用。目前,Device 0或GPUGeForce GTX 950M正被PyTorch使用

相关问题 更多 >