TPU术语混乱

cra*_*aft 1 google-compute-engine google-cloud-platform tensorflow google-cloud-tpu

因此,我知道如何定义时间段,训练步骤,批处理大小以及此类内容,但是,要让我全神贯注于TPU术语(例如,训练循环,每个循环的迭代次数等)真的很难。我读了这篇文章,但我仍然感到困惑。

另外,例如,我如何基准测试每个循环的迭代时间。

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

Der*_*nes 5

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

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

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

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)
Run Code Online (Sandbox Code Playgroud)

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

编辑2:下面是一种通过竞赛隐喻可视化正在发生的事情的方法。可以将TPU看作是有很多train_steps示例的竞赛,它的步伐让它一步步涵盖了一批示例。比赛在赛道上,比总比赛距离短;一圈的长度是您训练示例的总数,赛道上的每一圈都是一个纪元。您可以认为iterations_per_loop这是TPU可以在“水站”停下来的一个地方,在该“水站”中,训练暂时暂停以执行各种任务(基准测试,检查点检查,其他家政服务)。

TPU ML训练循环

  • 不,每次传递到TPU的示例总数为`train_batch_size * erations_per_loop`。我添加了动画片以帮助说明训练循环。 (2认同)
  • 为了卡通!**`+1`** (2认同)