数据科学专家分为两个阵营:那些认为神经网络学习太慢的人,以及那些很快也会开始这么认为的人。在本文中,我们将告诉您如何使用分析来分析和改进机器学习应用程序。
将应用程序从一种服务器配置迁移到另一种服务器配置时,常常会出现性能问题。通常,客户和技术支持工程师会分析超线程、内存频率、计算核心、库版本和其他间接指标的差异。更详细的研究需要采取协调一致的行动,这往往会导致数据保密性的侵犯,这归结于 IT 官僚机构。因此,事实证明,“高级”客户在帮助“自己”方面会更有效。很少有神经网络开发人员能够真正“深入了解”应用程序并详细跟踪影响其性能的影响。让我们尝试揭开这层面纱,看看应该使用哪些技巧和技巧。
GPU 上的代码优化
在神经网络技术蓬勃发展之前,GPU 应用程序的开发仅限于用 CUDA 语言编写内核函数。但是,与 CPU 不同,GPU 没有可以消除负面影响的子系统:大缓存、未对齐地址的小惩罚、分支预测等。因此,GPU代码的适当优化成为一个关键问题。让我们通过一个清晰的示例来了解这一点:下面是双线性滤波器的CUDA 实现 的片段。
事实证明,编译器无法识别像素加载过程
并为单字节值而不是整个 RGBA 向量生成汇编代码。考虑到 L1 缓存忙于支持其他操作的程度,负面影响将被 L1 缓存部分吸收。但这样的解决方案仍然会显着减慢应用程序的速度。在 Tesla V100 GPU 的大图像(6496px × 6618px × 24bpp)中,速度差异约为 40%:
但主要问题是开发人员如何注意到这种情况?经验和知识需要时间和金钱。定期阅读汇编代码会有所帮助,但在实践中不太现实。因此,出现了更多通用的分析工具,例如:
GPU中的硬件 计数器
用于收集程序运行的统计数据;
处理计数器数据并将其组合成应用程序的定性特征的指标 。
粗略地说, GPU 占用率这样重要的指标类似于您的智能手机在安兔兔程序中的评级。收集和分析指标称为分析。通过分析获得的应用程序性能信息更容易分析和使用,以提高性能。因此,NVIDIA Visual Profiler 程序将计数器和指标转化为图形和图表,甚至给出优化提示。让我们考虑一下它的主要功能。
职能电子邮件数据组 织的战略资 在当今数据驱动 的环境中有效的沟通策略对于 组织的成功 工作职能邮件数据库 至 关重要。该策略的个重要组成部分是建立全面的职能电子邮件 数据库。该资源不仅 可以增强内部沟通还可以促进有针对性的外部推广从而改变组 织与各种利益相关者互动的方式。
NVIDIA Visual Profiler 中的内存使用情况分析示例
NVIDIA Visual Profiler 评测
NVIDIA Visual Profiler 是一款图形分析工具,可显示应用程序运行时 CPU 和 GPU 负载的历史记录。该程序自动分析 GPU 核心并帮助识别优化机会。
准备您的应用程序进行分析
CUDA 分析工具不需要任何应用程序修改,但几个简单的步骤就可以大大提高流程的可用性和效率。
使用 Visual Profiler 时的主要建议是使用小区域进行分析。默认情况下,数据是在整个运行过程中收集的,但最好只分析关键位置。这样您就可以专注于其优化将导致性能显着提高的代码。将 Visual Profiler 与大型且复杂的应用程序一起使用可能会导致 JVM 引擎挂起,因此最好运行它的时间不要超过 30 秒。
还值得为您的 CPU 和 CUDA 资源指定自定义名称,
因为 Visual Profiler 时间线中的默认名称不太具有描述性。通过使用更清晰、更具描述性的名称,您可以加深对应用程序行为的理解,尤其是当它包含多个设备、上下文或线程时。
创建分析会话
使用 Visual Profiler 的第一步是 手机号码列表 创建一个新的分析会话。它将包含您的应用程序的设置、数据和分析结果。为此,您需要指定可执行文件,如果需要,还需要指定工作目录、参数、多进程分析参数和环境变量。通过此功能,您可以设置要处理的特定进程、打开或关闭时间线以及为 CUDA 和 CPU 设置各种分析选项。
应用设置后,Visual Profiler 将立即启动您的应用程序并开始收集第一轮引导分析所需的数据(除非您在创建会话时选择了“不运行引导分析”选项)。引导分析系统可用于提供提高应用程序性能的建议。
您还将看到一个时间线,显示应用程序运行时的 CPU 和 GPU 活动。此外,您还可以查看分析过程中收集的具体指标和事件值。让我们尝试找出结果的组成以及如何使用它们进行进一步优化。
结果分析
—时间轴
在 Visual Profiler 中,您可以在不同选项卡中同时打开多个时间线。下图显示了 CUDA 应用程序的规模:
顶部是自分析应用程序以来经过的 购买电话营销联系人列表 水平时间戳。左侧显示执行单元:进程(process)、线程(thread)、GPU(device)、上下文(context)、内核(kernel)、流(stream)等。 (完整列表可以在文档中找到)。中心有反映各个元素活动的线条。每行显示任何进程开始和结束之间的时间间隔。例如,内核旁边的行显示该内核执行的开始和结束时间。
-分析
分析视图显示应用程序分析的结果。有两种模式可用:托管和非托管。在引导模式下,系统会运行多个分析阶段,以帮助您了解性能瓶颈并指出优化应用程序的机会。在无引导模式下,您可以独立运行必要的步骤并研究其结果。下图显示了一种引导分析。