作者:Eric Sondhi, Arm

PyTorch 是用于训练和部署复杂神经网络的最广泛使用、最强大的深度学习框架之一。现在训练和部署 AI 应用变得前所未有的容易,并且用于创建优化工作流程的低成本、高性能、高能效硬件、工具和技术也比以往任何时候都更容易获取。但是,数据科学、机器学习和 DevOps 本身都是深入的主题,对于只有单一专长的开发者来说,看到它们如何在现实世界中结合起来,甚至知道从何处开始,可能会感到不知所措。

为此,我们 Arm 与 GitHub 的朋友合作,分解了使用 PyTorch 模型的实际 MLOps 流水线的基本要素,并创建了一个简化的工作流程和 MLOps 教程,任何拥有 GitHub 和 Docker Hub 账户的人都可以利用它。

MLOps 概述

机器学习应用的软件开发生命周期通常始于训练数据,这些数据用于训练复杂的神经网络 (NN),这些神经网络经过优化后,被集成到软件镜像中,然后部署到计算集群甚至现场的设备群。这些设备通常会持续收集数据,并由云服务进行管理,云服务主动监控 ML 算法的性能,并将数据反馈用于生命周期的下一轮再训练——从而实现算法的持续改进,并支持部署新的 AI 功能。

process flow chart

典型的 ML 软件开发生命周期示例。

来自 GitHub 的 Scott Arbeit 最近发表了一篇精彩博文,强调了 MLOps 在机器学习中的重要性,并描述了如何通过简化的 GitHub Actions 实现以下几个关键任务的自动化:

  • 数据预处理:用于训练的数据清洗和准备。
  • 模型训练和验证: 在新数据推送或模型代码更改时自动执行训练脚本。
  • 部署: 在成功训练和验证后,将模型自动打包并部署到生产环境。
  • 监控和警报: 监控模型性能并在超出特定阈值时发送警报的工作流程。

文章还描述了一个概念性的高效 MLOps 流水线,该流水线利用原生集成到 GitHub Actions 中的新型低成本 Arm Runners 来训练和验证 PyTorch 模型。它还使用容器化来实现跨不同环境的一致部署。

我们 Arm 的团队将 GitHub 的想法和概念性工作流程付诸实践,并创建了一个教程,帮助您今天就开始使用。

优化您的 PyTorch MLOps 工作流程

一个新的 Arm 学习路径详细阐述了 Scott 博文中描述的各个关键阶段,并详细演示了每个关键任务,提供了指导性的说明和代码示例,以便利用 PyTorch 框架的多个方面来实现每个阶段。

process flow chart

使用 GitHub Actions 设置和自动化的关键 ML 任务。

通过这个学习路径,您将能够利用以下策略并结合一个实际的对象检测用例来创建您自己的精简 MLOps 工作流程:

  • 容器化:将您的 PyTorch 模型及其依赖项打包到 Docker 容器中,有助于确保跨不同环境的一致性能。
  • 高效数据加载:优化数据加载流水线,有助于最大限度地减少 I/O 瓶颈并最大化 GPU 利用率。
  • 模型优化:探索模型量化、剪枝和知识蒸馏等技术,有助于减小模型大小并提高推理速度。
  • 利用 PyTorch 的生态系统:利用 TorchVision 等库,有助于简化常见的深度学习任务。
  • 监控和性能分析:监控资源利用率并识别潜在瓶颈,以进一步优化您的工作流程。

端到端 MLOps 工作流程

这个学习路径最棒的地方在于,它不仅详细地带您完成每个任务,还将所有内容整合到一个统一的自动化工作流程中。

使用 GitHub Actions,您可以构建一个端到端的自定义 MLOps 工作流程,它结合并自动化了每个 ML 任务的独立工作流程。为了演示这一点,该存储库包含一个样板 .yml 文件中的工作流程,该文件自动化了各个步骤。

您可以使用原生 GitHub Actions 运行 MLOps 工作流程,管理 ML 应用生命周期中的所有步骤。

process flow chart

此 MLOps 工作流程在 GitHub Actions 中的成功运行。

亲自动手试试!

我们 Arm 的团队已经在实践中验证了这个教程,并在今年早些时候的 GitHub Universe 2024 大会上以工作坊的形式进行了讲解。现在轮到您亲自动手,体验 PyTorch 和 MLOps 了。

尝试 Arm 学习路径:点击此处

完成本教程后,您可以

  • 设置一个新的 GitHub Arm-runner,以原生方式构建 arm64 镜像,从而利用成本最低、能效最高的计算资源。
  • 使用德国交通标志识别基准 (GTSRB) 数据集训练和测试 PyTorch ML 模型。
  • 比较两个已训练的 PyTorch ML 模型的性能;一个模型使用 OpenBLAS(开放基本线性代数子程序库)和 oneDNN(深度神经网络库)编译,另一个模型使用 Arm Compute Library (ACL) 编译。
  • 将 ML 模型容器化并将容器推送到 DockerHub。
  • 使用 GitHub Actions 将每个任务自动化到单个 MLOps 流水线中。

将 PyTorch 的强大功能与 GitHub Actions 的简洁性以及原生 Arm Runners 的高效性相结合,显著有助于您加速深度学习开发和部署过程。遵循本博文中概述的最佳实践,有助于您的 PyTorch 项目实现最佳性能和成本效益。

我们很乐意看到您基于此示例创建的作品。如果您创建了自己的 Arm 学习路径,欢迎在此分享