JAX量子神经网络训练时间异常现象及原因咨询
JAX量子神经网络优化循环耗时异常问题解答
1. 为何单次优化循环(设置1)耗时高于10次循环(设置2)
JAX的jax.lax.fori_loop配合JIT编译时,编译过程会产生固定开销——它会把整个循环逻辑转换成XLA可执行程序,这个编译时间和循环迭代次数无关。
- 设置1中,编译开销完全摊到1次迭代上,总耗时=编译时间+1次迭代运行时间;
- 设置2中,同样的编译开销摊到10次迭代上,总耗时=编译时间+10次迭代运行时间。
由于编译开销远大于单次迭代的运行时间,最终设置1的总耗时反而更高。
2. 为何每5步调用print_fn(设置3)耗时高于每步调用(设置2)
JAX中的打印属于副作用操作,XLA对jax.lax.fori_loop的优化核心是循环体逻辑的一致性:
- 设置2中每步都调用print_fn,循环体结构完全统一,XLA能对整个循环做批量处理、循环展开等优化;
- 设置3中每5步才触发一次打印,循环体变成“4步无打印+1步有打印”的交替结构,打破了逻辑一致性。XLA无法对这种不规则循环做有效优化,还要额外处理分支判断,导致整体运行效率下降,耗时反而更高。
内容的提问来源于stack exchange,提问作者Sup
相关产品推荐
相关产品推荐

