Как проверить, использует ли pytorch GPU?

Я хотел бы знать, использует ли pytorch мой GPU. С помощью nvidia-smi можно определить, есть ли какие-либо действия с графическим процессором во время процесса, но я хочу, чтобы что-то было написано в скрипте python.

Есть ли способ сделать это?

Ответы

Ответ 1

Это будет работать:

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

Это говорит о том, что графический процессор GeForce GTX 950M используется PyTorch.

Ответ 2

После запуска цикла обучения, если вы хотите вручную просмотреть его с терминала, использует ли ваша программа ресурсы графического процессора и в какой степени, вы можете использовать:

$ watch -n 2 nvidia-smi

Это будет обновлять статистику использования каждые 2 секунды, пока вы не нажмете ctrl + c


Кроме того, вы можете проверить, правильно ли ваша установка PyTorch обнаруживает установку CUDA, выполнив:

In [13]: import  torch

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

Статус True означает, что PyTorch настроен правильно и использует графический процессор, хотя вы должны перемещать/размещать тензоры с необходимыми утверждениями в своем коде.


Если вы хотите сделать это внутри кода Python, загляните в этот модуль:

https://github.com/jonsafari/nvidia-ml-py  или в pypi здесь: https://pypi.python.org/pypi/nvidia-ml-py/

Ответ 3

Так как здесь это не было предложено, я добавляю метод с использованием 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')

Выход:

Using device: cuda

Tesla K80
Memory Usage:
Allocated: 0.3 GB
Cached:    0.6 GB

Как упоминалось выше, с помощью device можно:

  • Чтобы переместить тензоры в соответствующий device:

    torch.rand(10).to(device)
    
  • Чтобы создать тензор непосредственно на device:

    torch.rand(10, device=device)
    

Что делает переключение между процессором и графическим процессором удобным без изменения фактического кода.


Изменить:

Поскольку возникли некоторые вопросы и путаница в отношении кэшированной и выделенной памяти, я добавляю дополнительную информацию об этом:

  • torch.cuda.max_memory_cached(device=None)

    Возвращает максимальный объем памяти графического процессора, управляемый распределителем кэширования, в байтах для данное устройство.

  • torch.cuda.memory_allocated(device=None)

    Возвращает текущее использование памяти графическим процессором по тензорам в байтах для данного устройства.


Вы можете либо напрямую передать device, как указано выше в сообщении, либо оставить его Нет, и он будет использовать current_device().

Ответ 4

На сайте office и на начальной странице get проверьте GPU для PyTorch, как показано ниже:

import torch
torch.cuda.is_available()

Ссылка: PyTorch | Начало работы

Ответ 5

Чтобы проверить, доступен ли графический процессор:

torch.cuda.is_available()

Если вышеприведенная функция возвращает False, у вас либо нет графического процессора, либо драйверы Nvidia не были установлены, поэтому ОС не видит графический процессор, либо графический процессор скрыт переменной среды CUDA_VISIBLE_DEVICES. Когда значение CUDA_VISIBLE_DEVICES равно -1, тогда все ваши устройства скрыты. Вы можете проверить это значение в коде с помощью этой строки: 'os.environ [' CUDA_VISIBLE_DEVICES ']

Если вышеприведенная функция возвращает True, это не обязательно означает, что вы используете графический процессор. В 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.

Ответ 6

С практической точки зрения только одно небольшое отступление:

import torch
dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")

Этот 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

Это все сложно, и если вы поймете это однажды, это поможет вам быстрее справиться с меньшим количеством ошибок.

Ответ 7

Почти все ответы здесь приведены в справочнике torch.cuda.is_available(). Тем не менее, это только одна часть медали. Он сообщает вам, доступен ли графический процессор (на самом деле CUDA), а не используется ли он на самом деле. В типичной настройке вы бы настроили ваше устройство примерно так:

device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")

но в более крупных средах (например, в исследованиях) также обычно дают пользователю больше возможностей, поэтому на основе ввода они могут отключить CUDA, указать идентификаторы CUDA и т.д. В таком случае, используется или нет графический процессор, зависит не только от того, доступен он или нет. После того, как устройство было установлено на устройство факела, вы можете получить его свойство type, чтобы проверить, является ли оно CUDA или нет.

if device.type == 'cuda':
    # do something

Ответ 8

FWIW: Если вы здесь, потому что ваш pytorch всегда выдает false для torch.cuda.is_available(), вероятно, потому что вы установили версию pytorch без поддержки GPU. (Например: вы запрограммированы на ноутбуке, затем тестируете на сервере). Решение состоит в том, чтобы удалить и снова установить pytorch с помощью правильной команды на странице загрузок pytorch. Также обратитесь к этой проблеме pytorch.

Ответ 9

Создайте тензор на графическом процессоре следующим образом:

$ python
>>> import torch
>>> print(torch.rand(3,3).cuda()) 

Не завершайте работу, откройте другой терминал и проверьте, использует ли процесс python графический процессор, используя:

$ nvidia-smi