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

Python 如何检查Pytork是否正在使用GPU?,python,memory-management,gpu,nvidia,pytorch,Python,Memory Management,Gpu,Nvidia,Pytorch,我想知道Pytork是否正在使用我的GPU。使用nvidiasmi可以检测在这个过程中是否有来自GPU的任何活动,但是我想要用python脚本编写一些东西 有办法吗?这应该可以: import torch torch.cuda.is_available() >>> True torch.cuda.current_device() >>> 0 torch.cuda.device(0) >>> <torch.cuda.device a

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

有办法吗?

这应该可以:

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'
导入火炬
torch.cuda.U是否可用()
>>>真的
torch.cuda.CUU当前设备()
>>> 0
火炬.cuda.装置(0)
>>> 
torch.cuda.device_count()
>>> 1
torch.cuda.get_设备_名称(0)
>>>“GeForce GTX 950M”
这告诉我GPU
GeForce GTX 950M
正在被
PyTorch
使用,这应该可以工作:

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'
导入火炬
torch.cuda.U是否可用()
>>>真的
torch.cuda.CUU当前设备()
>>> 0
火炬.cuda.装置(0)
>>> 
torch.cuda.device_count()
>>> 1
torch.cuda.get_设备_名称(0)
>>>“GeForce GTX 950M”

这告诉我,在开始运行训练循环后,
PyTorch

正在使用GPU
GeForce GTX 950M
,如果您想从终端手动观察程序是否在使用GPU资源以及使用到什么程度,那么您可以简单地使用
watch
,如下所示:

$ watch -n 2 nvidia-smi
这将每隔2秒持续更新使用情况统计信息,直到您按ctrl+c


如果您需要更多的GPU统计数据控制,您可以使用。下面是一个简单的例子:

$ 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
这将输出类似以下的统计信息:

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


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

In [13]: import  torch

In [14]: torch.cuda.is_available()
Out[14]: True
True
状态意味着PyTorch配置正确,并且使用GPU,尽管您必须在代码中移动/放置带有必要语句的张量


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


或者在这里的pypi中:

在开始运行训练循环后,如果您想从终端手动观察程序是否正在使用GPU资源以及使用的程度,那么您可以简单地使用
观察
,如下所示:

$ watch -n 2 nvidia-smi
这将每隔2秒持续更新使用情况统计信息,直到您按ctrl+c


如果您需要更多的GPU统计数据控制,您可以使用。下面是一个简单的例子:

$ 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
这将输出类似以下的统计信息:

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


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

In [13]: import  torch

In [14]: torch.cuda.is_available()
Out[14]: True
True
状态意味着PyTorch配置正确,并且使用GPU,尽管您必须在代码中移动/放置带有必要语句的张量


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


或者在pypi中:

在GPU上创建一个张量,如下所示:

$ python
>>> import torch
>>> print(torch.rand(3,3).cuda()) 
不要退出,打开另一个终端并检查python进程是否正在使用GPU,方法是:

$ nvidia-smi

在GPU上创建张量,如下所示:

$ python
>>> import torch
>>> print(torch.rand(3,3).cuda()) 
不要退出,打开另一个终端并检查python进程是否正在使用GPU,方法是:

$ nvidia-smi

在office站点和get start页面上,检查PyTorch的GPU,如下所示:

import torch
torch.cuda.is_available()

参考资料:

在办公网站和get start页面上,检查PyTorch的GPU,如下所示:

import torch
torch.cuda.is_available()

参考资料:

因为这里没有提出,所以我添加了一个方法,在正确的
设备
上初始化张量时也可以使用,因为这非常方便

# 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\u cached
已重命名为
torch.cuda.memory\u reserved
。因此,对于较旧的版本,请使用缓存的
内存

输出:

  torch.rand(10).to(device)
  torch.rand(10, device=device)
如上所述,使用
设备
可以:

  • 将张量移动到相应的
    设备

      torch.rand(10).to(device)
    
      torch.rand(10, device=device)
    
  • 直接在
    设备上创建张量

      torch.rand(10).to(device)
    
      torch.rand(10, device=device)
    
这使得在CPUGPU之间的切换非常舒适,无需更改实际代码


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



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



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


您可以直接将
设备
交给本帖上文进一步指定的用户,也可以将其保留为,然后使用



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

由于这里没有提出,我添加了一种方法,因为这非常方便,在正确的
设备上初始化张量时也使用

# 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\u cached
已重命名为
torch.cuda.memory\u reserved
。因此,对于较旧的版本,请使用缓存的
内存

输出:

  torch.rand(10).to(device)
  torch.rand(10, device=device)
如上所述,使用
设备
可以:

  • 将张量移动到相应的
    设备

      torch.rand(10).to(device)
    
      torch.rand(10, device=device)
    
  • 直接在
    dev上创建张量