Как проверить, использует ли PyTorch GPU?
Как проверить, использует ли PyTorch GPU? Команда nvidia-smi
может обнаружить активность GPU, но я хочу проверить это непосредственно из Python-скрипта.
5 ответ(ов)
Эти функции помогут:
>>> 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
относится к GPUGeForce GTX 950M
, и в данный момент оно выбрано PyTorch.
С практической точки зрения, вот небольшое отклонение:
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
Все это может быть немного запутанным, но, поняв это один раз, вы сможете быстрее решать проблемы и избегать лишних отладок.
Конечно! Вот перевод в стиле ответа на 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, не стесняйтесь спрашивать!
Чтобы проверить, доступен ли GPU, используйте следующую функцию:
torch.cuda.is_available()
Если эта функция возвращает False
, это может означать, что:
- У вас нет GPU,
- Драйвера Nvidia не установлены, и операционная система не видит GPU,
- 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
Чтобы проверить доступность CUDA в PyTorch, вы можете выполнить следующие команды в командной строке или в Linux окружении:
- Для проверки, доступна ли CUDA, введите следующую команду:
python -c 'import torch; print(torch.cuda.is_available())'
Если CUDA доступна, вывод будет True
.
- Чтобы убедиться, что 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.
Как явно освободить память в Python?
Как клонировать список, чтобы он не изменялся неожиданно после присваивания?
Преобразование списка словарей в DataFrame pandas
Как отсортировать список/кортеж списков/кортежей по элементу на заданном индексе
Как отменить последнюю миграцию?