本文由 「AI前线」原创,原文连接: PyTorch发布一年团队总结:运行资源下降至十分之一,单机王者
译者|核子可乐
AI 前线导读:”The PyTorch Team 发布了一份年度盘点,同时为了记念 PyTorch 发布满一周年。在老师木的《深度学习框架技术剖析》中咱们提到过,TensorFlow 系统完整度最高,可是须要解决性能问题;PyThorch 是 NLP 应用首选、单机场景下的王者,可是缺点是难以支持大规模应用。咱们能够再看看 PyTorch 团队的总结。”html
原文翻译以下:python
今天是 PyTorch 项目公开发布的一周年节点。这是个疯狂的过程——咱们但愿打造一套灵活的深度学习研究平台。过去一年当中,咱们亲眼见证了一群很是杰出的参与者如何积极使用、贡献并传播 PyTorch——在这里,咱们感谢您的厚爱。回顾过去,咱们但愿对 PyTorch 的一年历程做出总结,包括来自社区的进展、最新消息以及要点。git
社区程序员
咱们迎来了一个由深深热爱 PyTorch 的研究人员与工程师所共同构成的强大社区。核心团队包含来自多个国家、众多企业与高校的工程师及研究人员。能够说,若是没有每位参与者的积极贡献,咱们毫不可能将 PyTorch 由思路转化为现实。github
研究论文、软件包与 GitHub编程
在项目发布的几天以内,来自社区的用户就开始在 PyTorch 当中实现其感兴趣的研究论文内容,同时在 GitHub 上发布相关代码。开源代码已经成为目前研究人员所使用的主要工具。参与者们共同打造出 torchtext、torchvision 以及 torchaudio 软件包,旨在促进 PyTorch 项目在不一样领域实现研究民主化。后端
第一款基于 PyTorch 的社区软件包来自 Brandon Amos,这款名为 Block 的软件包可以下降块矩阵的处理难度。卡耐基 - 梅隆大学的 Locus 实验室随后发布了与其研究成果紧密相关的多套 PyTorch 软件包及实现方案。第一份研究论文代码则来自 Sergey Zagoruyko,题为《关注‘关注机制’》。网络
来自加州大学伯克利分校的 Jun-Yan Zhu、Taesung Park、Phillip Isola、Alyosha Efros 及其团队发布了广受好评的 Cycle-GAN 与 pix2pix,后者负责实现图像到图像转换。框架
HarvardNLP 与 Systran 的研究人员们选择开发并改进 OpenNMT in PyTorch,其灵感源自对 Facebook 公司 Adam Lerer 编写的 [Lua]Torch 代码进行重现。Twitter 公司的 MagicPony 团队亦做出贡献,将其早期 Super-resolution 工做成果引入 PyTorch 示例当中。dom
Salesforce Research 发布了多款软件包,其中包括其引觉得傲的 PyTorch-QNN——这是一种 RNN 类型,在 CuDNN 的优化之下可实现 2 倍至 17 倍于标准 LSTM 的速度表现。James Bradbury 及其团队目前已经成为 PyTorch 祢发中最活跃且最具吸引力的团队之一。
“咱们发布的 @PyTorch-QRNN,拥有 2 倍到 17 倍于英伟达 cuDNN LSTM 的速度表现。这样的速度水平要归功于经过 CuPy 实现的 50 行代码。”
来自优步、Northeastern 以及斯坦福大学的研究人员们汇集在一块儿,围绕 Pyro 与 ProbTorch 组建起一个活跃的几率编程社区。该社区取得了活跃且快速的发展态势,咱们在 NIPS 2017 的首届 pytorch-probabilistic-programming 会议上与 Fritz Obermeyer、Noah Goodman、Jan-Willem van de Meent、Brooks Paige、Dustin Tran 以及其余 22 名与会者共同讨论了如何构建世界贝叶斯网络。
英伟达公司研究人员发布了三套高质量库,旨在实现 pix2pix-HD、Sentiment Neuron 以及 FlowNet2 论文中的成果。他们对 PyTorch 当中不一样数据并行模型的可扩展性分析工做给社区做出了巨大贡献。
Allen Institute for AI 发布了 AllenNLP,其中囊括多套业界领先的天然语言处理模型——包括面向标准天然语言处理任务的参考实现方案以及易于使用的 Web 演示素材。
2017 年 7 月,咱们还迎来了首支 Kaggle 获胜队伍 grt123。他们拿下了 DataScience Bowl 2017 大赛的肺癌检测奖,并随后公布了相关 PyTorch 实现方案。
在虚拟化方面,Tzu-Wei Huang 开发出一款 TensorBoard-PyTorch 插件,而 Facebook AI Research 则面向其 visdom 虚拟化软件包实现 PyTorch 兼容性。
最后,Facebook AI Research 发布了包括 ParlAI、fairseeq-py、VoiceLoop 以及 FaderNetworks 在内的多个项目,旨在利用来自多个领域的前沿模型及接口数据集。
受篇幅所限,这里没法将全部卓越项目一一列出,感兴趣的朋友能够查看相关清单:github.com/soumith?tab…
咱们也要向大力支持论坛建议的朋友们表示感谢,特别是 ptrblck、jpeg72九、QuantScientist、albanD、tom 以及 chenyun tc。各位给予咱们很是宝贵的支持,再次感谢!
数字指标
下面让咱们立足数字了解更多状况:
研究指标
PyTorch 是一套以研究为核心的框架。所以,咱们所关注的一大指标在于从机器学习研究论文当中发现学术人士对 PyTorch 的使用。
课程、教程与书籍
当初刚刚发布 PyTorch 时,咱们虽然拥有良好的 API 文档,但教程资料却还仅限于几份 ipython 笔记——有帮助,但还不够理想。
Sasank Chilamkurthy 揽下这项重任,并把教程内容转化为现在美观的网站形式。
Sean Robertson 与 Justin Johnson 编写出了大量出色的新教程——例如天然语言处理方向等等。Yunjey Choi 则经过一篇堪称惊艳的教程,帮助学习者了解如何使用 30 行甚至更少代码实现大部分模型。每一份新教程的诞生都能帮助用户更好更快地找到适合本身的学习途径。Goku Mohandas 与 Delip Rao 正调整其所编写论著中的代码内容,旨在使用 PyTorch 项目。
另外,咱们发现很多大学的机器学习课程都将 PyTorch 做为主要教学工具,其中包括哈佛大学的 CS287。为了进一步推动学习民主化,咱们在这里推荐与 PyTorch 紧密相关的三大在线课程。
工程技术
过去一年以来,咱们实现了多项功能、全面提高性能表现,同时修复了大量错误。咱们所作工做的完整列表可在咱们的发布说明中找到。如下为去年咱们的核心工做重点:
高阶梯度
随着一系列关于梯度惩罚以及二阶梯度方法相关研究论文的陆续发表,这已经成为一项重要且受到高度关注的功能。2017 年 8 月,咱们实现了一个可使用 n 阶导数的广义接口,并随时间推移而逐步增长所支持高阶梯度函数的覆盖范围。截至发稿之时,其几乎已经可以支持全部运算。
分布式 PyTorch
2017 年 8 月,咱们发布了一套小型分布式软件包,其中采用了极受欢迎的 MPI 共同方法。该软件包拥有多种后端,例如 TCP、MMPI、Gloo 以及 NCCL2 等,可支持多种不一样 CPU/GPU 共同运算及用例,并可整合 Infiniband 以及 RoCE 等分布式技术。分布式绝非易事,咱们的最初迭代版本中也存在一些错误。但在随后的发行版本中,咱们提高了该软件包的稳定度,其性能也获得了提高。
走近 NumPy
用户提出的最为迫切的需求之一,在于他们但愿得到本身所熟知的 NumPy 功能。这类功能包括便捷的广播与高级索引等功能,其确实可以为用户节约时间与精力。咱们实现了这些功能,但开始调整自身 API 以进一步走近 NumPy。随着时间的推移,咱们但愿可以在适当的时候提供与 NumPy 全面契合的 API。
稀疏张量
2017 年 3 月,咱们发布了一套支持稀疏张量的小型软件包。同年 5 月,咱们发布了 CUDA 对该稀疏软件包的支持能力。该软件包体积小巧且功能有限,主要用于实现稀疏嵌入以及深度学习中所经常使用的各种稀疏范式。目前其规模还不大,仍有待扩展——若是你们有意参与这套软件包的扩展工做,请在讨论板上联系特准:discuss.pytorch.org/。
性能表现
对性能的追求是一场永无休止的斗争,特别是对于 PyTorch 这样一套但愿最大程度提高灵活性的动态框架而言。过去一年当中,咱们从核心 Tensor 库到神经网络运算程序对性能进行了全面升级,同时亦编写出速度更快的微优化成果。
总体运行资源需求下降至十分之一
因为 PyTorch 是一套动态图形框架,所以咱们须要在训练循环的每一次迭代当中以动态方式建立一个新图形。这意味着框架的运行资源开销必须很低,要么就是令工做负载规模极高,从而几乎能够忽略掉框架运行开销。2017 年 8 月,DyNet 的做者们(Graham Neubig 及其团队)表示,其在处理小型 NLP 模型时的速度要远高于 PyTorch。这是一项有趣的挑战,但当时咱们并不清楚这些进行训练的模型的具体大小。在接下来的几个月当中,咱们努力对 PyTorch 内部进行重大改写,对每一个执行时间超过 10 微秒的运算程序做出调整,最终使其可在 1 微秒左右执行完成。
ATen
在咱们对 PyTorch 进行内部从新设计时,咱们亦构建起如今负责支持所有 PyTorch 后端的 Aten C++ 11 库。ATen 拥有的 API 可反映 PyTorch 的 PyThon API,这使其成为一套可进行张量计算的便捷 C++ 库。ATen 可独立于 PyTOrch 进行构建与使用。
将模型导出至生产环境——ONNX 支持与 JIT 编译器
聆听社区的声音,咱们收到的一项常见请求就是将 PyTorch 模型导出至其它框架当中。用户在 PyTorch 当中可进行快速的研究周期,并但愿在工做完成以后将其发送至仅要求 C++ 的大型项目当中。
考虑到这一点,咱们为 PyTorch 构建起一套追踪器,其可以将 PyTorch 模型导出为中间表现形式。接下来的追踪则可用于更高效地运行现有 PyTorch 模型(经过对其运行优化),或者将其转换为 ONNX 格式以发送至其它框架处,具体包括 Caffe二、MXNet 以及 TensorFlow 等 ; 或者直接将其发送至 CoreML 或 TensorRT 等硬件加速库处。在将来一年中,您将了解到更多与 JIT 编译器性能改进相关的消息,敬请期待!
原文连接:
更多干货内容,可关注AI前线,ID:ai-front,后台回复「AI」、「TF」、「大数据」可得到《AI前线》系列PDF迷你书和技能图谱。