6

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

9

Как проверить, использует ли PyTorch GPU? Команда nvidia-smi может обнаружить активность GPU, но я хочу проверить это непосредственно из Python-скрипта.

5 ответ(ов)

10

Эти функции помогут:

>>> import torch

>>> torch.cuda.is_available()
True

>>> torch.cuda.device_count()
1

>>> torch.cuda.current_device()
0

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

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

Это означает следующее:

  • CUDA доступна и может быть использована одним устройством.
  • Устройство 0 относится к GPU GeForce GTX 950M, и в данный момент оно выбрано PyTorch.
0

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

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

Теперь переменная dev знает, использовать ли CUDA или CPU.

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

import torch
import torch.nn as nn
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

class M(nn.Module):
    def __init__(self):        
        super().__init__()        
        self.l1 = nn.Linear(1, 2)

    def forward(self, x):                      
        x = self.l1(x)
        return x

model = M()   # не на cuda
model.to(dev) # теперь на cuda (все параметры)
print(next(model.parameters()).is_cuda)  # True

Все это может быть немного запутанным, но, поняв это один раз, вы сможете быстрее решать проблемы и избегать лишних отладок.

0

Конечно! Вот перевод в стиле ответа на StackOverflow:

| Запрос | Команда |
| --- | --- |
| Видит ли PyTorch какие-либо GPU? | `torch.cuda.is_available()` |
| Хранятся ли тензоры на GPU по умолчанию? | `torch.rand(10).device` |
| Установить тип тензора по умолчанию на CUDA: | `torch.set_default_tensor_type(torch.cuda.FloatTensor)` |
| Является ли этот тензор тензором GPU? | `my_tensor.is_cuda` |
| Хранится ли эта модель на GPU? | `all(p.is_cuda for p in my_model.parameters())` |

Если у вас есть дополнительные вопросы о работе с GPU в PyTorch, не стесняйтесь спрашивать!

0

Чтобы проверить, доступен ли GPU, используйте следующую функцию:

torch.cuda.is_available()

Если эта функция возвращает False, это может означать, что:

  1. У вас нет GPU,
  2. Драйвера Nvidia не установлены, и операционная система не видит GPU,
  3. GPU скрыт переменной окружения CUDA_VISIBLE_DEVICES. Если значение CUDA_VISIBLE_DEVICES равно -1, то все ваши устройства скрыты. Вы можете проверить это значение в коде с помощью этой строки: os.environ['CUDA_VISIBLE_DEVICES'].

Если функция возвращает True, это еще не означает, что вы используете GPU. В PyTorch вы можете выделять тензоры на устройствах при их создании. По умолчанию тензоры выделяются на cpu. Чтобы проверить, на каком устройстве расположен ваш тензор, используйте:

# предположим, что 'a' - это тензор, созданный где-то еще
a.device  # возвращает устройство, на котором выделен тензор

Обратите внимание, что вы не можете выполнять операции с тензорами, выделенными на разных устройствах. Чтобы узнать, как выделить тензор на GPU, посмотрите здесь: https://pytorch.org/docs/stable/notes/cuda.html

0

Чтобы проверить доступность CUDA в PyTorch, вы можете выполнить следующие команды в командной строке или в Linux окружении:

  1. Для проверки, доступна ли CUDA, введите следующую команду:
python -c 'import torch; print(torch.cuda.is_available())'

Если CUDA доступна, вывод будет True.

  1. Чтобы убедиться, что CUDA работает корректно, выполните следующую команду:
python -c 'import torch; print(torch.rand(2,3).cuda())'

В этом случае вывод должен быть примерно таким:

tensor([[0.7997, 0.6170, 0.7042], [0.4174, 0.1494, 0.0516]], device='cuda:0')

Обратите внимание, что значения в тензоре могут отличаться, так как они случайные. Главное, чтобы вы получили тензор с указанием device='cuda:0', что подтвердит, что тензор был создан на GPU.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь