如何检查PyTorch是否使用GPU?nvidia-smi命令可以检测GPU活动,但我想直接从Python脚本中检查它。
当前回答
这里几乎所有的答案都引用torch.cuda.is_available()。然而,这只是硬币的一部分。它告诉你GPU(实际上是CUDA)是否可用,而不是它是否实际被使用。在一个典型的设置中,你会像这样设置你的设备:
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
但在更大的环境中(例如研究),通常也会给用户更多的选择,因此根据输入,他们可以禁用CUDA,指定CUDA id,等等。在这种情况下,是否使用GPU不仅仅取决于GPU是否可用。在设备被设置为torch设备之后,您可以获取它的type属性来验证它是否是CUDA。
if device.type == 'cuda':
# do something
其他回答
如果你在这里是因为你的pytorch总是给torch.cuda.is_available() False,那可能是因为你安装的pytorch版本没有GPU支持。(例如:你在笔记本电脑上编码,然后在服务器上测试)。
解决方案是在pytorch下载页面中使用正确的命令卸载并重新安装pytorch。也参考这个pytorch问题。
这里几乎所有的答案都引用torch.cuda.is_available()。然而,这只是硬币的一部分。它告诉你GPU(实际上是CUDA)是否可用,而不是它是否实际被使用。在一个典型的设置中,你会像这样设置你的设备:
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
但在更大的环境中(例如研究),通常也会给用户更多的选择,因此根据输入,他们可以禁用CUDA,指定CUDA id,等等。在这种情况下,是否使用GPU不仅仅取决于GPU是否可用。在设备被设置为torch设备之后,您可以获取它的type属性来验证它是否是CUDA。
if device.type == 'cuda':
# do something
由于这里没有提出,我添加了一个使用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资源,以及利用到什么程度,那么你可以简单地使用watch,如下所示:
$ watch -n 2 nvidia-smi
这将持续更新使用统计每2秒,直到你按ctrl+c
如果你需要更多的GPU统计数据的控制,你可以使用更复杂的nvidia-smi版本——query-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代码中执行此操作,请查看以下模块:
https://github.com/jonsafari/nvidia-ml-py或在pypi中:https://pypi.python.org/pypi/nvidia-ml-py/
使用下面的代码
import torch
torch.cuda.is_available()
将只显示GPU是否存在并被pytorch检测到。
但是在“任务管理器->性能”中,GPU利用率会非常低。
这意味着你实际上是在使用CPU运行。
解决上述问题的检查和修改:
打开硬件加速GPU设置,重新启动。 在通知区打开NVIDIA控制面板—> Desktop—>显示GPU [注意:如果您新安装了windows,那么您还必须在NVIDIA控制面板中同意这些条款和条件]
这应该有用!
推荐文章
- 如何限制Django模型中数值字段的最大值?
- 访问对象内存地址
- 为什么在Python方法中需要显式地有“self”参数?
- 如何升级Windows 10下的Python安装?
- tqdm在Jupyter笔记本重复打印新的进度条
- 如何在for循环中注释类型?
- 如何替换一个Pandas数据框架的字符串列中的文本?
- 从pandas apply()返回多个列
- 从列中的字符串中删除不需要的部分
- Python只大写第一个字母
- 使用熊猫合并时如何保持索引
- 如何排序两个列表(其中相互引用)在完全相同的方式
- Python中的哈希映射
- 子进程Popen和调用之间的区别是什么(我如何使用它们)?
- 将python 'type'对象转换为字符串