PyTorch1.12发布,又一个新增库:TorchArrow,对标Pandas!

机器学习算法工程师

共 4508字,需浏览 10分钟

 · 2022-07-05

点蓝色字关注“机器学习算法工程师

设为星标,干货直达!


近期,PyTorch团队发布了PyTorch1.12新版本,PyTorch1.12版本首次支持CUDA11.6版本,具体安装指令如下:PyTorch1.12的主要更新内容总结如下:

TorchArrow库

这是新发布的一个基于torch.Tensor的数据预处理库,对标的是流行的Pandas库。其中Columns和Pandas中的Series类一样,用来创建一个一维的序列:而Dataframes也对比Pandas中的DataFrames,用来创建二维的数据,即一系列等长的Columns:更多的内容可以见教程:https://github.com/pytorch/torcharrow/blob/main/tutorial/tutorial.ipynb

Module的Functional API

这个feature(目前是beta阶段)可以让我们基于函数式的方式来执行PyTorch的Module计算,它的灵活之处是我们可以自定义外部的参数来替换Module中本身的参数来执行计算,这个在元学习中比较实用。具体示例如下所示:

import torch
from torch import nn
from torch.nn.utils.stateless import functional_call

class MyModule(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(33)
        self.bn = nn.BatchNorm1d(3)
        self.fc2 = nn.Linear(33)

    def forward(self, x):
        return self.fc2(self.bn(self.fc1(x)))

m = MyModule()

# Define parameter / buffer values to use during module computation.
my_weight = torch.randn(33, requires_grad=True)
my_bias = torch.tensor([1.2.3.], requires_grad=True)
params_and_buffers = {
    'fc1.weight': my_weight,
    'fc1.bias': my_bias,
    # Custom buffer values can be used too.
    'bn.running_mean': torch.randn(3),
}

# Apply module computation to the input with the specified parameters / buffers.
inp = torch.randn(53)
output = functional_call(m, params_and_buffers, inp)

支持Complex32和Complex Convolution

目前,PyTorch 原生支持复数、复数、复数、复数模块和许多复杂运算,包括线性代数和快速傅里叶变换 (FFT) 算子。许多库,包括 torchaudio 和 ESPNet,已经在 PyTorch 中使用了复数,并且 PyTorch 1.12 进一步扩展了复杂的功能,包括复杂的卷积和实验性的 complex32(“复半数”)数据类型,可以实现半精度 FFT 运算。由于 CUDA 11.3 包中的错误,如果您使用复数,我们建议使用车轮中的 CUDA 11.6 包。

Forward-mode Automatic Differentiation

前向模式 AD 允许在前向计算中直接计算方向导数(或等效地,雅可比向量积)。PyTorch 1.12 显着提高了前向模式 AD 的opertiaon覆盖率。有关更多信息,请参阅教程:https://pytorch.org/tutorials/intermediate/forward_ad_usage.html#forward-mode-automatic-differentiation-beta。我们在深度学习中常采用reverse-mode AD来计算梯度,即我们常说的BP算法。

TorchData优化

TorchData 的DataPipe完全向后兼容现有的DataLoader,涉及多处理和分布式环境中的shuffle和动态分片。DataLoader2也进入prototype阶段,它预备是为适配DataPipe。

性能提升:nvFuser

nvFuser是用于PyTorch的深度学习编译器。在 PyTorch 1.12 中,Torchscript 将其默认 fuser(用于 Volta 和更高版本的 CUDA 加速器)更新为 nvFuser,它支持更广泛的操作,并且比以前用于 CUDA 设备的 fuser 更快。即将发布的一篇博文将详细介绍 nvFuser,并展示它如何加速各种网络的训练。

TorchVision升级到V0.13

全面升级到Multi-weight support API,支持多个权重:

from torchvision.models import *

# Old weights with accuracy 76.130%
resnet50(weights=ResNet50_Weights.IMAGENET1K_V1)

# New weights with accuracy 80.858%
resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)

# Best available weights (currently alias for IMAGENET1K_V2)
# Note that these weights may change across versions
resnet50(weights=ResNet50_Weights.DEFAULT)

# Strings are also supported
resnet50(weights="IMAGENET1K_V2")

# No weights - random initialization
resnet50(weights=None)

模型新增Swin Transformer和EfficienetNetV2:

import torch
from torchvision.models import *

image = torch.rand(13224224)
model = swin_t(weights="DEFAULT").eval()
prediction = model(image)

image = torch.rand(13384384)
model = efficientnet_v2_s(weights="DEFAULT").eval()
prediction = model(image)

物体检测模型RetinaNet,Faster RCNN和Mask RCNN进行优化,性能大幅度提升:

更多内容见:https://pytorch.org/blog/pytorch-1.12-new-library-releases/,https://pytorch.org/blog/pytorch-1.12-new-library-releases/


推荐阅读

深入理解生成模型VAE

DropBlock的原理和实现

SOTA模型Swin Transformer是如何炼成的!

有码有颜!你要的生成模型VQ-VAE来了!

集成YYDS!让你的模型更快更准!

辅助模块加速收敛,精度大幅提升!移动端实时的NanoDet-Plus来了!

SimMIM:一种更简单的MIM方法

SSD的torchvision版本实现详解


机器学习算法工程师


                                    一个用心的公众号


浏览 208
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报