Pytorch v0.1.12版本发布,添加CUDA的Sparse支持
博客专区 > earnpls 的博客 > 博客详情
Pytorch v0.1.12版本发布,添加CUDA的Sparse支持
earnpls 发表于6个月前
Pytorch v0.1.12版本发布,添加CUDA的Sparse支持
  • 发表于 6个月前
  • 阅读 93
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

API更改

  1. torch.range被弃用,赞成torch.arangenumpy和python范围一致。
  2. 在稀疏的传感器上,contiguous更名为现在,coalesce并且coalesce现在已经不合适。 (提醒Sparse API仍然是实验性和演进性的,所以我们不提供后向兼容性)。

新功能

新层次和功能

  1. torch.topk现在支持所有CUDA类型,不只是torch.cuda.FloatTensor。
  2. 增加了三路排名丢失:nn.TripletMarginLoss 添加每个实例规范化层:nn.InstanceNorm1d,1. nn.InstanceNorm2d,nn.InstanceNorm3d 每个通道被视为一个实例进行归一化,并且均值减去和标准化完成。当处理较大的图像和更小的迷你批次时,这对BatchNorm喜欢效果是有用的。
  3. nn.ZeroPad2d并nn.ConstantPad2d添加。
  4. nn.Bilinear 被添加,它计算 Y = X1 X2 + b

负尺寸将从最后一维度索引张量。

使用维度参数的每个单个函数也将允许采取负面维度。

负尺寸将从最后一维度索引张量。

例如:

x = torch.randn(10, 20, 30)
y = torch.mean(x, dim = -1)

在这里,由于x具有3个维度,而dim = -1是最后一个维度,即dim=3采取平均值。

具有维参数的函数是:

narrow, transpose, size, cat, chunk, gather, index_select, split, squeeze,
stack, unbind, unsqueeze, cumprod, cumsum, mean, median, mode, norm, prod, std,
sum, var, kthvalue, max, min, sort, topk, renorm,
index_add, index_copy, index_fill, scatter, select, unfold

CUDA支持sparse传感器,CPU速度更快

现在torch.sparse也支持API 的一部分torch.cuda.sparse.*Tensor

CUDA支持的功能有:

sparse_mask, to_dense, coalesce, transpose, spaddmm
spcadd, mul, div, cadd, csub, cmul

nn.Embedding现在支持sparse,即使在使用sparse=True这些sparse函数的CUDA(带标志)上也是如此。

一种新的混合矩阵乘法hspmm运算,将sparse矩阵与密集矩阵相乘,并以混合张量(即1个sparse维度,1个dense维度)的形式返回一个矩阵。

几个CPU稀疏函数具有更高效的实现。

在一个很快被黑客入侵的@martinraison嵌入分类器训练脚本我们看到CUDAsparse表现以及CUDA密集:https : //gist.github.com/martinraison/1e7c18c6f6eda87f1cb4995b0e6a22a5

不同处理时间对比:

  • CPU CUDA
    Dense 10 0.86
    Sparse 0.15 0.13

named_parameters来过滤特定的参数类型

假设您想为模型的所有参数添加重量衰减,除了偏差。您如何只获得模型的偏见?为此 引入了nn.Module.named_parameters。 它加入named_childrennamed_modules帮助您过滤模型的特定属性。

过滤模型的偏差并给它们weight_decay为0的示例:

import torch
import torch.nn as nn
import torch.optim as optim
m = nn.Sequential(
      nn.Linear(10, 20),
      nn.ReLU(),
      nn.Linear(20, 20),
      nn.ReLU(),
    )
weights, biases = [], []
for name, p in m.named_parameters():
   if 'bias' in name:
       biases += [p]
   else:
       weights += [p]

optim.SGD([
  {'params': weights},
  {'params': biases, weight_decay=0}
], lr=1e-2, momentum=0.9, weight_decay=1e-5)

性能改进

  1. cumsum并且cumprod在适当的情况下通过使用某些推力原语在GPU上显着加快。
  2. LSTMCell并且GRUCell现在在GPU上通过融合内核显着更快
  3. CuDNN的默认算法已经更改,PRECOMP_GEMM这是一个 更快的算法,需要一小部分工作空间。以前,它曾经 是IMPLICIT_GEMM零工作空间,但是显着较慢。
  4. 通过将批次直接整理到共享内存中,数据加载器的5%至10%的改进。
  5. 现在,SVD通过分频(sgesdd)在GPU上进行计算,可以提供2x至5x的加速。
  6. 常用的功能expand已被移至C,以便在较小型号中具有更好的性能。

Bug修复

  1. 对大范围的THNN功能增加了对重量和偏差的连续检查
  2. random_当指定下限和上限时,使范围正确
  3. parallel_apply 现在可以拿出不可争议的论据
  4. gradDot功能中正确重塑(输入不必是1D矢量...)
  5. 添加 Variable.type_as
  6. 统一参数名称normrenorm拥有p=norm_typedim=dim
  7. btrisolve 工作在CPU双打
  8. 通过实现固定的torch.nn.Moduleipython autocomplete __dir__
  9. device_ids现在可以None再次F.data_parallel使用所有可用的GPU
  10. BatchNorm(<5.1.10)Dilation(6.0.20)中的解决方法cudnn错误
  11. Conv1d CPU中填补错误修复
  12. remainder并且cremainder对于整数类型是固定的
  13. 固定存储器泄漏btrisolvegetri
  14. 如果由于任何异常,nn.Module的源不能被检索,则将 序列化处理为非致命的
  15. collate_fn 现在保留numpy数组的类型
  16. is_tensoris_storage现在是固定的旧式Python类
  17. torch.cat 现在支持关键字参数
  18. CUDA集体支持的合并,但输入都被假定为相同的Tensor类型。这是固定的
  19. 修复autograd中的死锁错误,因为在特定的,linux发行版(特别是ArchLinux)中有一个基本的glibc错误
  20. abs现在固定为charshortcuda类型
  21. torch.diag在给出维度参数时修正自动格式
  22. 在CPU上修复分组卷积 bias=False
  23. 揭露dilated卷积ConvTranspose*d
  24. 修正了一个错误的HingeEmbeddingLoss地方margin现在可以通过kwargs指定

改进的错误消息

  1. 当没有CUDA设备可用时修复错误和消息。

下载

源代码(zip)

源代码(tar.gz)

 

在这里,我整理发布了Pytorch中文文档,方便大家查询使用,同时也准备了中文论坛,欢迎大家学习交流!

Pytorch中文文档

Pytorch中文论坛

Pytorch中文文档已经发布,完美翻译,更加方便大家浏览:

Torch中文网:https://ptorch.com/

Pytorch中文网:https://ptorch.com/

Pytorch中文文档:https://ptorch.com/docs/1/

共有 人打赏支持
粉丝 5
博文 26
码字总数 74
×
earnpls
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: