返回开发者新闻

Summer of open source: building more efficient AI with PyTorch

2022年9月20日发布者:Suraj Subramanian

说明:特别感谢 Meta AI 合作伙伴工程师 Less Wright 审阅本帖,并补充洞见。

这篇关于创建高效人工智能 (AI) 的帖子是“开源之夏”系列中的第二篇。在某些领域中,开源项目正积极影响着 Meta 及其他平台,而该系列文章旨在就这些领域,提供些许有用的资源和学习内容。在其他一些领域中,Meta 开源项目通过分享创新型可扩展工具推动着行业进步,跟随我们一同探索这些领域吧。

PyTorch:从基础性技术到基金会

自 2016 年初始版本推出以来,PyTorch 已广泛应用于深度学习社群,其研究基础不断扩大,现可应用于生产场景。现在是机器学习 (ML) 和人工智能 (AI) 的黄金时代,人工智能模型的新方法和用例持续增加。在这样的背景下,PyTorch 转移到了 Linux 基金会旗下新成立的独立 PyTorch 基金会,开启了自身历史新篇章。此基金会由多元化管理委员会组成,该委员会由来自 AMD、Amazon Web Services、Google Cloud、Microsoft Azure 和 Nvidia 的民意代表组成,并且规模会逐步扩大。基金会的任务包括通过供应商中立项目推动人工智能工具的采用,以及对所有人开放开源工具、库及其他组件。此外,转移到基金会后,PyTorch 及其开源社群还可持续帮助人工智能和机器学习领域加快从原型设计到生产的进程。

使用 Meta 开源项目简化人工智能流程

PyTorch 有力证明了开源项目的影响力。PyTorch 是早期的一个深度学习开源框架,已帮助不同学科的用户完成深度学习试验,并将其工作成果应用于大量领域。PyTorch 支持一切场景,无论是搜索应用程序试验无人驾驶汽车开发,还是探地雷达,都只是其中最新的几种应用场景。在人工智能工具通用库和开源社群的支持下,技术可以大规模地快速迭代并适应大量不同的应用场景。

人工智能的实现范围日益广泛,处理复杂问题的模型规模随之持续增长,这也意味着训练这些模型所需的资源大幅增加。所幸开发者社群里有许多人已经认识到,考虑到可行性和环境因素,模型需要减少资源消耗。本帖子将探索量化及其他类型的模型压缩为什么有助于实现高效人工智能。

设定使用 PyTorch 的起点

本帖子大部分是探索 PyTorch 的某些中高级功能。如果您是着眼于入门的新手或目前正在使用其他库的专家,从一些基本知识着手是最简单的办法。请参阅 PyTorch 新手指南,其中包括使用 Fashion MNIST 数据集的完整机器学习工作流程介绍。

如果您是 PyTorch 新手,可参阅一些其他资源,如下所示:

  • PyTorch 社群动态:了解 PyTorch 对农业、教育、旅游等不同行业产生的影响
  • PyTorch 新手系列视频:探索基本技术视频播单,其中包括张量入门指南、在 PyTorch 中构建模型、训练与推理。

量化:将经过时间检验的技术应用于人工智能

提高人工智能效率的途径很多。协同设计硬件和软件来优化人工智能非常有效,但开发定制软硬件解决方案需要大量时间和资源。创建速度更快,规模更小的架构是提高效率的另一途径,但与较大的模型相比,上述许多架构都存在准确率下降问题,至少目前情况如此。更简单的方法是设法减少训练和处理现有模型所需的资源。PyTorch 会通过量化方式压缩模型,进而减少模型所需资源。

量化是一种数学方法,使用此方法可创建有损数字音乐文件,以及将模拟信号转换为数字信号。通过以较低的精度进行数学计算,量化可显著提高许多硬件平台的性能。使用量化为什么可以提高人工智能的效率?结果表明,在某些情况下,使用此相对简单的方法可显著加快模型推理速度(提速 2-4 倍)。

深度学习模型的参数通常是浮点 (FP) 精度小数;每个参数都需要 16 位或 32 位内存。量化方法通常会将数字转化为 INT4 或 INT8,因此只需占用 4 位或 8 位内存。这样可减少模型需要占用的内存量。此外,芯片制造商还加入了特殊算法,使整数运算比小数运算快。

可用于训练模型的量化方法有 3 种:动态、静态和量化感知训练 (QAT)。下表简述了这些方法的优势和劣势。如需了解如何在人工智能工作流程中实施这些方法,请参阅博文 PyTorch 中的可行量化方法

量化方法

优势

劣势

动态

  • 仅需单个 API 调用,十分易用
  • 分布趋势更稳定,准确率略微提高
  • 很适合长短时记忆 (LSTM) 模型和 Transformer 模型

每次向前传递都需要耗费额外性能

静态(也称为 PTQ)

  • 与动态量化相比,因无需考虑性能消耗,所以推理速度更快

分布趋势可能需要定期重新校准

量化感知训练 (QAT)

  • 准确率比静态量化高
  • 推理速度比动态量化快

计算成本高

加快人工智能工作流程速度的其他功能

对于采用 PyTorch 的人工智能而言,量化并不是提高效率的唯一方法。各种功能都会定期更新,PyTorch 改善人工智能工作流程的一些其他方法如下:

  • 推理模式:如果仅使用代码运行推理,可使用此模式编写 PyTorch 代码。使用张量加快推理速度时,使用推理模式可更改某些假设条件。在通知 PyTorch 稍后不对某些应用程序使用张量(此时使用 autograd)后,此框架会在这些特定场景下作出调整,提高代码运行速度。

  • 低精度:仅在推理时(即在训练模型后)进行量化处理。在训练过程中,PyTorch 使用 AMP(自动混合精度)训练,以根据使用的张量找到最佳格式(FP16、FP32 或 BF16)。PyTorch 中的低精度深度学习具有一些优势。此功能有助于缩减模型大小,减少训练模型所需的内存,以及降低运行模型所需的性能。如需了解更多信息,请参阅有关对支持 CUDA 的 GPU 使用 AMP 的教程。

  • 通道维靠后:使用视觉模型时,NHWC(另称为“通道维靠后”)是 PyTorch 中的一种速度较快的张量内存格式。以通道维靠后格式存储数据可加快 PyTorch 的运行速度。将输入张量的格式设置为通道维靠后可减少在不同格式类型之间转换所需的性能消耗,从而提高推理速度。

  • 推理优化:此 TorchScript 原型可实现某些通用优化,以在各种环境下加速模型,还可使用特定版本设置准备模型进行推理。目前主要用例包括在 CPU(和 GPU)上运行的视觉模型。由于是原型,用户可能会遇到问题。您可提出 PyTorch GitHub 存储库的相关问题。

发现 PyTorch 的新潜力

PyTorch 博客会定期探讨加快人工智能工作流程速度的新方法。您可在其中及时了解最新技术,比如 BetterTransformer,在通常的运行场景下,该技术可使 Transformer 模型的速度和吞吐量最多提高 2 倍。如果有兴趣了解如何在 PyTorch 中实现特定功能,请参阅技巧页面,您可按类别搜索内容,比如模型优化、分布式训练和可解读性。本帖子只介绍了 PyTorch 等工具如何推动开源和人工智能发展。

如需及时掌握 Meta 开源项目最新动向,了解人工智能和机器学习,请访问我们的开源网站、订阅我们的 YouTube 频道,或在 FacebookTwitterLinkedIn 上关注我们。