tf.nn.dynamic_rnn()并tf.nn.raw_rnn()接受一个名为 parallel_iterations 的参数。文档说:
并行迭代:(默认值:32)。并行运行的迭代次数。那些没有任何时间依赖性并且可以并行运行的操作将是。此参数以时间换空间。值 >> 1 使用更多内存但花费的时间更少,而较小的值使用更少的内存但计算时间更长。
如果内存不是限制因素,我是否应该始终保持其值等于 GPU 上可用的处理器数量。
在这里我有我的第一个问题 - 我认为 GPU 上的处理器数量意味着它可以进行的并行浮点计算的数量是否正确(我不认为 GPU 也像 CPU 那样在每个处理器中实现 2 个线程)?
现在,GRU机器是:(请注意图像中没有显示偏差,但用于更好的性能)
对我来说,值 32 似乎太低而无法保留为默认值。如果我有一个具有 250 维隐藏状态和 100 维输入的 GRU,我将有(2 x 250 x 350 x batch_size)浮点乘法,我可以并行运行(计算 r 和 u),然后是(250 x batch_size)浮点加法我可以并行运行,然后是 (250 x batch_size) sigmoid 应用程序,这些应用程序至少是 (250 x batch_size) 潜在的并行计算。然后是应用复位门的 (250 x batch_size) 并行计算,然后是 (1 x 250 x 350 x batch_size) 并行计算,然后是 (250 x batch_size) 并行计算偏差。现在在最后一步是(250 x batch_size)浮点计算来计算(1 - 更新门),然后是(500 x batch_size)并行浮点计算输出状态。
在分析深度网络时,我在第二段中的思考方式是否正确,以模糊地了解硬件能够在多大程度上影响其运行时间
