深度学习函数库PyTorch 2.0更新编译器技术,大幅度提升模型运算性能

PyTorch基金会预计在2023年3月,将正式推出PyTorch 2.0,现在发布开发早期版本供开发者测试,这个新版本从根本改进PyTorch编译器的运行方式,对Dynamic Shapes和分布式运算提供更高的性能和支持。

PyTorch 2.0加入torch.compile功能,官方提到,这除了能将PyTorch的性能推向另一个新高度之外,也是将PyTorch中C++的部分移回Python的重要更新,而这也是这个版本被称为PyTorch 2.0的原因。

由于PyTorch 2.0完全向后兼容,因此torch.compile定位是一个额外的可选功能,torch.compile底层是一系列新技术,包含了TorchDynamo、AOTAutograd、PrimTorch和TorchInductor。这几个新功能都是由Python编写,并支持Dynamic Shapes。Dynamic Shapes供用户发送不同大小的张量,但是却又不需要重新编译。

为了验证这些技术,PyTorch使用来自各领域163个开源模型构建测试基准,包括图像分类、对象侦测、图像生成等任务,还有各种NLP任务,如语言建模、问答、串行分类、推荐系统和增强学习。这涵盖HuggingFace Transformers的46个模型、TIMM的61个模型以及TorchBench的56个模型。

开发团队使用基准中的163个模型,测试torch.compile的加速与准确性,由于执行速度可能取决于资料类型,因此测量包括float32和自动混合精度(Automatic Mixed Precision,AMP),但有鉴于AMP更常被使用,因此计算方式以0.75*AMP+0.25*float32不平均加权来计算平均速度。

在163个开源模型中,93%模型能够在torch.compile运行,在Nvidia A100 GPU上平均训练速度提高43%,在使用Float32精度下,执行速度提高21%,而使用AMP精度则加速51%。对TIMM模型整体加速38%,HuggingFace模型加速52%,而TorchBench则有76%的加速。

torch.compile的默认后端TorchInductor,支持CPU和Nvidia Volta与Ampere GPU,目前还不支持其他GPU或是加速器,或是较旧的Nvidia GPU。torch.compile仍在开发早期阶段,但用户可以在Nightly版本先行试用。