PyTorch 1.1.0发布,官方支持TensorBoard,还有更多性能和分布式功能的提升!

本文主要是介绍PyTorch 1.1.0发布,官方支持TensorBoard,还有更多性能和分布式功能的提升!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Facebook

编译:ronghuaiyang

导读

Facebook刚刚发布了PyTorch的最新版本,PyTorch1.1.0,这是自从发布PyTorch1.0以来的又一个重大的更新


Facebook刚刚发布了PyTorch的最新版本,PyTorch1.1.0,这是自从发布PyTorch1.0以来的又一个重大的更新,在这个版本中,最最显眼的一个更新就是官方支持TensorBoard了,之前大家都是用的TensorBoardX,这次,终于可以光明正大的使用TensorBoard了,顺便吐槽一下visdom,确实不如TensorBoard好用。

除了TensorBoard之外,其实还有不少重要的更新,下面给大家提供一些摘要,给大家先过目一遍,我列出了一些要点,更多的内容大家可以去看看原文。

注意:不再支持CUDA 8.0

重点

TensorBoard (试验)

使用TensorBoard对可视化和模型调试提供一流的本地支持,这是一个用于检查和理解训练运行、张量和图的web应用程序套件。PyTorch现在支持TensorBoard通过一个简单的 fromtorch.utils.tensorboardimportSummaryWriter命令来写入日志。直方图、嵌入、标量、图像、文本、图形,以及更多东西都可以在训练过程中进行可视化。目前,TensorBoard支持还处于试验阶段。

640?wx_fmt=png

[JIT] ScriptModules中的属性

可以在 ScriptModule上分配属性,方法是用 torch.jit.Attribute指定类型。属性类似于参数或缓冲区,但可以是任何类型。当你调用 torch.jit.save()时,它们将与任何参数/缓冲区一起被序列化,因此它们是在模型中存储任意状态的好方法。

例子:

class Foo(torch.jit.ScriptModule):	def __init__(self, a_dict):	super(Foo, self).__init__(False)	self.words = torch.jit.Attribute([], List[str])	self.some_dict = torch.jit.Attribute(a_dict, Dict[str, int])	@torch.jit.script_method	def forward(self, input: str) -> int:	self.words.append(input)	return self.some_dict[input]

[JIT] 在TorchScript中支持字典和列表

TorchScript现在对列表和字典类型提供了健壮的支持。它们的行为很像Python列表和字典,支持大多数内置方法,包括简单的包含操作和 forin的构造方式。

[JIT] 在TorchScript中用户自己定义类 (试验)

对于更复杂的有状态操作,TorchScript现在支持用 @torch.jit.script标注类。使用这种方法的类可以像其他TorchScript模块一样在c++中jit编译和加载。

@torch.jit.script	
class Pair:	def __init__(self, first, second)	self.first = first	self.second = second	def sum(self):	return self.first + self.second

DistributedDataParallel新功能和指南

nn.parallel.DistributedDataParallel:现在可以封装multi-GPU模块,可以在一台服务器上使用模型并行,以及多台服务器上使用数据并行。

突破性的改进

  • Tensor.set_: Tensor中的 device不再可以通过 Tensor.set_来改变了. 这通常发生在使用默认CUDA设备设置Tensor,然后在另一个CUDA设备的 Storage中交换Tensor时。相反,需要从一开始就在正确的设备上建立Tensor。

  • 注意 lr_scheduler.step()的顺序更改了。

  • torch.unique: 把 sorted的默认值改成了 True.

  • [JIT] 重命名isTensor接口为isCompleteTensor.

  • [JIT] 去掉了GraphExecutor的python绑定.

  • [C++]: many methods on 在 Type上的许多方面现在不再退出了,可以使用函数或者Tensor的方法来起到同样的效果.

  • [C++]TensorOptions 的 Backend构造器不存在了. (18137).

  • [C++, Distributed]: 去掉了c10d ProcessGroup::getGroupRank 也去掉了.

Tensors / dtypes

  • torch.bool: 增加了对 torch.bool类型以及该类型张量 (存储为1-byte)的支持. 支持NumPy的转化,但是操作现在是有限制的.

优化器

  • optim.lr_scheduler.CyclicLR: 支持循环学习率和动量.

  • optim.lr_scheduler.CosineAnnealingWarmRestarts: 新的学习率策略:带热身重启的随机梯度下降.

  • 支持多个同步的学习率策略.

分布式

  • torch.distributions: 现在支持多重继承.

采样

  • quasirandom.SobolEngine: 新采样器.

DistributedDataParallel

  • nn.parallel.DistributedDataParallel: 现在支持带无用参数的模型(例如控制流,比如adaptive softmax等等).

提升

  • torch.mintorch.maxtorch.mediantorch.modetorch.kthvaluetorch.symeigtorch.eigtorch.pstrftorch.qrtorch.geqrftorch.solvetorch.slogdettorch.sorttorch.topktorch.gelstorch.triangular_solve 现在返回一个名称元组来描述输出.

  • torch.empty (还有其他的构造函数): 现在可以接受 pin_memory 参数; 现在不用 torch.Storage也可以就那些pin了.. .

  • torch.histc: 现在支持CUDA了.

  • torch.unique: 增加了 return_counts.

  • torch.logspace: 增加了指定对数底的功能.

  • torch.set_printoptions: 增加对科学计数的支持 .

  • torch.btrifact 现在可以操作超过3维的tensor.

  • torch.kthvalue: 支持CUDA.

  • torch.abs: 支持 uint8 和 int8 类型.

  • torch.stacktorch.cat: 支持CPU半精度tensors.

  • torch.cross: 支持负维度.

  • torch.lerp: 增加像支持Tensor一样支持 weight.

  • torch.transpose: 和NumPy变得一样了: 1-d和0-d数组都可以接受,返回原来一样的数组.

  • torch.linspacetorch.logspace 现在可以使用 steps=1 和 start!=end

  • torch.cholesky: 把导数从三角形矩阵变成对称矩阵.

  • torch.lerp: 提升了数值稳定性.

  • torch.logdettorch.slogdet: 提升了数值精度.

  • Tensor.__contains__ 现在支持了.

  • Tensor.fill_ 和 torch.zeros 在CPU上支持半精度.

  • Tensor.resize_as_Tensor.view: 在CPU上支持半精度.

  • Tensorindexing: 允许通过NumPy布尔值来进行索引.

  • nn.EmbeddingBag: 支持半精度密集后端.

  • nn.Embedding: 修改了密集嵌入来和双后端一起使用.

  • nn.MaxPool1d: 允许列表和元组作为 output_size输入.

  • nn.CTCLoss: 通过 zero_infinity参数可以支持对无限的损失置零.

  • nn.Dropout: 支持在eval时使能.

  • nn.MSELoss: 对不合法的广播进行告警.

  • nn.Module.load_state_dict: 增加两个返回值 missing_keys 和 unexpected_keys.

  • nn.parallel.data_parallel: 强制设备匹配 device_ids.

  • torch.device: 过去只接受设备好的地方,现在都可以用这个了.

  • dtype.int8 这个类型的tensors现在可以转换为NumPy数组了.

  • nn.functional.gumbel_softmax: 使用 dim参数运行多个维度的输入.

  • nn.functional.cosine_similarity: 提高了精度.

  • torch.autograd: 不再保存不需要的输入,提高了内存效率.

  • torch.autograd.profiler: 增加了自身的CPU时间,总的CPU时间.

  • DataLoader: 支持接受一个用户自定义的内存pinning函数.

  • DataLoader: 在EINTR重试libshm .

  • DataLoader: 修改了使用 pin_memory 和 PackedSequence的一个问题.

  • data.utils.collatedata.utils.pin_memory: 现在可以保存名字元组.

  • 在许多的索引错误情况下,使用 IndexError 代替 RuntimeError .

  • 在CPU上支持索引 torch.float16 tensor.

  • 在inplace操作上增加(有限的)错误检测.

  • utils.checkpoint.checkpoint: 支持 None 作为参数 .

  • torch.autograd:为 one of the variables neededforgradient computation has been modifiedbyan inplace operation 异常增加更多的信息.

  • cuda.synchronize: 增加一个设备参数.

  • cuda.reset_max_memory_*: 现在支持了.

  • distributions.Independent: 现在可以计算KL散度了.

  • torch.distributed.new_group: 现在支持覆盖默认的backend.

性能

重点

  • nn.BatchNorm CPU推理速度提升了最高19倍.

  • nn.AdaptiveAvgPool: size=1时通常可以加速30倍.

  • nn.EmbeddingBag CPU性能提升了4倍.

  • Tensor.copy_: 对于大的tensor拷贝加速了2~3倍.

  • torch.nonzero: 在CPU上现在比numpy块2倍.

  • 改进用于为Pascal架构和更新的GPU提升了缓存分配器的性能,Mask-RCNN的内存利用率提高了10-20%。

  • reduction functions: 对于某些大Tensor的情况下,加速了50-80%.

  • [JIT] Graph fuser: 在广播的存在下,更好地融合向后图.

  • [JIT] Graph fuser: batch_norm 推理时的融合.

  • [JIT] Graph fuser: layer_norm 推理时的融合. 

640?wx_fmt=png— END—

英文原文:https://github.com/pytorch/pytorch/releases

640?wx_fmt=jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧640?wx_fmt=gif

这篇关于PyTorch 1.1.0发布,官方支持TensorBoard,还有更多性能和分布式功能的提升!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080845

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转