cra*_*aft 1 google-compute-engine google-cloud-platform tensorflow google-cloud-tpu
因此,我知道如何定义时间段,训练步骤,批处理大小以及此类内容,但是,要让我全神贯注于TPU术语(例如,训练循环,每个循环的迭代次数等)真的很难。我读了这篇文章,但我仍然感到困惑。
另外,例如,我如何基准测试每个循环的迭代时间。
任何解释都会对我有很大帮助。谢谢!
正如其他答案所描述的那样,iterations_per_loop是一个调整参数,用于控制TPU在再次签入之前所做的工作量。较低的数字可让您更频繁地检查结果(并对其进行基准测试),而较高的数字可减少由于同步而产生的开销。
这与熟悉的网络或文件缓冲技术没有什么不同;更改其值会影响性能,但不会影响最终结果。相比之下,ML超参数一样num_epochs,train_steps或train_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可以在“水站”停下来的一个地方,在该“水站”中,训练暂时暂停以执行各种任务(基准测试,检查点检查,其他家政服务)。
| 归档时间: |
|
| 查看次数: |
664 次 |
| 最近记录: |