SciPy生成Sobol序列时在完成25%后停滞的问题求助
SciPy生成Sobol序列时在完成25%后停滞的问题求助
我正在用Sobol序列做大规模拟蒙特卡洛(Quasi Monte Carlo)模拟,需要生成超过2**30个样本。根据SciPy的文档,Sobol生成器默认上限是2**30,但修改bits参数可以将上限提升至最大2**64——这完全能满足我的需求。
我按照文档设置了sampler = qmc.Sobol(d=2, scramble=True, bits=64),但还是遇到了异常:程序刚好运行到25%的进度就毫无征兆地停止了,没有抛出任何错误提示。我监控了GPU和内存使用情况,可以确定不是内存溢出导致的;另外我尝试过把生成器放到循环内每次重新初始化,程序能正常运行,但这样会破坏QMC序列的核心特性,显然不是可行的解决方案。
以下是我的最小可复现代码:
from scipy.stats import qmc from tqdm import tqdm def run_simulation_batch_cupy_QMC(samples, a): batch_size = 2 ** 27 n_batches = samples // batch_size sampler = qmc.Sobol(d=2, scramble=True, bits=64) for i in tqdm(range(n_batches)): qmc_samples = sampler.random(n=batch_size) # 此处省略具体计算逻辑 if __name__ == "__main__": samples = 2 ** 34 # 触发bug需要样本数大于10**10且为2的幂,比如2**34 a_values = [1.1, 1.2, 1.3] # 示例参数 for a in tqdm(a_values): run_simulation_batch_cupy_QMC(samples, a)
预期与实际结果
- 预期:程序能完整生成所有样本并完成模拟流程
- 实际:GPU计算在进度刚到25%时直接停止,无报错、无内存溢出迹象
我需要在不破坏Sobol序列QMC特性的前提下,解决大规模样本生成停滞的问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

