PyTorch 持续发展壮大,原因在于其专注于满足研究人员的需求、为生产使用提供精简的工作流程,最重要的是得到了 AI 社区的热情支持。正如 O’Reilly 所指出的,仅在 2019 年上半年,ArXiv 上论文中引用 PyTorch 的次数就增长了 194%,过去一年中平台的贡献者数量增长了 50% 以上,达到近 1,200 人。Facebook、Microsoft、Uber 以及各行业的其他组织越来越多地将其作为最重要的机器学习 (ML) 研究和生产工作负载的基础。
通过发布 PyTorch 1.3,我们正在进一步推进该平台,其中包括对一些功能的实验性支持,例如将模型无缝部署到移动设备、用于提高推理时性能的模型量化,以及前端改进,例如命名张量和创建更清晰、减少内联注释需求的代码的能力。我们还在推出一些额外的工具和库,以支持模型可解释性并将多模态研究带入生产环境。
此外,我们还与 Google 和 Salesforce 合作,增加了对 Cloud Tensor Processing Units(云张量处理单元)的广泛支持,为训练大规模深度神经网络提供了显著加速的选项。阿里云 (Alibaba Cloud) 也加入 Amazon Web Services、Microsoft 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)
量化(实验性)
在开发 ML 应用程序时,高效利用服务器端和设备端计算资源非常重要。为了支持在服务器和边缘设备上更高效地部署,PyTorch 1.3 现在支持使用熟悉的 eager 模式 Python API 进行 8 位模型量化。量化是指以降低的精度(例如 8 位整数)执行计算和存储的技术。这项当前的实验性功能包括对训练后量化、动态量化和量化感知训练的支持。它利用了用于 x86 和 ARM CPU 的最先进的量化内核后端 FBGEMM 和 QNNPACK,这些后端已集成到 PyTorch 中,现在共享一个通用 API。
要了解更多关于设计和架构的信息,请查阅此处的 API 文档,并使用此处的教程开始使用任何受支持的技术。
PyTorch 移动端(实验性)
随着应用程序对低延迟的持续需求,在边缘设备上运行 ML 的重要性日益增加。它也是联邦学习等隐私保护技术的基础要素。为了实现更高效的设备端 ML,PyTorch 1.3 现在支持从 Python 到部署在 iOS 和 Android 上的端到端工作流程。
这是一个早期、实验性的版本,针对端到端开发进行了优化。未来的版本将侧重于
- 大小优化:根据用户应用程序所需的算子进行构建级优化和选择性编译(即,您只需为您需要的算子付出二进制大小的代价)
- 性能:进一步提高移动 CPU 和 GPU 上的性能和覆盖范围
- 高级 API:扩展移动原生 API,覆盖将 ML 集成到移动应用程序中所需的常见预处理和集成任务。例如,计算机视觉和自然语言处理
在此处了解更多信息或开始在 Android 或 iOS 上使用:https://pytorch.ac.cn/mobile。
模型可解释性和隐私保护的新工具
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) 平台实现 ML 的实际应用带来了一系列安全和隐私挑战。特别是,这些平台的用户可能不愿意或无法共享未加密的数据,这阻碍了他们充分利用 ML 工具。为了应对这些挑战,ML 社区正在探索多种不同成熟度的技术方法。其中包括同态加密、安全多方计算、可信执行环境、设备端计算和差分隐私。
为了更好地理解其中一些技术的应用方式,我们正在发布 CrypTen,这是一个新的社区驱动的研究平台,旨在推动隐私保护 ML 领域的发展。在此处了解更多关于 CrypTen 的信息:https://ai.facebook.com/blog/crypten-a-new-research-tool-for-secure-machine-learning-with-pytorch。可在此处在 GitHub 上获取:https://github.com/facebookresearch/CrypTen。
多模态 AI 系统工具
数字内容通常由多种模态组成,例如文本、图像、音频和视频。例如,一个公共帖子可能包含图像、正文、标题、视频和着陆页。即使是某个特定组件也可能具有多种模态,例如包含视觉和音频信号的视频,或由图像、文本和 HTML 源组成的着陆页。
与 PyTorch 配合使用的工具和库生态系统提供了更有效的方法来应对构建多模态 ML 系统的挑战。以下是今天推出的一些最新库
Detectron2
对象检测和分割用于从自动驾驶汽车到平台内容理解等任务。为了推进这项工作,Facebook AI Research (FAIR) 正在发布 Detectron2,这是一个现在在 PyTorch 中实现的对象检测库。Detectron2 支持最新的模型和任务,提高了灵活性以辅助计算机视觉研究,并改进了可维护性和可扩展性以支持生产用例。
Detectron2 在此处提供:https://github.com/facebookresearch/detectron2,您可在此处了解更多信息:https://ai.facebook.com/blog/-detectron2-a-pytorch-based-modular-object-detection-library-。
fairseq 的语音扩展
语言翻译和音频处理是搜索、翻译、语音和助手等系统和应用中的关键组成部分。最近,由于 Transformer 等新架构以及大规模预训练方法的发展,这些领域取得了巨大进展。我们已将 fairseq(一个用于语言翻译等序列到序列应用的框架)进行了扩展,以包含对语音和音频识别任务的端到端学习的支持。对 fairseq 的这些扩展使得更快地探索和原型化新的语音研究想法成为可能,同时提供了清晰的生产路径。
在此处开始使用 fairseq:https://github.com/pytorch/fairseq/tree/master/examples/speech_recognition。
云服务提供商和硬件生态系统支持
Amazon Web Services、Microsoft Azure 和 Google Cloud 等云服务提供商为希望在 PyTorch 上开发 ML 并在生产中部署的用户提供了广泛的支持。我们很高兴地宣布 Google Cloud TPU 支持的全面可用性以及与阿里云新推出的集成。我们还在扩大硬件生态系统支持。
- Google Cloud TPU 支持现已全面可用。为了加速当今部署的最大规模机器学习 (ML) 应用并实现未来 ML 应用的快速开发,Google 创建了名为张量处理单元 (TPU) 的定制硅芯片。当组装成名为 Cloud TPU Pod 的多机架 ML 超级计算机时,这些 TPU 可以在几分钟或几小时内完成以前在其他系统上需要几天或几周才能完成的 ML 工作负载。来自 Facebook、Google 和 Salesforce 的工程师合作在 PyTorch 中启用了并试用了 Cloud TPU 支持,包括对 Cloud TPU Pod 的实验性支持。Colab 中也提供了对 Cloud TPU 的 PyTorch 支持。在此处了解更多关于如何在 Cloud TPU 上开始使用 PyTorch 的信息:https://github.com/pytorch/xla。
- 阿里云在其云平台中增加了对 PyTorch 的支持。初始集成包括针对 PyTorch 1.x 的一键式解决方案、数据科学工作坊 Notebook 服务、使用 Gloo/NCCL 进行分布式训练,以及与阿里云 IaaS(如 OSS、ODPS 和 NAS)的无缝集成。结合阿里云提供的工具链,我们期望显著降低采用所需的开销,并帮助阿里云的全球客户群利用 PyTorch 开发新的 AI 应用。
- ML 硬件生态系统扩展。除了主要的 GPU 和 CPU 合作伙伴外,PyTorch 生态系统还启用了对专用 ML 加速器的支持。Intel 和 Habana 的更新展示了 PyTorch 如何通过连接到 Glow 优化编译器,使开发者能够利用这些市场特定的解决方案。
PyTorch 社区的成长
作为一个开源、社区驱动的项目,PyTorch 受益于广泛的贡献者为生态系统带来新能力。以下是一些最近的示例
- Mila SpeechBrain 旨在提供一个基于 PyTorch 的开源、一体化语音工具包。目标是开发一个单一、灵活、用户友好的工具包,可轻松用于开发最先进的系统,用于语音识别(端到端和 HMM-DNN)、说话人识别、语音分离、多麦克风信号处理(例如,波束形成)、自监督学习等许多方面。了解更多
- SpaCy 是一个新的封装库,为多种模型提供了统一且易于使用的接口,以便提取特征来驱动 NLP 管道。通过 spaCy 的标准训练 API 提供支持。该库还计算对齐,以便将 Transformer 特征关联回实际单词,而不仅仅是子词(wordpieces)。了解更多
- HuggingFace PyTorch-Transformers(以前称为 pytorch-pretrained-bert)是一个用于自然语言处理 (NLP) 的最先进预训练模型库。该库目前包含 BERT、GPT-2、RoBERTa 和 DistilBERT 等模型的 PyTorch 实现、预训练模型权重、使用脚本和转换工具。它也发展迅速,拥有超过 13,000 个 GitHub 星标和广泛的用户群体。了解更多
- PyTorch Lightning 是一个类似 Keras 的 PyTorch ML 库。它将核心训练和验证逻辑留给您,并自动化其他部分。可复现性是许多研究领域(包括基于 ML 技术的研究)的关键要求。随着提交到 arXiv 和会议的研究论文数量飙升至数万篇,扩展可复现性变得困难。了解更多。
我们最近举办了第一届全球在线 PyTorch 夏季黑客马拉松,邀请世界各地的研究人员和开发者使用 PyTorch 构建创新性新项目。近 1,500 名开发者参与,提交的项目涵盖畜禽疾病检测到 AI 驱动的金融助手。获奖项目包括
- Torchmeta,它为 PyTorch 提供了扩展,以简化在 PyTorch 中开发元学习算法的过程。它具有受 TorchVision 启发的统一接口,适用于少样本分类和回归问题,便于在多个数据集上进行基准测试,从而有助于提高可复现性。
- Open-Unmix,一个使用 PyTorch 进行端到端音乐混音分离的系统。混音分离可从任何立体声录音中分离出各个乐器或人声轨道。
- Endless AI-Generated Tees,一个销售 AI 生成 T 恤设计的商店,商品可全球购买和配送。该系统使用最先进的生成模型 (StyleGAN),该模型使用 PyTorch 构建,然后在现代艺术作品上进行训练。
访问 pytorch.org,了解更多信息,并开始使用 PyTorch 1.3 以及最新的库和生态系统项目。我们期待社区使用 PyTorch 构建的贡献、令人兴奋的研究进展和实际应用。
感谢整个 PyTorch 团队和社区为此项工作做出的所有贡献。