【导读】 1月19日,PyTorch团队对PyTorch发布一年来的成长轨迹做了总结。在过去一年里,PyTorch资源包的下载量超50万次、PyTorch频频出现在各种会议中。然后强调了,PyTorch社区的众多成员对PyTorch做了很多贡献,使其变得更好用、更强大。最后推荐了出官方文档之外,一些好用PyTorch教程和书籍。PyTorch作为当前python深度学习的流行框架,在过去一年了展现了强大的生命力和前景,本文对PyTorch做了很全面的总结,值得所有深度学习从业者和研究人员深入了解!
专知公众号以前推出PyTorch手把手系列教程:
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),加入专知主题人工智能群交流!
点击“阅读原文”,使用专知