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

Функция cuda.set_rng_state_all

Функция cuda.set_rng_state_all устанавливает состояние генераторов случайных чисел для всех доступных устройств CUDA одновременно. Первым параметром функция принимает объект состояния, полученный с помощью функции cuda.get_rng_state_all. Вторым параметром можно указать устройство, для которого будет установлено состояние, но в данной функции он не используется, так как состояние устанавливается для всех устройств. Функция не возвращает никакого значения.

Синтаксис

torch.cuda.set_rng_state_all(state)

Пример

Давайте сохраним состояние генераторов случайных чисел на всех GPU, сгенерируем тензоры на каждом устройстве, а затем восстановим состояние и убедимся, что последовательности случайных чисел повторяются:

import torch torch.manual_seed(0) if torch.cuda.is_available(): device_count = torch.cuda.device_count() print(f"Доступно устройств: {device_count}") # Сохраняем состояние на всех устройствах state_all = torch.cuda.get_rng_state_all() # Генерируем тензоры на каждом устройстве tensors1 = [] for i in range(device_count): t = torch.rand(3, device=f'cuda:{i}') tensors1.append(t) # Восстанавливаем состояние на всех устройствах torch.cuda.set_rng_state_all(state_all) # Генерируем тензоры снова tensors2 = [] for i in range(device_count): t = torch.rand(3, device=f'cuda:{i}') tensors2.append(t) # Сравниваем результаты for i in range(device_count): print(f"Устройство {i}: {torch.all(tensors1[i] == tensors2[i])}")

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

Доступно устройств: 2 Устройство 0: True Устройство 1: True

Пример

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

import torch torch.manual_seed(42) if torch.cuda.is_available(): device_count = torch.cuda.device_count() # Сохраняем текущее состояние state_all = torch.cuda.get_rng_state_all() # Генерируем тензор на первом устройстве t1 = torch.rand(5, device='cuda:0') # Восстанавливаем состояние torch.cuda.set_rng_state_all(state_all) # Генерируем тензор снова t2 = torch.rand(5, device='cuda:0') # Проверяем, что тензоры одинаковы print(f"Тензоры равны: {torch.all(t1 == t2)}") print(f"Первый тензор: {t1}") print(f"Второй тензор: {t2}")

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

Тензоры равны: True Первый тензор: tensor([0.8823, 0.9150, 0.3829, 0.9593, 0.3904], device='cuda:0') Второй тензор: tensor([0.8823, 0.9150, 0.3829, 0.9593, 0.3904], device='cuda:0')

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

  • функцию cuda.get_rng_state_all,
    которая получает состояние генераторов на всех устройствах CUDA
  • функцию cuda.set_rng_state,
    которая устанавливает состояние генератора на конкретном устройстве
  • функцию cuda.get_rng_state,
    которая получает состояние генератора на конкретном устройстве
  • функцию cuda.manual_seed_all,
    которая устанавливает начальное зерно для всех устройств CUDA
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить