Pytorch 1.0正式版发布!曾经Pytorch许诺的都实现了吗?

源 / 顶级程序员   文 / 江户川雨

PyTorch正式版发布!

12月8日,在加拿大蒙特利尔召开的NeurIPS 2018会议上,Facebook 宣布正式推出 PyTorch 1.0 稳定版,在 Facebook code 博客上,也一并同步了这一消息。

Facebook在5月份公布了该版本的新功能,并在10月举办的PyTorch开发者大会上首次推出它的预览版。大会上,Facebook就曾宣布了有关该框架生态的一系列更新,包括软件、硬件和教育方面的合作。

“我们在 PyTorch1.0 发布前解决了几大问题,包括可重用、性能、编程语言和可扩展性。”Facebook 人工智能副总裁 Jerome Pesenti 曾在 PyTorch 开发者大会上表示。

几个月过去了,曾经Pytorch许诺的诸多功能,现在到底是否已经实现了呢?

GitHub 地址:https://github.com/pytorch/pytorch/releases/tag/v1.0.0

500

PyTorch新特性

PyTorch 1.0的主要新特性包括JIT编译器、更快的分布式、C++扩展等。

JIT 编译器

JIT(Just-In-Time)是一组编译工具,用于弥合 PyTorch 研究与生产之间的差距。

它允许创建可以在不依赖
Python 解释器的情况下运行的模型,并且可以更积极地进行优化。使用程序注解可以将现有模型转换为 PyTorch 可以直接运行的
Python 子集 Torch Script。模型代码仍然是有效的 Python 代码,可以使用标准的 Python 工具链进行调试。

PyTorch
1.0 提供了 torch.jit.trace 和 torch.jit.script 两种方式使现有代码与 JIT 兼容。一经注解,Torch
Script 代码便可以被积极地优化,并且可以被序列化以在新的 C++ API 中使用,并且 C++ API 不依赖于 Python。

# Write in Python, run anywhere!

@torch.jit.script

def RNN (x, h, W_h, U_h, b_h):

 y = []

 for t in range (x.size (0)):

   h = torch.tanh (x[t] @ W_h + h @ U_h + b_h)

   y += [h] 

return torch.stack (y), h

 

全新并且更快的分布式库

torch.distributed 软件包和 torch.nn.parallel.DistributedDataParallel 模块采用了重新设计的全新分布式库,亮点包括:

1、新的 torch.distributed 是性能驱动的,并且对所有后端完全异步操作,包括:Gloo、NCCL 和 MPI。

2、显着的分布式数据并行性能改进,尤其适用于网络较慢的主机,如基于以太网的主机。

3、为 torch.distributed 包中的所有分布式集合操作添加异步支持。

4、在 Gloo 后端添加了一些 CPU 操作:send、recv、reduce、all_gather、gather 与 scatter。

5、在 NCCL 后端添加 barrier 操作。

6、在 NCCL 后端添加 new_group 支持。

C++ 前端

C++
前端是 PyTorch 后端的纯 C++ 接口,它遵循已建立的 Python 前端的 API 和体系结构,旨在实现高性能、低延迟和裸机 C++
应用的研究。它提供了 torch.nn、torch.optim、torch.data 和 Python 前端的其它组件的等价物。

下边是两种语言前端的简单比较:

Python

import torch

model = torch.nn.Linear (5, 1)

optimizer = torch.optim.SGD (model.parameters (), lr=0.1)

prediction = model.forward (torch.randn (3, 5))

loss = torch.nn.functional.mse_loss (prediction, torch.ones (3, 1))

loss.backward ()

optimizer.step ()

C++ 

#include

torch::nn::Linear model (5, 1);

torch::optim::SGD optimizer (model->parameters (), /*lr=*/0.1);

torch::Tensor prediction = model->forward (torch::randn ({3, 5}));

auto loss = torch::mse_loss (prediction, torch::ones ({3, 1}));

loss.backward ();optimizer.step ();

对此,广大C++程序员表示非常优秀,感谢自己终于得到了Facebook的重视。

C++的API不仅能用于训练,也能用于推理。

一名在Facebook AI研究院(FAIR)的程序员说,现在C++的API感觉非常像在PyTorch中使用Python,在模型中完全使用C++处理张量也非常方便。

最近FAIR的星际争霸AI——TorchCraftAI——就是用C++实现的。

PyTorch 1.0的其他新功能还有:

N维空张量

新的算符

新的分布式

稀疏API改进

对现有算符和分布式的补充

PyTorch社群

PyTorch
在 2017
年年初推出,很快便成为人工智能研究人员的热门选择,他们发现,其灵活、动态的编程环境和用户友好的界面是快速实验的理想之选。从那时起,我们看到
PyTorch 社群迅速发展。PyTorch 现在是 GitHub
上增长第二快的开源项目(https://octoverse.github.com/projects),在过去的一年里,PyTorch
社区的贡献者增加了 2.8 倍。

随着 PyTorch 生态系统和社群的不断发展,供开发者使用的有意思的新项目和教育资源越来越多,这一次在NeurIPS 2018上,Facebook 发布了PyTorch 1.0 稳定版。

研究人员和工程师现在可以轻松地充分利用开源深度学习框架的新特性,如用于在 eager 执行模式和 graph 执行模式之间无缝转换的混合前端、改进的分布式训练、用于高性能研究的纯 C++ 前端以及与云平台的深度集成。

PyTorch
1.0 加快了 AI
从研究原型开发到生产部署的工作流程,使这一流程变得更加简单、更容易开始。就在过去的几个月里,我们看到初学者通过新的、丰富的教育项目越来越多地使用
PyTorch,专家们构建出创新的项目,将这一框架从自然语言处理扩展到概率编程等各个领域。

500

教育课程让 AI 开发者联系更紧密

上个月,Udacity
和 Facebook 推出了一门新课程——PyTorch 深度学习入门(Introduction to Deep Learning with
PyTorch),同样还推出了 PyTorch 挑战赛,为持续的 AI
教育提供奖金。在最初的几个星期里,已经有成千上万的学生在网上积极学习了。更重要的是,这些教育课程拉近了开发人员之间的距离,从英国到印度尼西亚,我们看到全球范围内的开发者自发地开始线下聚会。

所有人都可以在 Udacity 上免费获取完整课程,开发人员很快就可以在更高级的 AI Nanodegree 课程中继续 PyTorch 教育。

除了在线教育课程,例如 fast.ai 等组织也提供一些软件库来支持开发人员学习如何利用 PyTorch 构建神经网络。fastai 是一个让神经网络的训练更加快速和准确的库,自两个月前发布以来,它已经在 GitHub 上获得了 1 万颗 star。

开发人员们已经利用这个库做出了一系列成果。例如,Santhosh
Shetty 使用 fastai 将灾后损伤等级分类的准确率提高了一倍;与传统方法相比,Alena Harley
将肿瘤常规测序的假阳性率降低了 7 倍;Jason Antic 创建了一个名为 DeOldify
的项目,该项目利用深度学习对旧图像进行着色和修复。

500

图像着色与修复

一些对 PyTorch 进行扩展的新项目

PyTorch 已经被用在图像识别、机器翻译等多个领域,我们看到了开发人员社群对这一框架的不断扩展和支持,例如:

Horovod—分布式训练框架,开发人员可以轻松地在单 GPU 或多个 GPU 上进行训练。

PyTorch Geometry ——提供了一组程序和可微分模块的几何计算机视觉库。

TensorBoardX——将 PyTorch 模型记录到 TensorBoard 的模块,允许开发人员在训练模型时使用可视化工具。

此外,Facebook 团队还在不断构建和开源 PyTorch 项目,例如 Translate,这是一个基于 Facebook 机器翻译系统的进行序列到序列模型训练的库。

对于那些希望在特定领域迅速开展工作的 AI 开发者来说,PyTorch 的生态系统为他们提供了获取行业最新前沿研究的便捷途径 (可以关注 @PyTorch 了解最新进展)。随着 PyTorch 的不断发展,我们期待着从社区中发现新的项目。

500

从云端开始

为了使
PyTorch 更易于使用,对用户更加友好,我们继续深化了与云平台和服务的合作,例如 Amazon Web services、Google
Cloud Platform 和 Microsoft Azure。就在最近,AWS 推出了支持 PyTorch 的 Amazon
SageMaker Neo,允许开发人员在 PyTorch
中构建机器学习模型,只需一次训练,就可以部署到云或端的任何地方,在性能上提升两倍。开发人员现在还可以通过创建一个新的深度学习 VM
实例,在谷歌云平台上使用 PyTorch 1.0。

此外,微软
Azure 机器学习服务现在已经广泛可用了,它允许数据科学家在 Azure 上无缝训练、管理和部署 PyTorch 模型。使用该服务的
Python SDK, PyTorch 开发人员可以利用按需分布式计算功能,用 PyTorch 1.0 大规模训练模型,加速生产过程。

AI
开发人员可以通过云合作伙伴或本地安装轻松地开始使用 PyTorch 1.0,并在 PyTorch
网站上按照逐步更新的教程完成任务,例如使用混合前端部署序列到序列模型、训练一个简单的聊天机器人等等。大家可以在 PyTorch GitHub
上看到更新文档。

500

本部分内容来自于:https://code.fb.com/ai-research/pytorch-developer-ecosystem-expands-1-0-stable-release/ 

TensorFlow王位堪忧?

Pytorch自从发布以来,在学术界和工业界都备受关注。由于TensorFlow的难用性以及Pytorch的易用性,导致很多学者,开发者,选择使用pytorch实现自己的模型。

500

自PyTorch出道以来,不断有人表示,发现了这样的趋势:“学术圈正在慢慢地抛弃TensorFlow,转投PyTorch。”

2017年1月19日,PyTorch才第一次公开发布,到今天还不到两年,为何发展得这般蓬勃?

可能原因也许是:1、PyTorch可能比较善良;2、PyTorch的确有亲和力。

PyTorch容易上手。只要熟悉Python,就很容易和PyTorch玩耍在一起了。相比之下,学TensorFlow就像在学一种新的语言,语法很复杂,尤其不适合新手。

PyTorch许多操作都很简洁。比如,Tensor和Numpy之间的互转,可以在PyTorch里优雅地完成,而在TF里就不轻松了。

PyTorch如果debug很方便。PyTorch作为动态图框架的优势就有体现,像给Python代码debug那样。有人说在TF里debug,还没有肉眼看一遍来得快。

对离开TensorFlow拥抱PyTorch的人类来说,TF的槽点简直不胜枚举。

其实短期来看,这没有什么,但就生态而言,pytorch已经在开始领先了。至于TensorFlow在2.0版本推出以后是否能更胜一筹,就得拭目以待了(据说2.0将会全面采用tf.keras的API)。 

500

-END-

全部专栏