使用事件探查器优化TensorFlow性能
使用Profiler随附的工具来跟踪TensorFlow模型的性能。查看模型在主机(CPU),设备(GPU)或主机与设备的组合上的性能。
分析可帮助您了解模型中各种TensorFlow操作(ops)的硬件资源消耗(时间和内存),并解决性能瓶颈,最终使模型执行更快。
本指南将引导您逐步了解如何安装Profiler,可用的各种工具,Profiler收集性能数据的方式不同,以及一些建议的最佳实践以优化模型性能。
如果要在Cloud TPU上分析模型性能,请参阅 Cloud TPU指南。
安装Profiler和GPU必备组件
通过install_and_run.py
从GitHub存储库下载并运行脚本来安装Profiler 。
要在GPU上进行分析,您必须:
- 满足TensorFlow GPU支持软件要求上列出的NVIDIA®GPU驱动程序和CUDA®Toolkit 要求。
-
确保路径上存在CUPTI:
/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH) | \ grep libcupti
如果路径上没有CUPTI,请$LD_LIBRARY_PATH
通过运行以下命令将其安装目录添加到 环境变量之前:
export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
ldconfig
再次运行上面的命令以验证是否找到了CUPTI库。
解决特权问题
当您在Docker环境中或Linux上使用CUDA®Toolkit进行性能分析时,可能会遇到与CUPTI特权不足(CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
)相关的问题。请参阅 NVIDIA开发人员文档, 以了解有关如何在Linux上解决这些问题的更多信息。
要解决Docker环境中的CUPTI特权问题,请运行
docker run option '--privileged=true'
探查器工具
从TensorBoard中的“轮廓”选项卡访问Profiler,该选项卡仅在您捕获了一些模型数据后才会显示。
注意:探查器需要Internet访问才能加载 Google图表库。如果您在本地计算机,公司防火墙或数据中心内完全脱机运行TensorBoard,则可能会丢失某些图表。
Profiler提供了一些工具来帮助进行性能分析:
- 概述页面
- 输入管道分析仪
- TensorFlow统计
- 跟踪查看器
- GPU内核统计
- 内存配置文件工具
- 在观众之下
概述页面
概述页面提供了模型在概要文件运行期间的性能的顶级视图。该页面为您显示了主机和所有设备的汇总概述页面,并提供了一些改善模型训练性能的建议。您还可以在“主机”下拉列表中选择单个主机。
概述页面显示数据,如下所示:
-
性能摘要-显示模型性能的高级摘要。性能摘要分为两部分:
-
步进时间细分-将平均步进时间分为花费时间的多个类别:
- 编译-编译内核所花费的时间
- 输入-读取输入数据所花费的时间
- 输出-读取输出数据所花费的时间
- 内核启动-主机启动内核所花费的时间
- 主机计算时间
- 设备到设备的通信时间
- 设备上的计算时间
- 所有其他,包括Python开销
-
设备计算精度-报告使用16位和32位计算的设备计算时间的百分比
-
-
步骤时间图-显示所有采样步骤中设备步骤时间的图表(以毫秒为单位)。每个步骤都分为花费时间的多个类别(具有不同的颜色)。红色区域对应于设备处于空闲状态等待主机输入数据的步骤时间的一部分。绿色区域显示设备实际工作了多少时间
-
设备上的前10个TensorFlow操作-显示运行时间最长的设备上操作。
每行显示一个操作者的自身时间(所有操作者所用时间的百分比),累积时间,类别和名称。
-
运行环境-显示模型运行环境的高级摘要,包括:
- 使用的主机数
- 设备类型(GPU / TPU)
- 设备核心数
-
后续步骤的建议-报告绑定模型的时间,并建议可用于查找和解决模型性能瓶颈的工具
输入管道分析仪
当TensorFlow程序从文件读取数据时,它以流水线方式从TensorFlow图的顶部开始。读取过程分为多个串联的数据处理阶段,其中一个阶段的输出是下一个阶段的输入。这种读取数据的系统称为 输入管道。
从文件读取记录的典型管道具有以下阶段:
- 文件读取
- 文件预处理(可选)
- 从主机到设备的文件传输
输入管道效率低下会严重降低您的应用程序速度。当应用程序在输入管道中花费大量时间时,该应用程序将被视为输入绑定。使用从输入管道分析器获得的见解来了解输入管道效率低下的地方。
输入管道分析器会立即告诉您程序是否受输入限制,并引导您进行设备和主机侧分析,以调试输入管道中任何阶段的性能瓶颈。
有关优化数据输入管道的建议最佳实践,请参阅有关输入管道性能的指南。
输入管道仪表板
要打开输入管道分析器,请选择Profile,然后从“工具”下拉列表中选择 input_pipeline_analyzer。
仪表板包含三个部分:
- 摘要-总结整个输入管道,其中包含有关您的应用程序是否受输入绑定以及(如果有)输入多少的信息。
- 设备端分析-显示详细的设备端分析结果,包括设备步长时间以及每个步骤等待跨内核输入数据所花费的设备时间范围
- 主机端分析-显示主机端的详细分析,包括主机上输入处理时间的细分
输入管道摘要
摘要通过显示等待主机输入所花费的设备时间百分比来报告您的程序是否受输入约束。如果您使用已检测的标准输入管道,则该工具将报告大部分输入处理时间在何处。
设备端分析