您的位置:首页 >聚焦 >

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

2022-07-05 05:31:27    来源:程序员客栈

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


(资料图片仅供参考)

设为星标,干货直达!

近期,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中本身的参数来执行计算,这个在元学习中比较实用。具体示例如下所示:

importtorchfromtorchimportnnfromtorch.nn.utils.statelessimportfunctional_callclassMyModule(nn.Module):def__init__(self):super().__init__()self.fc1=nn.Linear(3,3)self.bn=nn.BatchNorm1d(3)self.fc2=nn.Linear(3,3)defforward(self,x):returnself.fc2(self.bn(self.fc1(x)))m=MyModule()#Defineparameter/buffervaluestouseduringmodulecomputation.my_weight=torch.randn(3,3,requires_grad=True)my_bias=torch.tensor([1.,2.,3.],requires_grad=True)params_and_buffers={"fc1.weight":my_weight,"fc1.bias":my_bias,#Custombuffervaluescanbeusedtoo."bn.running_mean":torch.randn(3),}#Applymodulecomputationtotheinputwiththespecifiedparameters/buffers.inp=torch.randn(5,3)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,支持多个权重:

fromtorchvision.modelsimport*#Oldweightswithaccuracy76.130%resnet50(weights=ResNet50_Weights.IMAGENET1K_V1)#Newweightswithaccuracy80.858%resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)#Bestavailableweights(currentlyaliasforIMAGENET1K_V2)#Notethattheseweightsmaychangeacrossversionsresnet50(weights=ResNet50_Weights.DEFAULT)#Stringsarealsosupportedresnet50(weights="IMAGENET1K_V2")#Noweights-randominitializationresnet50(weights=None)

模型新增Swin Transformer和EfficienetNetV2:

importtorchfromtorchvision.modelsimport*image=torch.rand(1,3,224,224)model=swin_t(weights="DEFAULT").eval()prediction=model(image)image=torch.rand(1,3,384,384)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/

关键词: 数据类型 向后兼容 可以实现

相关阅读