PyTorch1.12正式发布,还没更新的小伙伴可以更新。在PyTorch1.11发布几个月后,PyTorch1.12就来了!此版本包含433名贡献者自1.11版以来的超过3124次提交。1.12版本进行了重大改进并修复了许多错误。随着新版本的发布,讨论最多的大概就是PyTorch1.12支持AppleM1芯片了。其实早在今年5月,PyTorch官方就宣布在M1版Mac上正式支持GPU加速的PyTorch机器学习模型训练。以前,在Mac上进行PyTorch训练只能利用CPU,但随着PyTorch1.12的发布,开发人员和研究人员可以利用AppleGPU来显着加快模型训练速度。在Mac上引入加速PyTorch训练PyTorchGPU训练加速是使用AppleMetalPerformanceShaders(MPS)作为后端实现的。MPS后端扩展了PyTorch框架,提供脚本和函数来在Mac上设置和运行操作。MPS使用针对每个MetalGPU系列的独特特性进行微调的内核功能来优化计算性能。新设备将机器学习计算图和原语映射到MPSGraph框架和MPS提供的调整内核上。每一台搭载苹果自研芯片的Mac都拥有统一的内存架构,让GPU直接访问完整的内存存储。据PyTorch官方称,这使得Mac成为机器学习的绝佳平台,允许用户在本地训练更大的网络或批量大小。这降低了与基于云的开发相关的成本或对额外本地GPU计算能力的需求。统一内存架构还减少了数据检索延迟并提高了端到端性能。可以看出,与CPUbaseline相比,GPU加速在训练性能上实现了成倍的提升:在GPU的支持下,训练和评估速度超过了CPU(64核GPU)、128GB内存、2TBSSDMacStudio系统测试结果。测试模型是ResNet50(批量大小=128)、HuggingFaceBERT(批量大小=64)和VGG16(批量大小=64)。性能测试是使用特定的计算机系统进行的,反映了MacStudio的近似性能。PyTorch1.12Front-endAPI的其他新特性:TorchArrowPyTorch已经正式发布了一个新的Beta版本供用户试用:TorchArrow。这是一个用于批量数据处理的机器学习预处理库。它是高性能的Pandas风格,并有一个易于使用的API来加速用户预处理工作流程和开发。(测试版)PyTorch中的Complex32和复数卷积目前,PyTorch原生支持复数、复数autograd、复数模块和大量复杂运算(线性代数和快速傅里叶变换)。复数已经在许多库中使用,包括torchaudio和ESPNet,PyTorch1.12通过复卷积和支持半精度FFT运算的实验性complex32数据类型进一步扩展了复数功能。由于CUDA11.3包的一个bug,如果用户想使用复数,官方推荐使用CUDA11.6包。(Beta)正向模式自动微分正向模式AD允许在正向传递中计算方向导数(或等效的雅可比向量积)。PyTorch1.12显着提高了前向模式AD覆盖率。BetterTransformerPyTorch现在支持多个CPU和GPU快速路径实现(BetterTransformer),Transformer编码器模块,包括TransformerEncoder、TransformerEncoderLayer和MultiHeadAttention(MHA)的实现。在新版本中,BetterTransformer在许多常见场景中的速度提高了2倍,具体取决于模型和输入特征。新版本的API支持与之前的PyTorchTransformerAPI兼容,如果它们满足快速路径执行要求,它们将加速现有模型,以及读取使用之前版本的PyTorch训练的模型。此外,新版本中还有一些更新:模块:模块计算的一个新的beta特性是函数式API。这个新的functional_call()API让用户可以完全控制模块计算中使用的参数。TorchData:DataPipe改进了与DataLoader的兼容性。PyTorch现在支持基于AWSSDK的DataPipes。DataLoader2已作为一种管理DataPipes与其他API和后端之间交互的方式被引入。nvFuser:nvFuser是用于编译到CUDA设备的新的、更快的默认融合器。矩阵乘法精度:默认情况下,float32数据类型的矩阵乘法现在将以全精度模式运行,速度较慢但产生的结果更一致。Bfloat16:为不太精确的数据类型提供更快的计算时间,因此在1.12中对Bfloat16数据类型进行了新的改进。FSDPAPI:FSDPAPI在1.11版中作为原型发布,在1.12版中添加了一些改进后达到了测试版。有关详细信息,请参阅:https://pytorch.org/blog/pytorch-1.12-released/。
