PyTorch 1.0 发布,JIT、全新的分布式库、C++ 前端
Python 张量与动态神经网络 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.scriptdef 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 模块采用了重新设计的全新分布式库,亮点包括:
- 新的 torch.distributed 是性能驱动的,并且对所有后端完全异步操作,包括:Gloo、NCCL 和 MPI。
- 显着的分布式数据并行性能改进,尤其适用于网络较慢的主机,如基于以太网的主机。
- 为 torch.distributed 包中的所有分布式集合操作添加异步支持。
- 在 Gloo 后端添加了一些 CPU 操作:send、recv、reduce、all_gather、gather 与 scatter。
- 在 NCCL 后端添加 barrier 操作。
- 在 NCCL 后端添加 new_group 支持。
C++ 前端
C++ 前端是 PyTorch 后端的纯 C++ 接口,它遵循已建立的 Python 前端的 API 和体系结构,旨在实现高性能、低延迟和裸机 C++ 应用的研究。它提供了 torch.nn、torch.optim、torch.data 和 Python 前端的其它组件的等价物。下边是两种语言前端的简单比较:
PythonC++import torchmodel = 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()#include <torch/torch.h>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++ API 还处于 unstable 阶段。
PyTorch 1.0 发布,JIT、全新的分布式库、C++ 前端的更多相关文章
- eoLinker上线两周年+ AMS V4.0 发布:全新UI界面,带来领先的API开发管理解决方案!
2018年7月,eoLinker 发布了<eoLinker AMS 2018年年中用户调研问卷>,前后经历一周的时间,共收集到超过1000份有效调查问卷.超过300个有效改进意见. eoL ...
- AgileConfig - 轻量级配置中心1.2.0发布,全新的UI✨✨✨
AgileConfig自发布以来有个"大问题"-UI太丑.因为当初这个项目是给自己用的,连UI界面都没有,全靠手动在数据库里改配置.后来匆匆忙忙使用bootstrap3简单的码了一 ...
- lib-qqwry v1.0 发布 nodejs解析纯真IP库(qqwry.dat)
lib-qqwry是当初学习node时用来练手的一个模块,用来解析纯真IP库的 现在发一个v1.0版本弥补我当时稚嫩的代码. 意外收获是,整理代码后发现,相比v0.x版本 急速模式下的效率提升大概20 ...
- Pytorch 1.0升级到Pytorch 1.1.0
Pytorch 1.0Pytorch 1.0于2018-12-8发布,详见https://github.com/pytorch/pytorch/releases/tag/v1.0.0 主要更新JIT全 ...
- 基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构
基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计;提供给开发者更强大的生 ...
- 官宣,PyTorch 1.0 稳定版本现已推出
简评:快来一起快乐地学习吧. 随着 PyTorch 生态系统和社区继续为开发人员提供有趣的新项目和教育资源,今天(12 月 7日)在 NeurIPS 会议上发布了 PyTorch 1.0 稳定版.研究 ...
- Apache Flume 1.7.0 发布,日志服务器
Apache Flume 1.7.0 发布了,Flume 是一个分布式.可靠和高可用的服务,用于收集.聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型.这是一个可靠.容错的服务. 本次更 ...
- Redisson-Parent 2.5.0 和 3.0.0 发布
Redisson-Parent 2.5.0 和 3.0.0 发布了,Redisson 是基于 Redis 服务之上构建的分布式.可伸缩的 Java 数据结构,高级的 Redis 客户端. Rediss ...
- EasyCriteria 3.0 发布
EasyCriteria 3.0 发布了,这是一个全新的版本,进行了大量的重构.官方发行说明请看:http://uaihebert.com/?p=1898 EasyCriteria 是一个轻量级的框架 ...
随机推荐
- java的Timer和TimerTask
java中Timer类使用的方法是如下的: Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() ...
- java-学习7
数组的定义及使用 public class TestArr { public static void main(String[] args) { //声明数组 double array1[ ...
- 用js实现九九乘法口诀两种方式
js实现九九乘法口诀两种方式: 第一种是用户输入一个数弹出所对应的乘法口诀: <script type="text/javascript"> function art( ...
- response.sendfile() fails with Error: Forbidden
[response.sendfile() fails with Error: Forbidden] 参考:https://github.com/expressjs/express/issues/146 ...
- 学习笔记001之[Android开发视频教学].01_06_Android当中的常见控件
文本框,按钮 菜单按钮(需复写两个方法) 后续需完成联系代码.
- 二、Adapter 适配器
适配器:继承适配与委托适配 需求:Banner 可以输出强电流380v.弱电流12v,但是不能被直接使用.通过别的方式,介间的使用banner? 委托类图: 代码清单: 需要隐藏的功能类: publi ...
- 无法打开工作组信息文件中的表 'MSysAccounts',一个十分搞笑的解决方法
问题提出:从access97导出一个mdb到access2000 为了程序使用命名为system.mdb,后改名为system.dat 在c#中打开,出现 无法打开工作组信息文件中的表 'MSysAc ...
- poj1850(组合数)
题目链接:http://poj.org/problem;jsessionid=B0D9A01EC0F1043088A37454B6CED469?id=1850 题意:给字符串编号,该字符串必须满足由小 ...
- windows2008 r2 不能启用网络发现解决方法
1.出现的问题: 在“网络和共享中心”-“网络发现”不论如何,“启用”网络发现功能,系统都会自动重置为关闭状态. 2.解决方法: 运行中输入 services.msc-->在里边找到下边上个服务 ...
- redis其他相关知识
Redis的安全性 因为redis速度很快,所以在一台比较好的服务器下,一个外部用户在一秒内可以进行15W次的密码尝试,这意味着你需要设定非常强大的密码来防止暴力破解. vim编辑redis.conf ...