作者:Maxim Lukiyanov - 微软首席产品经理,Guoliang Hua - 微软首席工程经理,Geeta Chauhan - Facebook 合作伙伴工程主管,Gisle Dankel - Facebook 技术主管

随着 PyTorch 1.8.1 版本发布,我们很高兴地宣布 PyTorch Profiler - PyTorch 新的改进的性能调试分析器。PyTorch Profiler 是微软和 Facebook 合作开发的开源工具,它能够对大型深度学习模型进行准确高效的性能分析和故障排除。

分析和改进大型深度学习模型的性能是一个持续存在的挑战,随着模型规模的不断增大,这一挑战变得越来越重要。长期以来,PyTorch 用户由于缺乏可用工具而难以解决这一挑战。存在提供 GPU 硬件级信息的标准性能调试工具,但它们缺少针对 PyTorch 操作的特定上下文。为了恢复丢失的信息,用户需要将多个工具组合在一起,或手动添加最小相关信息以解读数据。还有 autograd 分析器(torch.autograd.profiler),它可以捕获有关 PyTorch 操作的信息,但无法捕获详细的 GPU 硬件级信息,也无法提供可视化支持。

新的 PyTorch Profiler(torch.profiler)是一个工具,它将两种类型的信息整合在一起,并构建了能够充分发挥这些信息潜力的体验。这款新的分析器收集了 GPU 硬件和 PyTorch 相关信息,并将它们关联起来,自动检测模型中的瓶颈,并生成有关如何解决这些瓶颈的建议。分析器中的所有这些信息都以可视化方式展示给用户,并在 TensorBoard 中显示。新的分析器 API 在 PyTorch 中得到原生支持,提供迄今为止最简单的体验,用户无需安装任何额外软件包即可分析其模型,并立即在 TensorBoard 中查看结果,使用新的 PyTorch Profiler 插件。以下是 PyTorch Profiler 自动瓶颈检测的屏幕截图。

入门

PyTorch Profiler 是 PyTorch autograd 分析器的下一版本。它有一个新的模块命名空间 torch.profiler,但保持与 autograd 分析器 API 的兼容性。分析器使用新的 GPU 分析引擎,该引擎使用 Nvidia CUPTI API 构建,能够以高保真度捕获 GPU 内核事件。要分析模型训练循环,请将代码封装在分析器上下文管理器中,如下所示。

 with torch.profiler.profile(
    schedule=torch.profiler.schedule(
        wait=2,
        warmup=2,
        active=6,
        repeat=1),
    on_trace_ready=tensorboard_trace_handler,
    with_stack=True
) as profiler:
    for step, data in enumerate(trainloader, 0):
        print("step:{}".format(step))
        inputs, labels = data[0].to(device=device), data[1].to(device=device)

        outputs = model(inputs)
        loss = criterion(outputs, labels)

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        profiler.step()

schedule 参数允许您限制分析中包含的训练步骤数量,从而减少收集的数据量,并通过专注于重要信息来简化可视化分析。 tensorboard_trace_handler 自动将分析结果保存到磁盘,以便在 TensorBoard 中进行分析。

要在 TensorBoard 中查看分析会话的结果,请安装 PyTorch Profiler TensorBoard 插件包。

pip install torch_tb_profiler

Visual Studio Code 集成

Microsoft Visual Studio Code 是 Python 开发人员和数据科学家最受欢迎的代码编辑器之一。VS Code 的 Python 扩展 最近将 TensorBoard 集成到代码编辑器中,包括对 PyTorch Profiler 的支持。安装 VS Code 和 Python 扩展后,您可以通过使用键盘快捷键 CTRL + SHIFT + P(在 Mac 上为 CMD + SHIFT + P)启动命令面板,并键入“启动 TensorBoard”命令,快速打开 TensorBoard 分析器插件。

此集成具有内置的生命周期管理功能。如果您在系统中没有安装 TensorBoard 包和 PyTorch Profiler 插件包(将于 4 月中旬发布),VS Code 会自动安装它们。VS Code 还会为您启动 TensorBoard 进程,并自动查找当前目录中的任何 TensorBoard 日志文件。完成后,只需关闭选项卡,VS Code 会自动关闭进程。不再需要在系统上运行终端窗口来提供 TensorBoard UI 的后端!以下是 TensorBoard 中运行的 PyTorch Profiler 跟踪视图。

了解有关 VS Code 中 TensorBoard 支持的更多信息,请访问 此博客.

反馈

查看 PyTorch Profiler 文档,试用分析器,并告知我们您的体验。在 PyTorch 讨论论坛 上提供您的反馈,或在 PyTorch GitHub 上提交问题。