Атрибут device
Атрибут device класса torch.Generator возвращает устройство,
на котором в данный момент работает генератор случайных чисел.
Этот атрибут доступен только для чтения и позволяет определить,
используется ли генератор на центральном процессоре (CPU)
или на графическом процессоре (GPU/CUDA).
При создании генератора через torch.Generator без параметров,
он по умолчанию создается на устройстве CPU.
Синтаксис
generator.device
Пример
Давайте создадим генератор на CPU и выведем его устройство:
import torch
gen = torch.Generator()
print(gen.device)
Результат выполнения кода:
device(type='cpu')
Пример
Создадим генератор на устройстве CUDA, если оно доступно, и проверим его устройство:
import torch
if torch.cuda.is_available():
gen = torch.Generator(device='cuda')
print(gen.device)
else:
print("CUDA не доступна")
Результат выполнения кода (при наличии CUDA):
device(type='cuda', index=0)
Пример
Атрибут device позволяет определить,
на каком устройстве будут генерироваться случайные числа.
Это особенно полезно при работе с тензорами на разных устройствах:
import torch
torch.manual_seed(0)
cpu_gen = torch.Generator()
cpu_gen.manual_seed(42)
t_cpu = torch.randn(3, device='cpu', generator=cpu_gen)
if torch.cuda.is_available():
cuda_gen = torch.Generator(device='cuda')
cuda_gen.manual_seed(42)
t_cuda = torch.randn(3, device='cuda', generator=cuda_gen)
print("CPU генератор:", cpu_gen.device)
print("CUDA генератор:", cuda_gen.device)
print("Тензор на CPU:", t_cpu)
print("Тензор на CUDA:", t_cuda)
else:
print("CUDA не доступна")
print("CPU генератор:", cpu_gen.device)
print("Тензор на CPU:", t_cpu)
Результат выполнения кода (при наличии CUDA):
CPU генератор: device(type='cpu')
CUDA генератор: device(type='cuda', index=0)
Тензор на CPU: tensor([ 0.3367, 0.1288, -0.2346])
Тензор на CUDA: tensor([ 0.3367, 0.1288, -0.2346], device='cuda:0')
Пример
Попытка использовать генератор на одном устройстве
для создания тензора на другом устройстве приведёт к ошибке.
Атрибут device помогает избежать таких ситуаций:
import torch
cpu_gen = torch.Generator()
if torch.cuda.is_available():
try:
t = torch.randn(3, device='cuda', generator=cpu_gen)
except RuntimeError as e:
print("Ошибка:", e)
else:
print("CUDA не доступна")
Результат выполнения кода (при наличии CUDA):
"Ошибка: Generator device must be cuda when using a cuda device tensor"
Смотрите также
-
класс
Generator,
который представляет генератор случайных чисел -
метод
manual_seed,
который задаёт начальное значение для генератора -
метод
seed,
который автоматически генерирует случайное начальное значение -
метод
initial_seed,
который возвращает текущее начальное значение генератора