PyTorch 因其专注于满足研究人员需求、简化的生产工作流程以及最重要的是获得了 AI 社区的热情支持而持续获得发展势头。正如 O’Reilly 所指出的,仅在 2019 年上半年,PyTorch 在 ArXiv 论文中的引用量就增长了 194%,平台贡献者数量在过去一年中增长了 50% 以上,达到近 1,200 人。Facebook、微软、Uber 以及各行各业的其他组织正越来越多地将其作为最重要的机器学习 (ML) 研究和生产工作负载的基础。
我们现在通过发布 PyTorch 1.3 进一步推动了该平台的发展,其中包括对以下功能的实验性支持:无缝模型部署到移动设备、用于提高推理时性能的模型量化以及前端改进,例如命名张量和创建更清晰的代码,减少对行内注释的需求。我们还推出了许多额外的工具和库,以支持模型可解释性并将多模态研究投入生产。
此外,我们与 Google 和 Salesforce 合作,增加了对云端张量处理单元 (Cloud TPU) 的广泛支持,为训练大规模深度神经网络提供了显著加速的选项。阿里云也与亚马逊网络服务 (Amazon Web Services)、微软 Azure 和 Google Cloud 一起,成为 PyTorch 用户支持的云平台。您现在可以在pytorch.org开始使用。
PyTorch 1.3
PyTorch 1.3 版本带来了重要的新功能,包括对移动设备部署、8 位整数急切模式量化和命名张量的实验性支持。通过这些增强功能,我们期待 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 现在支持使用熟悉的急切模式 Python API 进行 8 位模型量化。量化是指用于以降低精度(例如 8 位整数)执行计算和存储的技术。此当前实验性功能包括对训练后量化、动态量化和量化感知训练的支持。它利用了适用于 x86 和 ARM CPU 的最先进的量化内核后端 FBGEMM 和 QNNPACK,它们已集成到 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 配合使用的工具和库生态系统提供了增强的方法来解决构建多模态机器学习系统所面临的挑战。以下是今天发布的一些最新库:
Detectron2
物体检测和分割用于从自动驾驶汽车到平台内容理解等各种任务。为了推进这项工作,Facebook 人工智能研究部(FAIR)正在发布 Detectron2,这是一个现在在 PyTorch 中实现的物体检测库。Detectron2 支持最新的模型和任务,提高了灵活性以帮助计算机视觉研究,并改进了可维护性和可扩展性以支持生产用例。
Detectron2 可在此处获取,您可在此处了解更多信息。
fairseq 的语音扩展
语言翻译和音频处理是搜索、翻译、语音和助手等系统和应用程序中的关键组件。得益于 Transformer 等新架构的开发以及大规模预训练方法,这些领域最近取得了巨大的进步。我们扩展了 fairseq(一个用于语言翻译等序列到序列应用程序的框架),以支持语音和音频识别任务的端到端学习。这些对 fairseq 的扩展可以更快地探索和原型化新的语音研究思路,同时提供清晰的生产路径。
在此处开始使用 fairseq。
云服务提供商和硬件生态系统支持
亚马逊网络服务、微软 Azure 和谷歌云等云服务提供商为任何希望在 PyTorch 上开发机器学习并将其部署到生产环境的用户提供广泛支持。我们很高兴地宣布谷歌云 TPU 支持的普遍可用性以及与阿里云的新集成。我们还在扩展硬件生态系统支持。
- Google Cloud TPU 支持现已普遍可用。为了加速当今部署的最大规模机器学习 (ML) 应用程序并实现未来 ML 应用程序的快速开发,Google 创建了名为张量处理单元 (TPU) 的定制芯片。当组装成名为 Cloud TPU Pods 的多机架 ML 超级计算机时,这些 TPU 可以在几分钟或几小时内完成以前在其他系统上需要几天或几周才能完成的 ML 工作负载。Facebook、Google 和 Salesforce 的工程师共同努力,在 PyTorch 中启用并试点 Cloud TPU 支持,包括对 Cloud TPU Pods 的实验性支持。PyTorch 对 Cloud TPU 的支持也可在 Colab 中使用。在此处了解有关如何在 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) 的最先进预训练模型库。该库目前包含 PyTorch 实现、预训练模型权重、使用脚本以及 BERT、GPT-2、RoBERTa 和 DistilBERT 等模型的转换实用程序。它也发展迅速,拥有超过 13,000 个 GitHub 星标和广泛的用户群。了解更多
- PyTorch Lightning 是一个类似于 Keras 的 PyTorch 机器学习库。它将核心训练和验证逻辑留给您,并自动化其余部分。可重现性是许多研究领域(包括基于机器学习技术的领域)的关键要求。随着提交到 arXiv 和会议的研究论文数量飙升至数万篇,扩大可重现性变得困难。了解更多。
我们最近举办了首届全球 PyTorch 夏季黑客马拉松在线活动,邀请全球研究人员和开发者使用 PyTorch 构建创新的新项目。近 1,500 名开发者参与其中,提交的项目涵盖了从牲畜疾病检测到人工智能驱动的金融助手等领域。获奖项目包括:
- Torchmeta,它为 PyTorch 提供扩展,以简化 PyTorch 中元学习算法的开发。它具有受 TorchVision 启发,适用于少样本分类和回归问题的统一接口,方便在多个数据集上进行基准测试,以帮助提高可重现性。
- Open-Unmix,一个使用 PyTorch 进行端到端音乐分离的系统。分离可将任何立体声录音中的单独乐器或人声轨道分离开来。
- Endless AI-Generated Tees,一家销售人工智能生成 T 恤设计的商店,可全球购买和交付。该系统使用最先进的生成模型(StyleGAN),该模型使用 PyTorch 构建,然后在现代艺术作品上进行训练。
访问pytorch.org,了解更多信息并开始使用 PyTorch 1.3 和最新的库及生态系统项目。我们期待社区使用 PyTorch 构建的贡献、激动人心的研究进展和实际应用。
我们感谢整个 PyTorch 团队和社区为这项工作做出的所有贡献。