Generator
-
class torch.Generator -
-
clone_state() → torch.Generator -
Клонирует текущее состояние генератора и возвращает новый генератор, указывающий на это клонированное состояние. Этот метод полезен для сохранения определённого состояния генератора, чтобы восстановить его позднее.
- Возвращает:
-
Generator, указывающий на вновь клонированное состояние.
- Тип возвращаемого значения:
Пример
>>> g_cuda = torch.Generator(device='cuda') >>> cloned_state = g_cuda.clone_state()
-
device -
Generator.device -> device
Возвращает текущее устройство генератора.
Пример:
>>> g_cpu = torch.Generator() >>> g_cpu.device device(type='cpu')
-
get_state() → Tensor -
Возвращает состояние Generator в виде
torch.ByteTensor.- Возвращает:
-
torch.ByteTensor, содержащий все необходимые данные для восстановления Generator до определённого момента времени. - Тип возвращаемого значения:
Пример:
>>> g_cpu = torch.Generator() >>> g_cpu.get_state()
-
graphsafe_get_state() → torch.Generator -
Получает текущее состояние генератора способом, безопасным для захвата графа. Этот метод необходим для обеспечения возможности захвата состояния генератора в граф CUDA.
- Возвращает:
-
Generator, указывающий на текущее состояние генератора.
- Тип возвращаемого значения:
Пример
>>> g_cuda = torch.Generator(device='cuda') >>> current_state = g_cuda.graphsafe_get_state()
-
graphsafe_set_state(state) → None -
Задаёт состояние генератора указанным состоянием способом, безопасным для использования при захвате графа. Этот метод необходим для обеспечения возможности захвата состояния генератора в граф CUDA.
- Параметры:
-
state (torch.Generator) – Generator, указывающий на новое состояние генератора; обычно его получают с помощью
graphsafe_get_state.
Пример
>>> g_cuda = torch.Generator(device='cuda') >>> g_cuda_other = torch.Generator(device='cuda') >>> current_state = g_cuda_other.graphsafe_get_state() >>> g_cuda.graphsafe_set_state(current_state)
-
initial_seed() → int -
Возвращает начальное значение seed для генерации случайных чисел.
Пример:
>>> g_cpu = torch.Generator() >>> g_cpu.initial_seed() 2147483647
-
manual_seed(seed) → Generator -
Задаёт значение seed для генерации случайных чисел. Возвращает объект
torch.Generator. В качестве значения seed подходит любое 32-битное целое число.- Параметры:
-
seed (int) – Требуемое значение seed. Значение должно находиться в включительном диапазоне
[-0x8000_0000_0000_0000, 0xffff_ffff_ffff_ffff]. В противном случае будет вызвано исключение RuntimeError. Отрицательные значения преобразуются в положительные по формуле0xffff_ffff_ffff_ffff + seed. - Возвращает:
-
Объект torch.Generator.
- Тип возвращаемого значения:
Пример:
>>> g_cpu = torch.Generator() >>> g_cpu.manual_seed(2147483647)
-
philox_state(increment) → tuple[Tensor, Tensor, Tensor] -
Резервирует значения
incrementиз потока Philox4x32-10 этого генератора и возвращает зарезервированную позицию в виде(seed, offset, intragraph_offset), трёх тензоровint64с одним элементом. Это тот же протокол резервирования, который используют встроенные случайные CUDA-ядра (PhiloxCudaStateв C++), поэтому созданные на его основе ядра получают значения из того же потока и совместно работают со встроенными случайными операциями. Этот метод поддерживается только генераторами на основе Philox (в настоящее время — CUDA).Что даёт резервирование. При
effective_offset = (uint64(offset) + uint64(intragraph_offset)) % 2**64(оба операнда предварительно интерпретируются обратно из int64 как uint64; см. ниже) вызывающий код получает во владение значения счётчика Philoxeffective_offset / 4—effective_offset / 4 + ceil(increment / 4) - 1(счётчик увеличивается один раз на каждые 4 сгенерированных значения) при фиксированномseedдля каждой подпоследовательности. Следуя соглашению встроенных ядер — одна подпоследовательность на поток (curand_init(seed, subsequence, effective_offset, ...), где счётчик занимаетcounter.x/y, а подпоследовательность —counter.z/w), поток может сгенерировать доincrementзначений, округлённых вверх до ближайшего числа, кратного 4. Смещение генератора увеличивается на это округлённое значение, поэтомуincrementдолжно быть не меньше числа 32-битных значений, генерируемых любым отдельным потоком использующего ядра.Интерпретация int64. Seed и смещение — это беззнаковые 64-битные величины, возвращаемые побитно точно в тензорах
int64(тензоры PyTorch не поддерживают арифметику uint64); значения, равные2**63или превышающие его, отображаются как отрицательные. Ядрам следует повторно интерпретировать биты как uint64 (например, загрузить как int64 и выполнить bitcast); для проверки на стороне хоста используйте.item() & (2**64 - 1). При увеличении смещение циклически переходит по модулю2**64.Захват графа. Два режима возврата соответствуют протоколу C++
PhiloxCudaState. Вне захвата (HostState)seedиoffset— это тензоры CPU, содержащие текущие значения;.item()выполняется быстро и не вызывает синхронизацию, поэтому вызывающий код передаёт значения в качестве скалярных аргументов ядра. Во время захвата (DevState, внутриtorch.accelerator.Graphилиtorch.cuda.CUDAGraph)seedиoffset— это тензоры CUDA, ссылающиеся на состояние генератора; при каждом повторном воспроизведении в них записываются значения, актуальные на этот момент, поэтому ядра должны считывать их из памяти устройства во время выполнения.intragraph_offsetвсегда является тензором CPU: вне захвата он содержит 0, а во время захвата — позицию этого резервирования внутри графа. Вызывающий код выбирает ветвь в зависимости от состояния захвата (например, используяtorch.cuda.is_current_stream_capturing()или устройство возвращённых тензоров), так же как встроенные ядра выбирают ветвь на основеPhiloxCudaStateс помощьюat::cuda::philox::unpack.Предупреждение
Тензоры, возвращённые во время захвата, ссылаются на состояние захвата: их содержимое не определено до первого повторного воспроизведения, и их нельзя использовать после уничтожения графа.
- Параметры:
-
increment (int) – Число выходных значений Philox для резервирования. Должно быть неотрицательным и не превышать
2**64 - 1; смещение, на которое оно увеличивается, циклически переходит по модулю2**64(при захвате графа, когда внутреннее смещение графа начинается с 0, суммарное число зарезервированных значений в одном графе должно быть меньше2**64). - Возвращает:
-
(seed, offset, intragraph_offset), каждый из которых является тензоромint64с одним элементом.seedиoffsetсодержат seed генератора и позицию зарезервированного участка потока в виде битов uint64 (тензоры CPU вне захвата, тензоры CUDA, ссылающиеся на состояние генератора, во время захвата);intragraph_offsetвсегда является тензором CPU, содержащим позицию этого резервирования внутри захватываемого графа (вне захвата — 0). - Тип возвращаемого значения:
Пример
>>> g_cuda = torch.Generator(device='cuda') >>> seed, offset, intragraph = g_cuda.philox_state(4)
-
seed() → int -
Получает недетерминированное случайное число из std::random_device или текущего времени и использует его в качестве seed для Generator.
Пример:
>>> g_cpu = torch.Generator() >>> g_cpu.seed() 1516516984916
-
set_state(new_state) → void -
Задаёт состояние Generator.
- Параметры:
-
new_state (torch.ByteTensor) – Требуемое состояние.
Пример:
>>> g_cpu = torch.Generator() >>> g_cpu_other = torch.Generator() >>> g_cpu.set_state(g_cpu_other.get_state())
-
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.Generator.html