势头强劲: PyTorch周年大事记盘点

【导读】 1月19日,PyTorch团队对PyTorch发布一年来的成长轨迹做了总结。在过去一年里,PyTorch资源包的下载量超50万次、PyTorch频频出现在各种会议中。然后强调了,PyTorch社区的众多成员对PyTorch做了很多贡献,使其变得更好用、更强大。最后推荐了出官方文档之外,一些好用PyTorch教程和书籍。PyTorch作为当前python深度学习的流行框架,在过去一年了展现了强大的生命力和前景,本文对PyTorch做了很全面的总结,值得所有深度学习从业者和研究人员深入了解!


专知公众号以前推出PyTorch手把手系列教程:

  1. < 一文带你入门优雅的Pytorch >

  2. < 快速理解系列(一): 图文+代码, 让你快速理解CNN>

  3. < 快速理解系列(二): 图文+代码, 让你快速理解LSTM>

  4. < 快速理解系列(三): 图文+代码, 让你快速理解GAN >

  5. < 快速理解系列(四): 图文+代码, 让你快速理解Dropout >

  6. < NLP系列(一) 用Pytorch 实现 Word Embedding >

  7. < NLP系列(二) 基于字符级RNN的姓名分类 >

  8. < NLP系列(三) 基于字符级RNN的姓名生成 >

 


PyTorch的过往一年


到今天PyTorch公开发布已经有一年了。 这是一个疯狂的过程 ,我们一直在追求建立一个灵活的深度学习研究平台。 在过去的一年中,我们看到了一群非常棒的人使用,贡献和传播PyTorch - 感谢你的爱。

回首过去,我们从在过去一年里总结PyTorch:来自社区的进展,新闻和亮点。


  • 社区



我们给予这个强大社区中爱上pytorch的研究人员和工程师最好的祝福。 核心团队拥有来自多个国家,公司和大学的工程师和研究人员,如果没有他们的贡献,我们不可能使PyTorch成为事实。


  • 研究论文,软件包和Github



发布后的几天内,社区用户开始在PyTorch中实现他们最喜爱的研究论文,并且在Github上发布相关代码。 开源代码是目前研究人员使用的主要工具。

人们通过网络聚集在一起创造torchtext,torchvision和torchaudio包,从而帮助促进不同领域上的研究。


第一个基于PyTorch的社区软件包来自Brandon Amos,其标题为“块” (Block),这个软件包功能在于更容易地处理块矩阵(Block matrix)。 CMU的Locus实验室随后发布了PyTorch软件包,里面包含了他们大部分研究的实现。 Zagoruyko的Paying more attention to attention.是第一个研究论文代码。


Jun-Yan Zhu, Taesung Park, Phillip Isola, Alyosha Efros和来自伯克利的团队发布了非常受欢迎的Cycle-GAN和pix2pix,其功能在于对图像进行图像转换。


来自HarvardNLP和Systran的研究人员开始开发和改进PyTorch中的OpenNMT,来源于Facebook上重新实现了来自Adam Lerer的[Lua] Torch代码。


来自Twitter上的MagicPony团队基于PyTorch的例子中提供了他们超分辨率恢复的实现。


Salesforce Research发布了多个软件包,其中包括PyTorch-QRNN,这是一种RNN,比由CuDNN优化的标准LSTM快2到17倍。 詹姆斯·布拉德伯里(James Bradbury)和团队是PyTorch社区中最活跃和最有魅力的部队之一。



Uber,Northeastern和Stanford的研究人员聚集在一起,围绕着Pyro和ProbTorch建成了一个活跃的概率编程社区。 他们正在积极开发torch.distributions核心程序包。 这个社区十分活跃并且在快速发展,我们在NIPS 2017上与Fritz Obermeyer,Noah Goodman,Jan-Willem van de Meent,Brooks Paige,Dustin Tran以及另外22位与会者进行了第一次碰面,并且讨论如何让这个世界贝叶斯化。


NVIDIA研究人员发布了三个高质量的存储库,这些库实现了pix2pix-HD,Sentiment Neuron和FlowNet2论文。 他们的PyTorch中不同数据并行模型的可伸缩性的分析工作对于社区是有帮助的。

Allen Allen研究所发布了AllenNLP,其中包括NLP中的几种最先进的模型 - 参考实现和用于标准NLP任务易于使用的Web演示。



去年七月,Kaggle的获胜队grt123,他们在肺癌检测的工作赢得DataScience Bowl 2017,随后发布了他们的PyTorch实现。


在可视化领域,Tzu-Wei Huang实现了一个TensorBoard-PyTorch插件,并且Facebook AI Research发布了visdom可视化包PyTorch兼容版本。

最后,Facebook AI Research发布了几个项目,如ParlAI,fairseq-py,VoiceLoop和FaderNetworks,这些项目实现了多领域的顶尖模型和接口数据集。


我们也对那些在论坛上积极帮助别人的人们给予感谢,特别是ptrblck,jpeg729,QuantScientist,albanD,tom和chenyuntc。 您提供了非常宝贵的服务,非常感谢!


  • 数据



就纯粹的数字而言,

github上的87,769行Python代码导入了torch

Github上的3,983个资源库在它们的名字或者描述中提及到PyTorch

PyTorch二进制文件下载超过50万次,准确来说是 651,916次。

5,400名用户撰写了21,500篇文章,这些文章中涉及到5,200个话题:

自发布之日起,在Reddit的/ r / machinelearning上PyTorch被提及了131次。 在同一时期,TensorFlow被提及255次。


  • 研究数据



PyTorch是一个以研究为中心的框架。 所以感兴趣的指标之一就是在机器学习研究论文中PyTorch使用量。


在最近的ICLR2018会议上,PyTorch在87篇论文中被提到,而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在NLP上写了很棒的新教程,通过实例进行讲解。  Yunjey Choi写了一个漂亮的教程,大多数模型在30行以内实现。 每个新的教程采用不同的学习方法,最终帮助用户更快地找到方法。


Goku Mohandas和Delip Rao将他们正在编写的书的代码内容切换到PyTorch框架。


我们已经看到不少大学的机器学习课程被PyTorch教为主要工具,如哈佛大学的CS287。我们有三个在线课程弹出教导使用PyTorch。


Fast.ai的“Deep Learning for Coders”是一个流行的在线课程。 去年9月,Jeremy和Rachel宣布下一个fast.ai课程将几乎完全基于PyTorch。


新加坡国立大学和清华大学兼职研究员Ritchie Ng发布了一个名为PyTorch实用深度学习的Udemy课程。


香港科技大学的Sung Kim在Youtube上发布了一个针对普通观众的在线课程,名为“PyTorch Zero to All”。


  • 工程项目



在过去的一年里,我们实现了多种功能,全面提高了性能,并修复了大量的错误。 我们所做的工作的完整列表可以在我们的发行说明中找到。 以下是去年我们工作的重点:


  • 高阶梯度



随着一些采用梯度处罚的论文的发表以及二阶梯度方法的不断研究,这是一个重要且受欢迎的特征。 在8月份,我们实现了一个可以采用n阶导数的广义接口,并且随着时间的推移增加了支持高阶梯度的函数的覆盖范围,因此几乎所有的操作都支持这个接口。


  • 分布式PyTorch



8月份,我们发布了一个小型的分布式软件包,采用了非常受欢迎的MPI集体方法。 该软件包有多个后端,例如TCP,MPI,Gloo和NCCL2,从而支持各种类型的CPU / GPU集合操作和用例,并集成了Infiniband和RoCE等分布式技术。 分布式是很难的,我们在最初的迭代中有错误。 在随后的发布中,我们使这个软件包更加稳定,性能也得到了提升


  • 接近NumPy



用户最大的需求之一就是他们熟悉的NumPy功能。 诸如广播和高级索引之类的功能是方便的,并且为用户节省了大量的冗长。 我们实现了这些功能,并开始调整我们的API以更接近NumPy。 随着时间的推移,我们希望在适当的适当的地方能够采用越来越接近NumPy的API。


  • 稀疏张量



今年3月,我们发布了一个支持稀疏张量的小包,5月份我们发布了对这个稀疏包的CUDA支持。 该包体积小,功能有限,用于实现稀疏嵌入和深度学习中常用的稀疏范式。 这个软件包的规模还很小,并且需要扩展它 - 如果你有兴趣扩展这个稀疏软件包,请在讨论版上联系我们


  • 性能



性能始终是一场持续的战斗,对想将灵活性最大化的动态框架PyTorch来说更是如此。在过去的一年里,PyTorch改进了从核心的张量库到神经网络operator的性能,能在board上快速编写微优化。


我们为张量操作添加了专门的AVX和AVX2内在函数

为频繁的工作负载(如串联和Softmax)编写更快的GPU内核(包括许多其他功能)

重写了几个神经网络算子的代码,但值得注意的是nn.Embedding和组卷积。


  • 跨板减少10倍的框架开销



由于PyTorch是一个动态图形框架,我们在训练循环的每一次迭代中动态创建一个新图形。 因此,框架开销必须很低,或者工作负载必须足够大,以至于可以隐藏框架开销。 在八月份,DyNet(Graham Neubig和他的团队)的作者表示,它比PyTorch在小型NLP模型上快得多。 这是一个有趣的挑战,我们没有意识到这些尺寸的模型正在被训练。 在为期数月(持续)的努力中,我们着手对PyTorch内部进行重大改写,将每个运营商执行时间超过10微秒的框架开销降低到1微秒。

ATen

 

重新设计PyTorch内部时,我们构建了现在支持所有PyTorch后端的ATen C ++ 11库。 ATen拥有一个反映PyTorch Python API的API,这使得它成为一个便捷的用于张量计算的C ++库。 ATen可以独立于PyTorch来构建和使用。


  • 输出模型到生产——支持ONNX和JIT编译器



将PyTorch模型导出到另一个框架是我们经常收到的一个请求。用户在PyTorch完成模型后,想将其搭载到更大项目,但有时会遇到只能使用C++的情况。

 

因此,PyTorch建立了一个tracer,可将PyTorch模型输出为中间表示,用户可将其转换为ONNX格式输出至Caffe2、MXNet、TensorFlow等其他框架中,或直接连接到 CoreML或TensorRT这样的硬件加速库。今年,我们将更多地利用 JIT 编译器提升性能。


原文链接:

http://pytorch.org/2018/01/19/a-year-in.html

-END-

专 · 知

人工智能领域主题知识资料查看获取【专知荟萃】人工智能领域26个主题知识资料全集(入门/进阶/论文/综述/视频/专家等)

请PC登录www.zhuanzhi.ai或者点击阅读原文,注册登录专知,获取更多AI知识资料

请扫一扫如下二维码关注我们的公众号,获取人工智能的专业知识!

请加专知小助手微信(Rancho_Fang),加入专知主题人工智能群交流!

点击“阅读原文”,使用专知


展开全文
Top
微信扫码咨询专知VIP会员