РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
670 of 769 menu

Функция cuda.manual_seed_all

Функция cuda.manual_seed_all устанавливает начальное зерно для генератора случайных чисел на всех доступных устройствах CUDA. Это необходимо для обеспечения воспроизводимости результатов при использовании нескольких графических процессоров. Функция принимает одно целочисленное значение в качестве зерна и применяет его ко всем устройствам CUDA, которые видны PyTorch.

Синтаксис

torch.cuda.manual_seed_all(seed)

В качестве параметра ⁅i⁆seed⁅/i⁆ передаётся целое число, которое будет использоваться как начальное состояние для генератора случайных чисел на всех GPU.

Пример

Давайте зафиксируем зерно для всех доступных видеокарт и сгенерируем случайные тензоры на разных устройствах:

import torch torch.cuda.manual_seed_all(42) if torch.cuda.is_available(): t1 = torch.rand(3, device='cuda:0') t2 = torch.rand(3, device='cuda:0') print(t1) print(t2)

Результат выполнения кода (при наличии хотя бы одного GPU):

tensor([0.8823, 0.9150, 0.3829], device='cuda:0') tensor([0.9593, 0.3904, 0.6009], device='cuda:0')

Пример

Покажем, что установка зерна через cuda.manual_seed_all гарантирует одинаковые последовательности случайных чисел на всех устройствах, если их запустить с одним и тем же зерном:

import torch if torch.cuda.device_count() >= 2: torch.cuda.manual_seed_all(123) t1 = torch.rand(3, device='cuda:0') t2 = torch.rand(3, device='cuda:1') print(t1) print(t2)

Результат выполнения кода:

tensor([0.2961, 0.5166, 0.2517], device='cuda:0') tensor([0.2961, 0.5166, 0.2517], device='cuda:1')

Как видно, тензоры на обоих устройствах получились одинаковыми, так как зерно было установлено для всех GPU.

Пример

Если не вызвать cuda.manual_seed_all, то на разных устройствах последовательности будут различаться. Сравним поведение:

import torch if torch.cuda.device_count() >= 2: t1 = torch.rand(3, device='cuda:0') t2 = torch.rand(3, device='cuda:1') print(t1) print(t2)

Результат выполнения кода (будет различаться при каждом запуске):

tensor([0.7632, 0.1285, 0.6718], device='cuda:0') tensor([0.6311, 0.9114, 0.8721], device='cuda:1')

В этом случае случайные последовательности на разных GPU независимы и невоспроизводимы.

Смотрите также

  • функцию manual_seed,
    которая устанавливает зерно для CPU
  • функцию cuda.manual_seed,
    которая устанавливает зерно для одного GPU (текущего устройства)
  • функцию seed,
    которая устанавливает случайное зерно для CPU
  • функцию get_rng_state,
    которая возвращает состояние генератора случайных чисел для CPU
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить