跳转到主要内容
博客

PyTorch 1.3 添加移动、隐私、量化和命名张量

作者: 2019年10月10日2024年11月16日暂无评论

PyTorch 因其专注于满足研究人员的需求、精简的生产用工作流程以及最重要的是来自 AI 社区的热情支持,持续获得发展势头。O'Reilly 指出,仅在2019年上半年,ArXiv 上引用 PyTorch 的论文数量就增长了194%,并且在过去一年中,该平台的贡献者数量增长了50%以上,达到近1200人。Facebook、微软、优步以及各行各业的其他组织正越来越多地将其作为最重要的机器学习(ML)研究和生产工作负载的基础。

我们现在通过发布 PyTorch 1.3,进一步推动该平台发展,其中包括对一些实验性功能的支持,例如将模型无缝部署到移动设备、用于提高推理时性能的模型量化,以及前端改进,例如命名张量和创建更清晰的代码,从而减少对内联注释的需求。我们还将推出一系列额外的工具和库,以支持模型可解释性并将多模态研究投入生产。

此外,我们与谷歌和 Salesforce 合作,增加了对云端 Tensor Processing Units (TPUs) 的广泛支持,为训练大规模深度神经网络提供了显著加速的选项。阿里云也加入了亚马逊网络服务 (Amazon Web Services)、微软 Azure 和谷歌云 (Google Cloud) 的行列,成为 PyTorch 用户支持的云平台。您现在可以通过 pytorch.org 开始使用。

PyTorch 1.3

PyTorch 1.3 版本带来了重要的全新功能,包括对移动设备部署、8位整数的 eager 模式量化以及命名张量能力的实验性支持。通过这些增强功能,我们期待 PyTorch 社区做出更多贡献和改进。

命名张量 (实验性)

康奈尔大学的 Sasha Rush 曾提出,尽管张量的传统实现方式在深度学习中无处不在,但它存在显著的缺点,例如暴露私有维度、基于绝对位置进行广播以及在文档中保留类型信息。他提出了命名张量作为替代方法。

如今,我们通过注释来命名和访问维度。

# Tensor[N, C, H, W]
 images = torch.randn(32, 3, 56, 56)
 images.sum(dim=1)
 images.select(dim=1, index=0)

但明确命名可以带来更具可读性和可维护性的代码

NCHW = [‘N’, ‘C’, ‘H’, ‘W’]
   images = torch.randn(32, 3, 56, 56, names=NCHW)
   images.sum('C')
   images.select('C', index=0)

量化(实验性)

在开发机器学习应用时,高效利用服务器端和设备上的计算资源至关重要。为了支持在服务器和边缘设备上更高效地部署,PyTorch 1.3 现在通过熟悉的 eager 模式 Python API 支持8位模型量化。量化是指用于以降低精度(例如8位整数)执行计算和存储的技术。这项目前处于实验阶段的功能包括对训练后量化、动态量化和量化感知训练的支持。它利用了 FBGEMMQNNPACK 这两个分别用于 x86 和 ARM CPU 的最先进的量化核后端,它们已与 PyTorch 集成并现在共享一个通用 API。

要了解有关设计和架构的更多信息,请查阅此处的 API 文档,并通过此处提供的教程开始使用任何受支持的技术。

PyTorch 移动版(实验性)

随着应用对更低延迟的需求不断增长,在边缘设备上运行机器学习的重要性日益增加。它也是联邦学习等隐私保护技术的基础要素。为了实现更高效的设备上机器学习,PyTorch 1.3 现在支持从 Python 到在 iOS 和 Android 上部署的端到端工作流程。

这是一个早期实验版本,针对端到端开发进行了优化。即将发布的版本将侧重于:

  • 大小优化:根据用户应用所需的算子进行构建级别优化和选择性编译(即,您只需为您所需的算子支付二进制大小)
  • 性能:进一步提高移动 CPU 和 GPU 的性能和覆盖范围
  • 高级 API:扩展移动原生 API,以涵盖在移动应用中整合机器学习所需的常见预处理和集成任务,例如计算机视觉和自然语言处理。

了解更多信息或在 Android 或 iOS 上开始使用,请访问此处

模型可解释性和隐私的新工具

Captum

随着模型变得越来越复杂,开发新的模型可解释性方法变得越来越重要。为了帮助解决这一需求,我们推出了 Captum,这是一个工具,旨在帮助 PyTorch 开发人员理解其模型为何会产生特定的输出。Captum 提供了最先进的工具,可以理解特定神经元和层的重要性以及它们如何影响模型做出的预测。Captum 的算法包括集成梯度 (integrated gradients)、传导 (conductance)、SmoothGrad 和 VarGrad,以及 DeepLift。

下面的示例展示了如何在预训练的 ResNet 模型上应用模型可解释性算法,然后通过将它们叠加在图像上来可视化每个像素的归因。

noise_tunnel = NoiseTunnel(integrated_gradients)

attributions_ig_nt, delta = noise_tunnel.attribute(input, n_samples=10, nt_type='smoothgrad_sq', target=pred_label_idx)
_ = viz.visualize_image_attr_multiple(["original_image", "heat_map"],
                                      ["all", "positive"],
                                      np.transpose(attributions_ig_nt.squeeze().cpu().detach().numpy(), (1,2,0)),
                                      np.transpose(transformed_img.squeeze().cpu().detach().numpy(), (1,2,0)),
                                      cmap=default_cmap,
                                      show_colorbar=True)

captum.ai 了解更多关于 Captum 的信息。

CrypTen

通过基于云的或机器学习即服务(MLaaS)平台进行机器学习的实际应用带来了诸多安全和隐私挑战。特别是,这些平台的用户可能不想或无法共享未加密的数据,这使他们无法充分利用机器学习工具。为了解决这些挑战,机器学习社区正在探索一系列处于不同成熟度水平的技术方法。这些方法包括同态加密、安全多方计算、可信执行环境、设备端计算和差分隐私。

为了更好地了解这些技术如何应用,我们发布了 CrypTen,这是一个新的基于社区的研究平台,旨在推动隐私保护机器学习领域的发展。在此处了解更多关于 CrypTen 的信息。它在 GitHub 上可用

多模态人工智能系统工具

数字内容通常由多种模态组成,例如文本、图像、音频和视频。例如,一个公共帖子可能包含一张图片、正文、标题、一段视频和一个登录页面。即使一个特定的组件也可能包含多种模态,例如包含视觉和音频信号的视频,或由图像、文本和 HTML 源代码组成的登录页面。

与 PyTorch 配合使用的工具和库生态系统提供了增强的方式来应对构建多模态 ML 系统的挑战。以下是一些今天发布的最新库:

Detectron2

目标检测和分割用于从自动驾驶汽车到平台内容理解等各种任务。为了推进这项工作,Facebook 人工智能研究院 (FAIR) 正在发布 Detectron2,这是一个现在用 PyTorch 实现的目标检测库。Detectron2 支持最新的模型和任务,增加了灵活性以帮助计算机视觉研究,并改进了可维护性和可伸缩性以支持生产用例。

Detectron2 可在此处获取,您可以在此处了解更多信息。

fairseq 的语音扩展

语言翻译和音频处理是搜索、翻译、语音和助手等系统和应用中的关键组成部分。由于 Transformer 等新架构以及大规模预训练方法的发展,这些领域最近取得了巨大进步。我们扩展了 fairseq(一个用于语言翻译等序列到序列应用的框架),以支持语音和音频识别任务的端到端学习。fairseq 的这些扩展能够更快地探索和原型化新的语音研究想法,同时提供清晰的生产路径。

在此处开始使用 fairseq

云服务提供商和硬件生态系统支持

亚马逊网络服务、微软 Azure 和谷歌云等云服务提供商为所有希望在 PyTorch 上开发机器学习并投入生产的用户提供广泛支持。我们很高兴宣布谷歌云 TPU 支持的普遍可用性以及与阿里云的新集成。我们还在扩展硬件生态系统支持。

  • Google Cloud TPU 支持现已广泛可用。为了加速当今部署的最大规模机器学习 (ML) 应用,并实现未来 ML 应用的快速开发,Google 创建了名为 Tensor Processing Units (TPUs) 的定制芯片。当这些 TPU 被组装成名为 Cloud TPU Pods 的多机架 ML 超级计算机时,它们可以在几分钟或几小时内完成以前在其他系统上需要几天或几周才能完成的 ML 工作负载。Facebook、Google 和 Salesforce 的工程师们共同努力,在 PyTorch 中实现了并试用了 Cloud TPU 支持,包括对 Cloud TPU Pods 的实验性支持。Colab 中也提供了 PyTorch 对 Cloud TPU 的支持。在此处了解更多关于如何在 Cloud TPU 上开始使用 PyTorch 的信息
  • 阿里云在阿里云中增加了对 PyTorch 的支持。初步集成包括针对 PyTorch 1.x 的一键式解决方案、数据科学工作坊笔记本服务、Gloo/NCCL 分布式训练,以及与阿里云 IaaS(如 OSS、ODPS 和 NAS)的无缝集成。结合阿里云提供的工具链,我们期待显著降低采用所需的开销,并帮助阿里云的全球客户群利用 PyTorch 开发新的人工智能应用。
  • 机器学习硬件生态系统不断扩展。除了关键的 GPU 和 CPU 合作伙伴之外,PyTorch 生态系统还为专用机器学习加速器提供了支持。英特尔Habana 的更新展示了 PyTorch 如何通过连接到 Glow 优化编译器,使开发人员能够利用这些针对特定市场的解决方案。

PyTorch 社区的成长

作为一个开源的、社区驱动的项目,PyTorch 受益于广泛的贡献者为生态系统带来新功能。以下是一些最近的例子:

  • Mila SpeechBrain 旨在提供一个基于 PyTorch 的开源、一体化语音工具包。目标是开发一个单一、灵活、用户友好的工具包,可以轻松用于开发最先进的语音识别(包括端到端和 HMM-DNN)、说话人识别、语音分离、多麦克风信号处理(例如波束形成)、自监督学习等系统。了解更多
  • SpaCy 是一个新颖的封装库,具有一致且易于使用的多个模型接口,用于提取特征以驱动 NLP 流水线。通过 spaCy 的标准训练 API 提供支持。该库还计算对齐方式,以便可以将 transformer 特征与实际单词而非仅是单词片段关联起来。了解更多
  • HuggingFace PyTorch-Transformers(以前称为 pytorch-pretrained-bert)是一个用于自然语言处理 (NLP) 的最先进预训练模型库。该库目前包含 BERT、GPT-2、RoBERTa 和 DistilBERT 等模型的 PyTorch 实现、预训练模型权重、使用脚本和转换工具。它也发展迅速,在 GitHub 上拥有超过 13,000 颗星,并拥有广泛的用户群体。了解更多
  • PyTorch Lightning 是一个类似于 Keras 的 PyTorch 机器学习库。它将核心训练和验证逻辑留给您,并自动化其余部分。可重复性是许多研究领域(包括基于机器学习技术的领域)的关键要求。随着提交给 arXiv 和会议的论文数量飙升至数万篇,扩大可重复性变得困难。了解更多

我们最近举办了首届全球 PyTorch 夏季线上黑客马拉松,邀请世界各地的研究人员和开发人员使用 PyTorch 构建创新的新项目。近1500名开发人员参与其中,提交的项目范围从牲畜疾病检测到人工智能驱动的金融助手。获奖项目是:

  • Torchmeta,它为 PyTorch 提供扩展,以简化 PyTorch 中元学习算法的开发。它具有受 TorchVision 启发,用于少样本分类和回归问题的统一接口,可以轻松在多个数据集上进行基准测试,从而有助于提高可重复性。
  • Open-Unmix,一个使用 PyTorch 进行端到端音乐分离的系统。分离可以将任何立体声录音中的单个乐器或人声轨道分离出来。
  • Endless AI-Generated Tees,一家销售人工智能生成T恤设计的商店,可全球购买和配送。该系统使用一个最先进的生成模型(StyleGAN),该模型用 PyTorch 构建,然后在现代艺术作品上进行训练。

请访问pytorch.org,了解更多信息并开始使用 PyTorch 1.3 以及最新的库和生态系统项目。我们期待社区使用 PyTorch 构建的贡献、激动人心的研究进展和实际应用。

我们感谢整个 PyTorch 团队和社区为这项工作做出的所有贡献。