TPU术语混淆

TPU terminology confusion

所以我知道 epochs、train steps、batch sizes 和这类东西是如何定义的,但我真的很难理解 TPU 术语,比如 train loops、iterations per loop 等等.我读了 this 但我还是很困惑。

另外,我如何才能对每个循环的迭代时间进行基准测试。

任何解释都会对我有很大帮助。谢谢!

TPU 字面意思是"Tensor Processing Unit",它是一种硬件设备,用于计算,其使用方式与 GPU 完全相同。 TPU 实际上是 Google 专有 GPU。 GPU 和 TPU 在底层存在技术差异,主要是关于速度和功耗,以及浮点精度的一些问题,但您无需关心细节。

iterations_per_loop 似乎是通过向 TPU 加载多个训练批次来提高效率的努力。将大量数据从主内存传输到 GPU/TPU 时,通常存在硬件带宽限制。

您引用的代码似乎正在将 iterations_per_loop 个训练批次传递给 TPU,然后 运行 iterations_per_loop 个训练步骤,然后暂停进行另一次数据传输主内存到 TPU 内存。

虽然我很惊讶地看到这一点,但我希望异步后台数据传输现在是可能的。

我唯一的免责声明是,虽然我精通 Tensorflow,并且看过论文和文章中的 TPU 演变,但我并没有直接体验过 Google API 或 运行 在 TPU 上,所以我是根据我在您链接到的文档中阅读的内容推断的。

"train loop",我假设它与 "training loop" 的含义相同。训练循环是遍历每个时期以提供模型的循环。

每个循环的迭代次数与 Cloud TPU 如何处理训练循环有关。为了分摊 TPU 启动成本,模型训练步骤包含在 tf.while_loop 中,这样一个会话 运行 实际上对于单个训练循环 运行s 多次迭代。

因此,Cloud TPU 运行 在返回主机之前进行了指定次数的训练循环迭代。因此,iterations_per_loop 是 运行 一次 session.run 调用的迭代次数。

正如其他答案所描述的,iterations_per_loop 是一个调整参数,它控制 TPU 在再次检查之前完成的工作量。较低的数字可以让您更频繁地检查结果(并对其进行基准测试),较高的数字可以减少由于同步而产生的开销。

这与熟悉的网络或文件缓冲技术没有什么不同;更改其值会影响性能,但不会影响最终结果。相反,num_epochstrain_stepstrain_batch_size 等 ML 超参数会改变您的结果。

编辑: 在下面的伪代码中添加插图。 理论上, 训练循环的功能如下:

def process_on_TPU(examples, train_batch_size, iterations_per_loop):
    # The TPU will run `iterations_per_loop` training iterations before returning to the host
    for i in range(0, iterations_per_loop):
        # on every iteration, the TPU will compute `train_batch_size` examples,
        # calculating the gradient from every example in the given batch
        compute(examples[i * train_batch_size : (i + 1) * train_batch_size])

# assume each entry in `example` is a single training example
for b in range(0, train_steps, train_batch_size * iterations_per_loop)
    process_on_TPU(examples[b:b + train_batch_size * iterations_per_loop],
                   train_batch_size,
                   iterations_per_loop)

由此看来,train_batch_sizeiterations_per_loop 可能只是完成同一件事的两种不同方式。然而,这种情况并非如此; train_batch_size 影响学习率,因为(至少在 ResNet-50 中)梯度是在每次迭代时根据批次中每个示例的梯度平均值计算的。每 50k 个示例执行 50 步将产生与每 50k 个示例执行 1k 步不同的结果,因为后一种情况计算梯度的频率更高。

编辑 2: 下面是一种可视化正在发生的事情的方法,带有赛车比喻。将 TPU 想象成 运行 一场距离为 train_steps 个示例的竞赛,它的步幅使其每一步涵盖一批示例。比赛在比比赛总距离短的赛道上进行;一圈的长度就是你的训练样例总数,赛道上每一圈就是一个纪元。您可以将 iterations_per_loop 视为 TPU 可以在某种 "water station" 处停止的点,在该点处暂时暂停训练以执行各种任务(基准测试、检查点、其他内务管理)。