本文转载自“机器之心”
机器之心编译
PyTorch自发布一年以来,由于调试、编译等多方面的优势,它成为2017年热度极高的框架之一。本文作者是PyTorch开发团队,介绍了开源一周年以来,PyTorch取得的成绩。在一些指标上,PyTorch也与TensorFlow做了同期对比。PyTorch是不是2017年的明星框架?
Yann LeCun Twitter
截止到今天,PyTorch已公开发行一周年。一年以来,我们致力于打造一个灵活的深度学习研究平台。一年以来,PyTorch社区中的用户不断做出贡献和优化,在此深表感谢。
通过此文,我们打算对PyTorch一年的发展历程做一个总结:PyTorch的进展、新闻以及社区亮点。
社区
我们很幸运,PyTorch团队有一批强大、饱含热情的研究者和工程师,核心团队的工程师和研究者来自不同的国家、公司和大学,没有他们的付出就不会有今天的PyTorch。
研究论文、工具包、GitHub
PyTorch才发行几天,社区用户已经开始借助PyTorch实现其最喜爱的研究论文,并把代码公布在GitHub上。开源代码对当今的研究者来说是一个主要而核心的工具。
人们一起创建了torchtext、torchvision和torchaudio,以便利化平民化不同领域的研究。
首个PyTorch社区工具包(被命名为Block)来自Brandon Amo,有助于更轻松地处理块矩阵(block matrix)。来自CMU的Locus实验室后来继续公布PyTorch工具包及其大部分研究的实现。首个研究论文代码来自Sergey Zagoruyko,论文名称为Paying more attention to attention。
来自U.C.Berkeley的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发布了若干个工具包,包括其亮点成果PyTorch-QRNN,这是一种新型RNN,相比于CuDNN优化的标准LSTM可提速2到17倍。James Bradbury及其团队是PyTorch社区中最活跃和最有吸引力的团队之一。
来自Uber、Northeaster、Stanford的研究者围绕着其工具包Pyro和ProbTorch,形成了一个活跃的概率编程社区。他们正在积极开发torch.distributions核心工具包。该社区非常活跃,快速发展,我们联合Fritz Obermeyer、Noah Goodman、Jan-Willem van de Meent、Brooks Paige、Dustin Tran及其他22名参会者在NIPS 2017上举办了首次PyTorch概率编程会议,共同探讨如何使世界贝叶斯化。
英伟达研究者发布了三个高质量repo,实现了pix2pix-HD、Sentiment Neuron和FlowNet2。对PyTorch中不同数据并行模型的扩展性分析对整个社区都很有益。
艾伦人工智能研究所发布AllenNLP,包括多个NLP先进模型:标准NLP任务的参考实现和易用web demo。
六月份,我们还首次取得了Kaggle竞赛冠军(团队 grt123)。他们获得了2017数据科学杯(关于肺癌检测)的冠军,后来公开了其PyTorch实现。
在可视化方面,Tzu-Wei Huang实现了TensorBoard-PyTorch插件,Facebook AI Research发布了与PyTorch兼容的visdom可视化包。
最后,Facebook AI Research发布了多个项目,如ParlAI、fairseq-py、VoiceLoop和FaderNetworks,在多个领域中实现了先进的模型和接口数据集。由于空间有限,这里就不将优秀项目一一列出,详细列表可参阅:
https://github.com/soumith?tab=stars。
我们还要感谢那些在论坛中积极帮助别人的用户。你们提供了无比珍贵的服务,非常感谢!
指标
从数字上来看:
在Github上有87769行代码引入Torch。
在Github上有3983个repository在名字或者描述中提到了PyTorch。
PyTorch binary下载量超过50万,具体数字是651916。
在论坛上,有5400名用户发表了21500条讨论,涉及5200个主题。
自发布以来,在Reddit上的/r/machinelearning 主题中有131条讨论提到了PyTorch。同期,TensorFlow被提及的次数为255。
研究指标
PyTorch是一个专注于研究的框架。所以与衡量它的指标包括PyTorch在机器学习研究论文中的使用。
在ICLR 2018学术会议提交的论文中,有87篇提到了PyTorch,相比之下 TensorFlow 228篇,Keras 42篇,Theano和Matlab是32篇。
按照月度来看,arXiv论文提到PyTorch框架的有72篇,TensorFlow是273篇,Keras 100篇,Caffe 94篇,Theano 53篇。
课程、教程与书籍
我们在发布PyTorch的时候,已经准备了很好的API文档,但教程有限,只有几个ipython notebook,虽然有用但还不够。
Sasank Chilamkurthy承担了改进教程的任务,教程详见:
http://pytorch.org/tutorials/
Sean Robertson和Justin Johnson编写了NLP领域的全新教程,还有通过示例学习的教程。Yunjey Choi写了用30行或者更少的代码部署大多数模型的教程。每个新教程都帮助用户用不同的学习方法更快地找到适合自己的学习路径。
Goku Mohandas和Delip Rao把正在写的书中的代码做了改变,使用了PyTorch。
我们看到,一些大学的机器学习课程是使用PyTorch作为主要工具讲授的,例如哈佛CS 287。为了更进一步方便大众学习,我们还看到三个在线课程使用PyTorch讲授。
Fast.ai的「Deep Learning for Coders」是个流行的在线课程。9月份,Jeremy和Rachel宣布下一个fast.ai的课程将几乎全部基于PyTorch。
Ritchie Ng在清华、新加坡国立大学学习过的研究者,推出了名为「Practical Deep Learning with PyTorch」的Udemy课程。
来自中国香港科技大学的Sung Kim在Yotube上推出了面向普通观众的在线课程「PyTorch Zero to All」。
工程
去年PyTorch实现了多个功能,包括board上的性能、修复大量bug等。去年完成的任务清单详见:https://github.com/pytorch/pytorch/releases。下面是其中的几个亮点:
高阶梯度
随着多篇关于实现梯度罚项的论文的发表,以及二阶梯度法的不断研究发展,高阶梯度成为必需的热门功能。去年8月,我们实现了一个通用接口,可使用n阶导数,加快支持高阶梯度函数的收敛,截至写作本文时,几乎所有ops都支持此界面。
分布式PyTorch
去年8月,我们发布了一个小型分布式包,该包使用非常流行的MPI集合(MPI-collective)方法。它有多个后端,如TCP、MPI、Gloo和NCCL2,以支持多种CPU/GPU集合操作和用例,这个包整合了Infiniband和RoCE等分布式技术。分布很难,我们在初始迭代时也有一些bug。在后续版本中,我们作出了一些改进,使这个包更加稳定,性能也更强。
更接近NumPy
用户最大的一个需求是他们熟悉的NumPy功能。Broadcasting和Advanced Indexing等功能方便、简洁,节约用户的时间。我们实现了这些功能,开始使我们的API更接近NumPy。随着时间的进展,我们希望在合适的地方越来越接近NumPy的API。
性能
性能是一场仍在进行中的战斗,尤其对于想要最大化灵活性的动态框架PyTorch而言。去年,从核心Tensor库到神经网络算子,我们改善了PyTorch在board上的性能,能在board上更快的编写微优化。
我们添加了专门的AVX和AVX2内部函数,用于Tensor运算;
写更快的GPU kernel,用于常用的工作负载,如级联和Softmax;
为多个神经网络算子重写代码,如nn.Embedding和组卷积。
PyTorch在board上的开销降低10x
由于PyTorch是动态图框架,我们在训练循环的每次迭代时都要创建一个新图。因此,框架开销必须很低,或者工作负载必须足够大来隐藏框架开销。去年8月,DyNet的作者(Graham Neubig 及其团队)展示了DyNet在一些小型NLP模型上的速度快于PyTorch。这是很有意思的一个挑战,我们开始重写PyTorch内部构件,将框架开销从10微妙/算子降低到1微妙。
ATen
重新设计PyTorch内部构件的同时,我们也构建了ATen C++11库,该库现在主导PyTorch所有后端。ATen具备一个类似PyTorch Python API的API,使之成为便于Tensor计算的C++库。ATen可由PyTorch独立构建和使用。
输出模型用于生产:支持ONNX和JIT编译器
我们收到的一个普遍请求是将PyTorch模型输出到另一个框架。用户使用PyTorch进行快速研究,模型完成后,他们想将模型搭载到更大的项目中,而该项目只要求使用C++。
因此我们构建了tracer,可将PyTorch模型输出为中间表示。用户可使用后续的tracer更高效地运行当前的PyTorch模型,或将其转换成ONNX格式以输出至Caffe2、MXNet、TensorFlow等其他框架,或直接搭载至硬件加速库,如CoreML或TensorRT。今年,我们将更多地利用JIT编译器提升性能。
猛戳图片,抢先了解第一届国家智能产业峰会详细内容!
往期文章推荐
人工智能名人堂第49期 | 斯坦福研究院名人堂成员:Peter E. Ha
领取专属 10元无门槛券
私享最新 技术干货