【问题标题】:TPU terminology confusionTPU 术语混淆
【发布时间】:2019-02-19 11:25:39
【问题描述】:

所以我知道如何定义 epoch、训练步数、批量大小和这类东西,但我真的很难理解 TPU 术语,比如训练循环、每个循环的迭代次数等等。我读了this,但我仍然感到困惑。

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

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

【问题讨论】:

    标签: tensorflow google-cloud-platform google-compute-engine google-cloud-tpu


    【解决方案1】:

    正如其他答案所描述的,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 示例的比赛,它的步幅让它每一步覆盖一批示例。比赛在比总比赛距离短的赛道上进行;单圈的长度是你的训练样本总数,赛道上的每一圈都是一个 epoch。您可以将iterations_per_loop 视为 TPU 可以停在某种“水站”的点,在该点上,训练会因各种任务(基准测试、检查点、其他内务管理)而暂时暂停。

    【讨论】:

    • 嗯,如果 trains_steps
    • 来自以下链接:“循环将在到达 iterations_per_loop 之前退出。” github.com/tensorflow/tpu/blob/…
    • 我的意思是在较低的循环中有一个增量 train_batch_size * iterations_per_loop。不应该只是 itertions_per_loop 吗?
    • 否,每次传递给 TPU 的示例总数将是 train_batch_size * iterations_per_loop。我添加了一幅漫画来帮助说明训练循环。
    • 为了卡通! +1
    【解决方案2】:

    通过“火车循环”,我假设它与"training loop" 的含义相同。训练循环是遍历每个 epoch 以便为模型提供数据的循环。

    每个循环的迭代次数与 Cloud TPU 处理训练循环的方式有关。为了分摊 TPU 启动成本,模型训练步骤被包装在一个 tf.while_loop 中,这样一个 Session 运行实际上会为一个训练循环运行多次迭代。

    正因为如此,Cloud TPU 会在返回主机之前运行指定次数的训练循环迭代。因此,iterations_per_loop 是一个 session.run 调用将运行多少次迭代。

    【讨论】:

    • 谢谢!所以这意味着当在 CPU/GPU 上训练时,CPU 只为 session.run 调用运行一次迭代?
    • 据我所知,在 CPU 和 GPU 上,每个 session.run 调用确实只运行一次迭代。
    【解决方案3】:

    TPU 的字面意思是“张量处理单元”,它是一种用于计算的硬件设备,与使用 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 上运行,所以我从您链接到的文档中阅读的内容推断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-09
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多