vin*_*zee 95 python memory-management gpu nvidia pytorch
我想知道是否pytorch正在使用我的GPU.可以nvidia-smi在进程中检测GPU是否有任何活动,但我想要用python脚本编写的东西.
有办法吗?
vin*_*zee 164
这将是有效的:
In [1]: import torch
In [2]: torch.cuda.current_device()
Out[2]: 0
In [3]: torch.cuda.device(0)
Out[3]: <torch.cuda.device at 0x7efce0b03be0>
In [4]: torch.cuda.device_count()
Out[4]: 1
In [5]: torch.cuda.get_device_name(0)
Out[5]: 'GeForce GTX 950M'
In [6]: torch.cuda.is_available()
Out[6]: True
Run Code Online (Sandbox Code Playgroud)
这告诉我GeForce GTX 950M正在使用GPU PyTorch.
kma*_*o23 34
在您开始运行训练循环之后,如果您想从终端手动观察它是否您的程序正在使用GPU资源以及在何种程度上,那么您可以使用:
$ watch -n 2 nvidia-smi
Run Code Online (Sandbox Code Playgroud)
这将每2秒更新统计数据,直到您按ctrl+c
此外,您可以通过执行以下操作来检查PyTorch的安装是否正确检测到您的CUDA安装:
In [13]: import torch
In [14]: torch.cuda.is_available()
Out[14]: True
Run Code Online (Sandbox Code Playgroud)
True状态意味着PyTorch已正确配置并且正在使用GPU,尽管您必须在代码中移动/放置具有必要语句的张量.
如果您想在Python代码中执行此操作,请查看此模块:
https://github.com/jonsafari/nvidia-ml-py或pypi:https://pypi.python.org/pypi/nvidia-ml-py/
blu*_*nox 32
由于这里没有提出,我正在添加一个方法torch.device,因为这非常方便,也可以在正确的初始化张量时使用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_cached(0)/1024**3,1), 'GB')
Run Code Online (Sandbox Code Playgroud)
输出:
Using device: cuda
Tesla K80
Memory Usage:
Allocated: 0.3 GB
Cached: 0.6 GB
Run Code Online (Sandbox Code Playgroud)
如上所述,使用device它可以:
将张量移到相应的位置device:
torch.rand(10).to(device)
Run Code Online (Sandbox Code Playgroud)或者直接在device:创建张量:
torch.rand(10, device=device)
Run Code Online (Sandbox Code Playgroud)这使得CPU和GPU之间的切换更加舒适,而无需更改实际代码.
小智 11
在office站点和get start页面上,检查GPU的PyTorch如下:
import torch
torch.cuda.is_available()
Run Code Online (Sandbox Code Playgroud)
参考:PyTorch |开始
Jad*_*mas 11
要检查是否有可用的 GPU:
torch.cuda.is_available()
Run Code Online (Sandbox Code Playgroud)
如果上述函数返回False,
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
Run Code Online (Sandbox Code Playgroud)
请注意,您不能对分配在不同设备中的张量进行操作。要查看如何为 GPU 分配张量,请参见此处:https : //pytorch.org/docs/stable/notes/cuda.html
从实际的角度来看,只有一个小题外话:
import torch
dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
Run Code Online (Sandbox Code Playgroud)
这dev现在知道,如果CUDA或CPU。
当移到cuda时,如何处理模型和张量是有区别的。起初有点奇怪。
import torch
dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
t1 = torch.randn(1,2)
t2 = torch.randn(1,2).to(dev)
print(t1) # tensor([[-0.2678, 1.9252]])
print(t2) # tensor([[ 0.5117, -3.6247]], device='cuda:0')
t1.to(dev)
print(t1) # tensor([[-0.2678, 1.9252]])
print(t1.is_cuda) # False
t1=t1.to(dev)
print(t1) # tensor([[-0.2678, 1.9252]], device='cuda:0')
print(t1.is_cuda) # True
model = M() # not on cuda
model.to(dev) # is on cuda (all parameters)
print(next(model.parameters()).is_cuda) #True
Run Code Online (Sandbox Code Playgroud)
这一切都是棘手的,一旦理解,就可以帮助您以更少的调试速度快速处理。
其他答案详细介绍了如何检查,如果GPU是提供您的当前机器上。
要检查给定的张量是否被GPU使用(即存储和操作),您可以访问device或is_cuda属性:
>>> my_tensor.is_cuda
True
Run Code Online (Sandbox Code Playgroud)
对于模型,您需要检查其每个参数(例如权重张量):
>>> all(p.is_cuda for p in my_model.parameters())
True
Run Code Online (Sandbox Code Playgroud)
对于 MacBook M1 系统:
import torch
print(torch.backends.mps.is_available(), torch.backends.mps.is_built())
Run Code Online (Sandbox Code Playgroud)
两者都应该是真的。
这里几乎所有的答案都参考了torch.cuda.is_available()。然而,这只是硬币的一部分。它告诉您 GPU(实际上是 CUDA)是否可用,而不是它是否正在实际使用。在典型的设置中,您将使用以下内容设置您的设备:
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
Run Code Online (Sandbox Code Playgroud)
但是在更大的环境(例如研究)中,为用户提供更多选择也是很常见的,因此根据输入,他们可以禁用 CUDA,指定 CUDA ID,等等。在这种情况下,是否使用GPU不仅仅取决于它是否可用。设备设置为torch设备后,可以通过获取其type属性来验证是否为CUDA。
if device.type == 'cuda':
# do something
Run Code Online (Sandbox Code Playgroud)
只需从命令提示符或 Linux 环境运行以下命令。
python -c 'import torch; print(torch.cuda.is_available())'
Run Code Online (Sandbox Code Playgroud)
以上应该打印 True
python -c 'import torch; print(torch.rand(2,3).cuda())'
Run Code Online (Sandbox Code Playgroud)
这个应该打印以下内容:
tensor([[0.7997, 0.6170, 0.7042], [0.4174, 0.1494, 0.0516]], device='cuda:0')
Run Code Online (Sandbox Code Playgroud)