随机数生成 API¶
Genesis 提供与 PyTorch 兼容的随机数生成 API,具有线程安全的状态管理和可重复性保证。
函数¶
全局随机状态管理¶
genesis.manual_seed(seed)¶
设置全局随机种子以获得可重复的结果。
参数: - seed (int): 随机种子值
示例:
genesis.seed()¶
从当前时间或系统熵设置随机种子。
示例:
genesis.initial_seed()¶
获取使用的初始随机种子。
返回值: - int: 初始种子值
genesis.get_rng_state()¶
获取当前随机数生成器状态。
返回值: - Tensor: 当前随机数生成器状态
示例:
genesis.set_rng_state(new_state)¶
设置随机数生成器状态。
参数: - new_state (Tensor): 要恢复的随机数生成器状态
线程安全的随机生成¶
genesis.fork_rng(devices=None, enabled=True)¶
线程安全随机数生成的上下文管理器。
参数: - devices (list, 可选): 要分叉随机数生成器状态的设备 - enabled (bool): 是否实际分叉 (默认: True)
示例:
Python
with genesis.fork_rng():
genesis.manual_seed(999)
# 这里的随机操作不会影响全局状态
x = genesis.rand(10, 10)
# 全局状态在这里恢复
Generator 类¶
genesis.Generator(device='cpu')¶
用于控制随机状态的随机数生成器。
参数: - device (str): 生成器的设备 (默认: 'cpu')
方法:
generator.manual_seed(seed)¶
设置生成器的随机种子。
参数: - seed (int): 随机种子值
示例:
Python
gen = genesis.Generator()
gen.manual_seed(12345)
# 为特定操作使用生成器
x = genesis.rand(100, 100, generator=gen)
generator.seed()¶
从系统熵设置随机种子。
generator.initial_seed()¶
获取生成器的初始种子。
generator.get_state()¶
获取生成器的当前状态。
generator.set_state(new_state)¶
设置生成器的状态。
全局生成器¶
genesis.default_generator¶
默认的全局随机数生成器实例。
示例:
使用示例¶
基础随机生成¶
Python
import genesis
# 设置种子以获得可重复结果
genesis.manual_seed(42)
# 生成随机张量
x = genesis.rand(100, 100, device='cuda')
y = genesis.randn(50, 50, device='cpu')
z = genesis.randint(0, 10, (20, 20))
高级状态管理¶
Python
import genesis
# 保存全局状态
saved_state = genesis.get_rng_state()
# 执行一些随机操作
genesis.manual_seed(123)
x = genesis.rand(10, 10)
# 恢复之前的状态
genesis.set_rng_state(saved_state)
y = genesis.rand(10, 10) # 如同从未调用 seed(123)
线程安全使用¶
Python
import genesis
import threading
def worker():
with genesis.fork_rng():
genesis.manual_seed(42)
# 每个线程都有独立的随机状态
return genesis.rand(100, 100)
# 多个线程不会相互干扰
threads = [threading.Thread(target=worker) for _ in range(4)]
自定义生成器使用¶
Python
import genesis
# 创建自定义生成器
gen1 = genesis.Generator()
gen1.manual_seed(111)
gen2 = genesis.Generator()
gen2.manual_seed(222)
# 不同的生成器产生不同的序列
x1 = genesis.rand(10, 10, generator=gen1)
x2 = genesis.rand(10, 10, generator=gen2) # 与 x1 不同
实现说明¶
- 随机数生成器 API 设计为与 PyTorch 兼容
- 通过适当的状态隔离保证线程安全
- 状态管理支持全局和每个生成器的控制
- 所有随机函数都接受可选的
generator参数 - 实现内部使用 NumPy 的随机数生成器
- CUDA 设备的随机生成继承自 CPU 状态管理