PyTorch1.0 预览版发布:超越 Python 性能的 C++ 前端接口?
阅读 · 发布日期 2018-10-08 · 金人网络今年 5 月份,F8 大会的第二天中,Facebook 曾宣布 PyTorch1.0 即将与大家见面,这是继先前发布 0.4.0 后的一次较大调整。今日,在首届 PyTorch 开发者大会上,Facebook 宣布了有关该框架生态一系列更新,包括软件、硬件和教育方面的合作。于此同时,PyTorch 1.0 预览版也正式发布了。
项目链接:https://github.com/pytorch/pytorch/releases
据介绍,PyTorch 1.0 加速了产品化 AI 突破性研究的进程。从亚马逊、谷歌、微软的深度云服务支持,到紧密结合 ARM、英特尔、IBM、英伟达和高通等技术方,开发者们能够更轻松的利用 PyTorch 兼容了软件、硬件和开发工具的生态。Facebook 表示,PyTorch 1.0 融合越多的软件和硬件,开发者能够越容易地快速建立、训练、部署顶级的深度学习模型。
「我们在 PyTorch1.0 发布前解决了几大问题包括:可重用、性能、编程语言和可扩展性,」Facebook 人工智能副总裁 Jerome Pesenti 在发布会开场时表示。「但是,facebook 认为自身在开发深度学习框架道路上只行进了 1%,我们希望 PyTorch 是以用户为中心的,以社区为主要驱动力。」
PyTorch 1.0 主要新特性
据官方博客介绍,最新版本的 PyTorch 有了一系列重大更新,例如增加了一个全新的融合前端,它能够追踪来自 eager 模式的模型,并融合到图模式中,从而弥补研究与产品部署直接的差距;增加了一个修订过的 torch.distributed 库,能够让开发者在 Python 和 C++环境中进行更快的训练;增加了一个 eager 模式的 C++接口(beta 版)进行关键性能研究。
首先是 torch.jit。据现场介绍,JIT 是一组编译工具,它的目标是弥补研究与产品部署的差距。JIT 包含一种名为 Torch Script 的语言,这种语言是 Python 的自语言。使用 Torch Script 的代码可以实现非常大的优化,并且可以序列化以供在后续的 C++API 中使用。
C++前端是连接 PyTorch 后段的纯 C++接口,但它同时遵循已建立的 Python 前端 API 和架构。C++前端的目标在于实现高性能、低延迟的 C++应用,因此它提供的接口等价于 Python 前端所采用 torch.nn 和 torch.optim 等。
其实 Python 不一定比 C ++慢,Python 前端调用 C ++计算的成本很高(特别是数值型的运算),这些运算将在程序上花费额外的时间。但是,如果你需要在低延迟、高性能或多线程的环境下部署产品,例如视频游戏等,那么 Python 前端可能会存在一些问题,而 C ++前端就是来解决这些问题的。
在支持分布式训练方面,PyTorch1.0 同样做了一系列更新。例如,增加了一个修订过的 torch.distributed 库,能够让开发者在 Python 和 C++环境中进行更快的训练。目前,PyTorch 框架的模型在多 GPU 的条件下可以保持几乎线性的计算效率提升。
PyTorch 1.0 在分布式训练方面的更新包括全新的后端设计和高度可扩展的性能:
其中包括:
全新异步后端库:C10D;
支持 Python 和 C++;
全后向兼容后端 Python API;
在关键工作负载上的顶点性能;
数据并行:单节点、多 GPU;
数据并行:多节点、多 GPU。
目前研究员和工程师们需要使用多个框架和工具来研究新的深度学习模型并把它们迁移到产品环境中大规模运行,但这些框架或者工具大部分都是不兼容的。如此一来,大大拉慢了研究员或者工程师产品化突破性 AI 研究的速度。在最新版本中,Facebook 结合了 PyTorch 框架的灵活性与 Caffe2 的产品化能力,提供了从研究到产品的无缝对接。
对框架的开发者来说,幸运的是,pytorch 的生产环境部分并不是从零开始开发的,Facebook 还有另一个面向业界的框架:caffe2。
PyTorch 生态的深度支持
除了宣布重要更新内容,Facebook 还介绍了来自 PyTorch 1.0 生态的深度支持,这些支持既包括云服务又包括英伟达、高通、英特尔这样的技术提供方。具体介绍如下:
从云平台、产品到服务,AWS、谷歌和微软加深了对 PyTorch 1.0 更稳健的支持。例如,AWS 大规模训练、部署机器学习模型的全栈管理平台 Amazon Sagemaker,现在能为 PyTorch 1.0 提供预配置环境,包括自动模型调优这样的强大能力。
谷歌正宣布其为 AI 开发者制定的多种软件和硬件工具将与 PyTorch 1.0 实现集成。谷歌云平台的深度学习虚拟机现在有一个新的 PyTorch 1.0 VM 镜像文件,其预安装了 NVIDIA 驱动与教程。谷歌同样为 PyTorch 提供了张量处理单元(TPU),这是一种用于机器学习的定制化专用集成芯片(ASIC)。通过 Google Cloud TPU 团队和 PyTorch 团队的合作,目前基于 PyTorch 1.0 的模型能使用这种定制化的硬件了。
Facebook 的和微软在早期提出了另一个重要的倡议,即开源的神经网络交换格式 ONNX,而现在微软也进一步致力于在机器学习产品套件中为 PyTorch 提供一流的支持。Azure 机器学习服务现在允许开发者将本地训练的 PyTorch 模型无缝迁移到 Azure cloud 上。对于数据科学实验,微软提供了预配置的数据科学虚拟机(DSVM),该虚拟机预安装了 PyTorch。对于希望探索 PyTorch,但又不希望安装软件和配置本地环境的开发者,Azure Notebooks 提供了免费的云 Jupyter Notebooks,开发者可以直接试验 PyTorch 教程和代码。最后,Visual Studio Code 的 AI 扩展工具为 Azure ML 和 PyTorch APIs 提供了紧密的集成,它们可以简化 PyTorch 代码的开发与训练。
此外除了软件和云服务提供商,对于 ARM、IBM、Intel、NVIDIA 和高通等技术伙伴,Facebook 还会通过直接优化、kernel 库的集成、以及优化编译器和推理运行时等其他工具为 PyTorch 1.0 提供支持。这些额外的支持能确保 PyTorch 可以在数据中心和边缘设备的各种硬件上正常运行,且模型也能在这些硬件上实现训练和推断的优化。
为未来的 AI 开发者提供学习资源
除了加强 PyTorch 部署 AI 研究的能力,通过教育与课程方式推广 PyTorch 也是 Facebook 打造深度学习框架的一大利器。
据介绍,目前 PyTorch 已经通过在线视频和大学课程为众多的学生提供深度学习框架,很多教育提供方也都采用它作为教学框架。PyTorch 框架的易用性及与 Python 深度集成的特性令它非常容易实现各种深度学习概念,学生可以通过它快速理解和实验深度模型。
此外,Udacity 正与 Facebook 合作,他们希望让开发者能免费学习深度学习入门课程,这些课程完全使用 PyTorch 作为框架。Facebook 还将赞助 300 名成功完成该中级课程的学生继续在 Udacity 中完成深度学习纳米学位项目,该计划已经修改为在 PyTorch 1.0 上运行。
Fast.ai 同样使用 PyTorch 框架,并提供免费的深度学习入门、高级和机器学习课程,Fastai 是第一个宣布基于 PyTorch 1.0 的开源软件库。该软件库能提供高准确率和快速的深度学习模型,并只需要非常少量的代码,这些都令深度学习对于入门者和有经历的开发者更加友好。
小结
从 2015 年谷歌开源 TensorFlow 开始,深度学习框架之争越来越越激烈,全球多个看重 AI 研究与应用的科技巨头均在加大这方面的投入。从 2017 年年初发布以来,PyTorch 可谓是异军突起,短短时间内取得了一系列成果,成为了其中的明星框架。
Facebook 表示,PyTorch 1.0 是自推出以来最重要的版本,1.0 意味着框架版本已经非常稳定、成熟、有保证了。今天发布的 preview 版,其中 90% 的功能已经能够应对业界的考验。
「1.0 是让 PyTorch 进入生产环境的第一步,开发者们还会在未来继续推进它的发展。」Facebook 研究工程师 Soumith Chintala 在发布会上表示,「PyTorch 1.0 的最终稳定版会在 NIPS2018 大会之前发布。」
预览版安装地址: https://pytorch.org/get-started/locally/