本文主要是介绍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支持还处于试验阶段。
[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列表和字典,支持大多数内置方法,包括简单的包含操作和 for…in
的构造方式。
[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.min
,torch.max
,torch.median
,torch.mode
,torch.kthvalue
,torch.symeig
,torch.eig
,torch.pstrf
,torch.qr
,torch.geqrf
,torch.solve
,torch.slogdet
,torch.sort
,torch.topk
,torch.gels
,torch.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.stack
,torch.cat
: 支持CPU半精度tensors.torch.cross
: 支持负维度.torch.lerp
: 增加像支持Tensor一样支持weight
.torch.transpose
: 和NumPy变得一样了: 1-d和0-d数组都可以接受,返回原来一样的数组.torch.linspace
,torch.logspace
现在可以使用steps=1
和start!=end
torch.cholesky
: 把导数从三角形矩阵变成对称矩阵.torch.lerp
: 提升了数值稳定性.torch.logdet
,torch.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.collate
,data.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
推理时的融合.
英文原文:https://github.com/pytorch/pytorch/releases
请长按或扫描二维码关注本公众号
喜欢的话,请给我个好看吧!
这篇关于PyTorch 1.1.0发布,官方支持TensorBoard,还有更多性能和分布式功能的提升!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!