今天,PyTorch公开发布一周年了。
这个自诞生之日起就火热的深度学习框架,这一年是怎样的成长轨迹?刚刚,PyTorch团队在官网上发文,盘点了PyTorch上一年的进展、大事件和社区情况,并和其他框架进行了对比。
总体来说战绩是这样的——
- GitHub上有87769行Python代码导入了torch
- GitHub上3983个资源库在命名或描述中提到了PyTorch
- PyTorch文件的下载量超50万次,具体说达到了651916次
- 5400个用户写了21500篇帖子,在论坛上讨论过5200个话题
- 在Reedit机器学习版块被被提及达131次,而TensorFlow在这段时间仅被提及255次
PyTorch也频频出现在各种会议中——
- 在最近的ICLR2018中提交的论文中,有87篇提到PyTorch。同时有228篇提到TensorFlow,42篇提到Keras,32篇提到Theano和Matlab
- arXiv每月平均提到PyTorch 72次,TensorFlow 273次,Keras 100次,Caffe 94次,Theano 53次
这些对比数据之外,PyTorch团队还整理了这一年社区的大事件和突破性进展。量子位则其重点,编译整理如下:
社区大事件
第一个现身社区的PyTorch程序包来自CMU博士Brandon Amos,他帮助简化了矩阵块的操作。
Jun-Yan Zhu, Taesung Park, Phillip Isola, Alyosha Efros和UC伯克利的团队发布了人气很高的Cycle-GAN and pix2pix,实现了图像到图像的转换。
项目地址:
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
哈佛大学自然语言研究组(HarvardNLP)和Systran团队构建并改善PyTorch中OpenNMT系统。
项目地址:
https://github.com/OpenNMT/OpenNMT-py
推特上的MagicPony团队贡献了超分辨率工作的进展。
介绍地址:
https://twitter.com/Rob_Bishop/status/821793080877588480
Salesforce 研究院发布了一些程序包,包括PyTorch-QRNN。这是一种RNN,比CuDNN优化的标准LSTM快2倍到17倍,James Bradbury和他的团队也因此成为PyTorch社区中最活跃和最引人注目的力量之一。
PyTorch-QRNN项目地址:
https://twitter.com/Smerity/status/917472260851560448
Uber、美国东北大学和斯坦福的研究团队围绕Pyro和ProbTorch组了一个概率编程社区,积极开发torch分布的核心程序包。
英伟达的研究人员发布了三个高质量的库,可以实现pix2pix-HD、Sentiment Neuron和FlowNet2的相关论文,他们还分析了PyTorch中不同数据并行模型的可扩展性。
相关项目地址:
https://github.com/NVIDIA/sentiment-discovery
https://github.com/NVIDIA/flownet2-pytorch
https://github.com/NVIDIA/sentiment-discovery/blob/master/analysis/scale.md
艾伦研究院(Allen Institute for AI)发布了AllenNLP,里面包括先进的NLP模型参考实现,易于将web demo用于标准的NLP任务。
项目地址:
http://demo.allennlp.org/machine-comprehension
去年7月,Kaggle团队grt123夺冠关于肺癌检测的DataScience Bowl 2017,随后发布了他们的PyTorch实现。
项目地址:
https://twitter.com/PyTorch/status/881573658166267904
在可视化方面,Tzu-Wei Huang实现了TensorBoard-PyTorch插件,Facebook的人工智能研究也为他们的visdom可视化包发布了PyTorch兼容版。
相关项目地址:
https://github.com/lanpa/tensorboard-pytorch
https://github.com/facebookresearch/visdom
此外,Facebook AI研究院还发布了一些其他的项目,比如ParlAI、fairseq-py、VoiceLoop and FaderNetwork等,在多个领域实现了先进的模型和接口数据集。
工程大事件
在过去一年,PyTorch团队实现了多个功能,提高了性能。我们一起回顾一下:
高阶梯度
去年8月,PyTorch实现了一个可以接收n阶导数的通用接口,并增加了支持高阶梯度函数的范围。
分布式PyTorch
还是去年8月,PyTorch发布了小型分布式软件包,它用到了流行的MPI集合(MPI-collective)方法。该软件包有多个后端,如TCP、MPI、Gloo和NCCL2等,来支持各种类型的CPU/GPU集成操作和用例,并包含Infiniband和RoCE等分布式技术。
更接近NumPy
用户最大的需求之一是他们熟悉的NumPy特性。broadcasting和高级索引等功能很方便,为用户节省了大量时间。PyTorch实现了这些特性,并让API更接近NumPy。
稀疏张量
去年三月,PyTorch发布了一个支持稀疏张量的小程序包,五月发布了CUDA支持的稀疏包。该程序包可以实现深度学习中常用的稀疏范例的稀疏嵌入。
性能
关于性能的战斗还未停止,对想将灵活性最大化的动态框架PyTorch来说更是如此。在过去的一年里,PyTorch改进了从核心的张量库到神经网络operator的性能,能在board上快速编写微优化。
PyTorch为张量操作添加了专门的AVX和AVX2内联函数
编写了更快的GPU内核,用于常用的工作负载中
重写了几个神经网络operator的代码,如nn.Embedding等
此外,PyTorch将框架的开销减小了10倍
这事源于去年8月,DyNet的作者Graham Neubig等人展示了DyNet在小型NLP模型上的速度比PyTorch要快得多。之后,PyTorch重写了内部架构,将每个operator执行框架的开销从10微秒减少到1微秒。
ATen
重新设计PyTorch内部架构时,PyTorch团队还建造了ATen C++11库,现在所有的PyTorch后端都可以使用它。
输出模型到生产——支持ONNX和JIT编译器
将PyTorch模型导出到另一个框架是我们经常收到的一个请求。用户在PyTorch完成模型后,希望将其搭载到大型项目,但有时会遇到只能使用C++的尴尬境况。
因此,PyTorch建立了一个tracer,可将PyTorch模型输出为中间表示,用户可将其转换为ONNX格式输出至Caffe2、MXNet、TensorFlow等其他框架中,或直接连接到 CoreML或TensorRT这样的硬件加速库。
祝PyTorch一周岁生日快乐。
最后,附原文链接:
http://pytorch.org/2018/01/19/a-year-in.html