TensorFlow 新 Profiler 简介
2020 年 4 月 15 日
发布者:Anirudh Sriram,技术作家,以及 Gal Oshri,产品经理

性能是成功 ML 研究和生产解决方案的关键考虑因素。更快的模型训练可以加快迭代速度并减少开销。有时,它也是使特定 ML 解决方案可行的必要条件。

但是,并不总是清楚应该优化什么。是否与特定操作(op)或输入管道有关问题?

为了帮助解决这个问题,我们开发了一套用于 TensorFlow 性能分析的工具。除了能够捕获和调查配置文件的众多方面之外,这些工具还提供了解决性能瓶颈的指南(例如,输入绑定程序)。

这些工具由改进 TensorFlow 基础架构的底层专家以及 Google 最热门产品的工程师用来优化其模型性能。我们希望让更广泛的社区能够利用 Google 在性能分析中使用的工具。这就是为什么我们最近开源了新的 TensorFlow Profiler
TensorFlow Profiler 概述页面

什么是 TensorFlow Profiler?

TensorFlow Profiler(或 Profiler)提供了一套工具,您可以使用这些工具来衡量 TensorFlow 模型的训练性能和资源消耗。这个新版本的 Profiler 集成到了 TensorBoard 中,并建立在现有功能(例如跟踪查看器)之上。

Profiler 提供了以下新的分析工具:
  • 概述页面:提供模型性能的顶级视图,并提供优化性能的建议
  • 输入管道分析器:分析模型的数据输入管道以查找瓶颈,并建议改进以提高性能
  • TensorFlow 统计信息:显示在分析会话期间执行的每个 TensorFlow 操作的性能统计信息
  • GPU 内核统计信息:显示每个 GPU 加速内核的性能统计信息和来源操作
查看 Profiler 指南(在 TensorFlow 文档中)以了解有关这些工具的更多信息。

入门

开始使用 Profiler 的最佳方法是按照 Colab 教程 此处的操作进行。我们在博客文章中将介绍一些重要的步骤和见解。首先,我们为 TensorBoard 安装 Profiler 插件
pip install -U tensorboard_plugin_profile
这将为我们的 TensorBoard 安装添加完整的 Profiler 功能。接下来,我们确保模型训练捕获了配置文件。在这种情况下,我们将在 Keras 中使用 TensorBoard 回调
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir = logs,
                                                      profile_batch = '500,510')
我们可以使用 profile_batch 参数选择要分析的批次。这使我们能够选择要捕获的步骤数量(建议不超过 10 个)。它还有助于我们跳过前几个批次,以避免由于初始化开销而导致的不准确性。其他捕获配置文件的方法 在此处进行了描述。我们现在使用以下命令启动 TensorBoard
tensorboard --logdir {log directory}    # in terminal
%tensorboard --logdir {log directory}   # in Colab
单击配置文件后,我们将看到概述页面: 这立即向我们提供了程序性能的指示。除了有用的摘要外,我们还看到一个建议,告诉我们程序是输入绑定的(这意味着我们的加速器浪费了等待输入的时间)。这是一个非常常见的问题。

通过按照教程中的说明操作,我们可以将我们的平均步骤时间从 ~30 毫秒降低到 ~3 毫秒。这是一个 10 倍的改进!虽然这是一个玩具示例,但我们经常听到 Google 的工程师和研究人员说他们设法通过显著因素改善了性能。

建议

性能优化是一个迭代过程,有时会令人沮丧,因为很难确定程序中瓶颈的确切位置。Profiler 不仅可以告诉您程序中存在哪些瓶颈,还可以告诉您如何解决这些问题并使代码更快地执行。按照提供的建议操作可以缩短优化程序所需的总时间。

当您打开 TensorBoard 查看分析结果时,概述页面会在步长时间图下方提供代码优化建议。缓慢代码执行的最常见原因之一是数据输入管道配置不当。利用输入管道分析器的功能有效地识别和消除数据输入管道中的瓶颈。阅读 Profiler 指南的最佳实践部分,以了解有关您可以使用的其他策略以获得最佳性能的更多信息。

更多资源

查看以下资源以了解更多信息

TensorFlow Profiler 的下一步是什么?

除了解决反馈之外,我们还在扩展 Profiler 的功能。我们目前正在努力的几个领域:
  • 内存分析器:查看随时间的内存使用情况以及相关的 op/训练步骤。
  • Keras 分析:启用将 Profiler 中的信息链接到 Keras。例如,这可以识别与跟踪查看器中显示的 ops 对应的 Keras 层。
  • 多工作器 GPU 分析:启用分析多个 GPU 工作器并汇总结果。分析热点和工作器之间的通信。
我们很高兴继续将 Google 用于改善 ML 性能的工具带给更广泛的社区。如果您有特定的功能可以为您提供最大帮助,或者要报告错误,请随时 在此处打开问题!

下一篇文章
Introducing the new TensorFlow Profiler

发布者:Anirudh Sriram,技术作家,以及 Gal Oshri,产品经理

性能是成功 ML 研究和生产解决方案的关键考虑因素。更快的模型训练可以加快迭代速度并减少开销。有时,它也是使特定 ML 解决方案可行的必要条件。

但是,并不总是清楚应该优化什么。是否与……有关问题