简要介绍:在Bladedisc的官方开源三个月后,我们发布了0.2.0版本,该版本应包括大量的性能优化和功能增强。
Bladedisc正式开放三个月后,我们发布了0.2.0版,其中应包括大量的性能优化和功能增强。
Bladedisc目前是行业领先的深度学习优化编译器,用于支持动态形状。深度学习优化编译器负责将上神经网络计算图转换为基础硬件可执行程序。当前流行的深度学习优化编译器(TVM [1],XLA [2],Tensorrt [3]等)对静态碎片支撑很大,并且缺乏对动态形状的支持。XLA目前仅支持静态形状,张力可以支持范围的形状(即,在指定尺寸范围内的动态形状)。Bladedisc编译器为动态形状提供了完整的支持,可以将包含动态形状语义的上层模型描述转换为基础可执行程序的高效率。更多介绍Bladedisc,请参见[5]。
本文介绍了Bladedisc V0.2.0版本的主要更新内容与原始开源版本(IE V0.1.0版本)相比。
当前的神经网络计算图主要由访问密度的操作员(主要包括元素/元素操作员和减少操作员)和计算密集运算符(主要包括GEMM和卷积操作员)组成。BladedISCV0.2.0版本已使许多版本制作了许多版本优化与这两个方面的V0.1.0版本相比。
本章重点介绍了V0.2.0的新的GPU针迹优化(以及附件的形状约束函数增强)。
GPU上的针迹优化方法来自我们在ASPLOS 2022上发表的论文。Stitch的方法旨在解决大量内核计划(调度)和启动(启动)开销(发射)开销和外形膜访问,如以及在不同的基本时间表下,记忆密集型操作员的有效效率是通过GPU(带有寄存器,共享内存和全局内存作为缓冲区),层次数据同步控制和自动访问Matormation的多级中间结果,并自动访问管理。适应的并行性不足 - 将原始的多重融合核一起生成针迹,并生成有效的计算代码。
这次,Bladedisc释放实现了针迹融合的功能,该功能最初分为多重融合,最初由减少操作员通过共享存储器划分,以实现CUDA螺纹块的全局内存的针迹内存,并且尚未实现自动adaptationCodegen在版本中)。我们提供一组示例,以显示如何打开针迹优化。
动态形状为优化针迹带来了新的挑战。最重要的挑战是,如果不知道确切的形状,请正确判断缝合在一起的OP之间的数据局部性,以便成为其中一种是正确的。DATA传输分布膜被存储(即GPU共享内存)。此更新包含一系列形状约束作为对GPU针迹函数的基本支持。它的基本思想是挖掘和扩展生产者OP和消费者OP和兄弟姐妹OP之间的形状约束,并建立全球形状的等效关系在象征之间;在此基础上,进一步建立了形状维度之间的乘法关系。分析诸如RESHAPE之类的操作员之间的等效关系。
值得注意的是,在先前的版本(即Bladedisc开源版本v0.1.0)中,我们已经实现了CPU -END CPU -END的针迹优化,计算CPU上模型的sub -diagram,因此为了更好地增强数据部分性性的数据一部分,请提高访问效率。
本章主要介绍此更新中包含的GEMM合并优化,以及CPU上的Pre-tre-tre-act和布局优化计算密集运算符。
GEMM合并优化
这次版本实现了以下两个GEMM合并和优化:
Gemm合并带来了两个好处。一个是Gemm合并可以增加计算大小,以便更好地填充硬件的计算峰并提高计算效率;第二个是GEMM合并可以减少GPU内核的数量,从而减少内核调度和传输的费用。
CPU上密集运算符的预备包装和布局优化
在CPU上,对于GEMM和卷积计算,Bladedisc支持了GEMM操作的预先包装优化。通过包装数据布局转换,矩阵操作的访问可以更好地使用数据的局部性(例如,使数据的局部性(例如,因此,更好地适应了Sodata访问权限)。特别是,Bladedisc将其封装为CPU上的计算库以及预包装功能是通过包装和调用IT提供的包装功能实现的。我们提供一个基于Albert的示例,以展示如何打开预包装优化。
对于卷积函数,不同硬件供应商的不同计算库可能需要不同的数据。布局以获得最佳性能。不同布局下不同数据类型的性能也将有所不同(例如,tensorcore上NVIDIA GPU上的FP16和FP32 SIMT CORE上的布局要求不同)。此时间发行版在CPU和GPU上的计算库与GPU结合使用。数据类型注意事项,计算卷积的最佳数据布局。数据布局的转换是通过转置操作执行的。我们达到了前后转置的疏忽,并最大程度地减少了额外转置的影响。
性能验证
上图显示了Bladedisc对四个当前模型的性能影响(在T4 GPU上进行了验证,并且仍有更多模型得到验证)。图中的框架表明原始的深度学习框架(FastSpeSpeech2使用Tensorflow 2.4框架2.4框架,其他模型,其他模型使用pytorch 1.7.1框架),静态编译器表示框架下静态优化编译器的性能(TensorFlow使用XLA,Pytorchby转向ONNX以优化Tensorrt 8.2,Tensorrt 8.2在此过程中,在优化T5和S2T的过程中失败没有绩效数据)。可以看出,与基本的深度学习框架相比,Bladedisc可以实现最大的性能加速效应。在BERT和FASTSPEECH2上,BladedISC达到了行业高级静态优化编译器的优化效果。
这次还包括一系列重要功能更新,包括:
X86和AARCH64 CPU硬件的支持
这个时间发行版在X86和AARCH64体系结构的CPU平台上提供了大量更新和支持。
就X86平台而言,基于现有的密集密集的操作员代码码(v0.1.0中包含的功能),此版本增加了计算密集操作员的支持。特别是,Bladedisc还支持两个不同的计算库,这两个不同的计算库同时在MKL和ONEDNN中的库,并在运行时支持按需选择。除功能支持外,此恢复还包括计算密集运算符的性能优化(例如,布局优化和本章中提到的重量预包装优化)。
就AARCH64平台而言,此时间发行版完成了AARCH64平台对密度运算符代码Godgen的改编,并支持了计算密度运算符ACL的支持(通过ONEDNN的形式)。
在上述功能的支持下,BladedISC在X86平台和AARCH64平台上一直无止境。有关特殊的用法和性能效果,请参见Baldedisc和Pytorch示例提供的TF示例。
刀片推理加速器Tensorrt的圆图支持
这次发行版开源刀片推理加速器[7]两个重要功能:Torchblade和TensorFlowBlade。这些部分是刀片推理加速器对两个最广泛使用的深度学习框架的访问层,旨在改善体验和体验和体验和模型优化的完整性。除了访问BladedISC,BLADE的推理加速器还可以访问tensorrt.speceperiale,对于Pytorch和TensorFlow的模型,Blade推理加速器将自动识别通过Tensorrt优化的计算器,并给出了浓度并给予强度优化引擎以进行优化。在一定程度上,它提高了使用张力的成功率,并提供了与Bladedisc合并优化的可能性。
Pytorch培训的概念验证跑步
Bladedisc逐渐支持Pytorch模型的训练和优化。目前,它已经成功地运行了MNIST的简单模型。在实现级别上,Bladediscing使用Pytorch的懒惰张量核心机制将Torchscript子饰带优化为有效的可执行程序。
原始链接
本文是阿里巴巴云的原始内容,未经许可就无法重印。
原始:https://juejin.cn/post/7101202491965964296