内容简介:PyTorch发布一年团队总结:运行资源降低至十分之一,单机王者
本文由 「AI前线」原创,原文链接: PyTorch发布一年团队总结:运行资源降低至十分之一,单机王者
译者|核子可乐
AI 前线导读:” The PyTorch Team 发布了一份年度盘点,同时为了纪念 PyTorch 发布满一周年。在老师木的《深度学习框架技术剖析》中我们提到过,TensorFlow 系统完整度最高,但是需要解决性能问题;PyThorch 是 NLP 应用首选、单机场景下的王者,但是缺点是难以支持大规模应用。我们可以再看看 PyTorch 团队的总结。”
原文翻译如下 :
今天是 PyTorch 项目公开发布的一周年节点。这是个疯狂的过程——我们希望打造一套灵活的深度学习研究平台。过去一年当中,我们亲眼见证了一群非常杰出的参与者如何积极使用、贡献并传播 PyTorch——在这里,我们感谢您的厚爱。回顾过去,我们希望对 PyTorch 的一年历程作出总结,包括来自社区的进展、最新消息以及要点。
社区
我们迎来了一个由深深热爱 PyTorch 的研究人员与工程师所共同构成的强大社区。核心团队包含来自多个国家、众多企业与高校的工程师及研究人员。可以说,如果没有每位参与者的积极贡献,我们绝不可能将 PyTorch 由思路转化为现实。
研究论文、软件包与 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 示例当中。
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、jpeg729、QuantScientist、albanD、tom 以及 chenyun tc。各位给予我们非常宝贵的支持,再次感谢!
数字指标
下面让我们立足数字了解更多情况:
- 在 GitHub 上,有 87769 行用于导入 torch 的 Python 代码。
- GitHub 上拥有 3983 个在名称或描述当 提到 PyTorch 项目的库。
- PyTorch 二进制资源下载超过 50 万次,更具体地讲,应为 65 万 1916 次。
- 5400 位用户在我们的论坛discuss.pytorch.org (discuss.pytorch.org/) 上围绕 5200 个主题发布了 2 万 1500 篇讨论文章。
- 自发布以来,Reddit 的 /r/machinelearning 上共提到 PyTorch 131 次。与此同时,TensorFlow 被提及的数量为 255 次。
研究指标
PyTorch 是一套以研究为核心的框架。因此,我们所关注的一大指标在于从机器学习研究论文当中发现学术人士对 PyTorch 的使用。
- 在最近的 ICLR2018 会议上,有 87 篇论文提到 PyTorch,提到 TensorFlow 的论文数量为 228 篇,提到 Keras 的有 42 篇,Theano 与 Matlab 分别被 32 篇论文所提及。
- Arxiv.org 每月提及 PyTorch 项目 72 次,TensorFlow 提及次数为 273 次,Keras 为 100 次,Caffe 为 94 次,而 Theano 则为 53 次。
课程、教程与书籍
当初刚刚发布 PyTorch 时,我们虽然拥有良好的 API 文档,但教程资料却还仅限于几份 ipython 笔记——有帮助,但还不够理想。
Sasank Chilamkurthy 揽下这项重任,并把教程内容转化为如今美观的网站形式。
Sean Robertson 与 Justin Johnson 编写出了大量出色的新教程——例如自然语言处理方向等等。Yunjey Choi 则通过一篇堪称惊艳的教程,帮助学习者了解如何使用 30 行甚至更少代码实现大部分模型。每一份新教程的诞生都能帮助用户更好更快地找到适合自己的学习途径。Goku Mohandas 与 Delip Rao 正调整其所编写论著中的代码内容,旨在使用 PyTorch 项目。
另外,我们发现不少大学的机器学习课程都将 PyTorch 作为主要教学工具,其中包括哈佛大学的 CS287。为了进一步推进学习民主化,我们在这里推荐与 PyTorch 紧密相关的三大在线课程。
- Fast.ai 的”面向 程序员 的深度学习”是一项高人气在线课程 2017 年 9 月,Jeremy 与 Rachel 宣布未来的 fast.ai 课程将几乎完全基于 PyTorch 进行设计。
- 与新加坡国立大学与清华大学关系密切的研究人员 Ritchie Ng 发布了一项名为“利用 PyTorch 践行深度学习”的 Udemy 课程。
- 来自香港科技大学的 Sung Kim 在 YouTube 上发布了一项题为“从零开始学 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 库到神经网络运算程序对性能进行了全面升级,同时亦编写出速度更快的微优化成果。
- 我们为 Tensor 运算添加了专门的 AVX 与 AVX2 内联函数。
- 为高频工作负载编写更快的 GPU 内核,例如 concatenation 与 Softmax 等等。
- 重新为多个神经网络运算程序编写了代码,特别是 nn.Embedding 与组卷积。
整体运行资源需求降低至十分之一
由于 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 格式以发送至其它框架处,具体包括 Caffe2、MXNet 以及 TensorFlow 等 ; 或者直接将其发送至 CoreML 或 TensorRT 等硬件加速库处。在未来一年中,您将了解到更多与 JIT 编译器性能改进相关的消息,敬请期待!
原文链接:
更多干货内容,可关注AI前线,ID: ai-front ,后台回复「 AI 」、「 TF 」、「 大数据 」可获得《AI前线》系列PDF迷你书和技能图谱。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 王者编程大赛之三 — 01背包
- 深度学习新王者:AutoML和NAS
- Redux从青铜到王者—概念篇(一)
- 面试中 LRU / LFU 的青铜与王者
- Python爬取王者荣耀英雄皮肤高清图片
- 把英雄分类,看 Python 带你上王者
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Unity游戏设计与实现
[日]加藤政树 / 罗水东 / 人民邮电出版社 / 2015-2 / 79.00元
本书出自日本知名游戏公司万代南梦宫的资深开发人员之手,面向初级游戏开发人员,通过10个不同类型的游戏实例,展示了真正的游戏设计和实现过程。本书的重点并不在于讲解Unity的各种功能细节,而在于核心玩法的设计和实现思路。每个实例都从一个idea 开始,不断丰富,自然而然地推出各种概念,引导读者思考必要的数据结构和编程方法。掌握了这些思路,即便换成另外一种引擎,也可以轻松地开发出同类型的游戏。 ......一起来看看 《Unity游戏设计与实现》 这本书的介绍吧!