GPU|BladeDISC 0.2.0更新发布( 二 )













【GPU|BladeDISC 0.2.0更新发布】
两个GEMM算子有公共的操作数 , 将其合并为一个算子 , 比如 A x B 和 A x C 可以合并为 A x concat(B C) , 真实模型中的典型场景是Attention中的QKV合并; 两个GEMM有相同的计算形状 , 将其合并为一个batched GEMM , 比如对于 A x B 和 C x D , 如果A和C以及B和D的形状相同 , 那么就可以合并为一个batched GEMM 。GEMM合并带来了两个好处 。 其一是 , GEMM合并可以增加计算尺寸 , 从而更好地打满硬件的计算峰值 , 提升计算效率;其二是 , GEMM合并可以减少GPU kernel数量 , 从而降低kernel调度和发射的开销 。CPU上计算密集算子的pre-packing和layout优化 在CPU上 , 对于GEMM及Convolution计算 , BladeDISC支持对GEMM的操作数进行pre-packing优化 , 通过packing的数据layout转换 , 使得矩阵乘操作对操作数的访问能够更好地利用数据局部性(比如使得数据访问更好地适配cache line) 。 具体来说 , BladeDISC封装了CPU上的计算库 , 通过对其提供的packing函数的封装与调用来实现pre-packing功能 。 我们提供了基于Albert的示例以展示如何开启pre-packing优化 。对于Convolution函数 , 不同硬件vendor的不同计算库可能需要不同的数据layout以得到最佳性能 , 不同的数据类型在不同layout下的性能表现也会不同(比如 , NVIDIA GPU上的FP16在TensorCore上和FP32在SIMT core上对layout的要求有所不同) 。 本次release针对CPU和GPU上的计算库 , 结合数据类型的考虑 , 为Convolution计算自动适配最佳的数据layout 。 数据layout的转换通过transpose操作来进行 , 我们实现了前后的transpose的抵消 , 最大限度减少额外带来的transpose的影响 。性能验证 上图展示了BladeDISC在四个当下流行的模型上的性能效果(在T4 GPU上进行验证 , 更多模型还在验证中) 。 图中的Framework表示原始的深度学习框架(FastSpeech2使用了TensorFlow 2.4框架 , 其他模型使用了PyTorch 1.7.1框架) , Static Compiler表示该框架下接入静态优化编译器后的性能(TensorFlow使用XLA , PyTorch通过转onnx来利用TensorRT 8.2进行优化 , TensorRT 8.2在优化T5和S2T的过程中失败 , 因此没有性能数据) 。 可以看到 , BladeDISC相对于基本的深度学习框架可以取得最高达到8倍的性能加速效果 , 在BERT和FastSpeech2上 , BladeDISC取得了与业界先进的静态优化编译器相近的优化效果 。重要功能支持 本次release也包括一系列的重要功能更新 , 包括: X86和AArch64 CPU硬件的支持 本次release在X86和AArch64架构的CPU平台上都做了大量更新和支持 。 X86平台方面 , 在已有的访存密集算子codegen支持的基础上(v0.1.0包含的功能) , 本次release增加了计算密集算子的支持 。 具体来说 , BladeDISC同时支持了MKL和oneDNN两种不同的计算库后端 , 并支持运行时按需选择 。 在功能支持之外 , 本次releaes也包括对计算密集算子的性能优化(如前面章节提到的layout优化和weight pre-packing优化) 。AArch64平台方面 , 本次release完成了访存密集算子codegen对于AArch64平台的适配 , 以及计算密集算子库ACL的支持(通过oneDNN的形式) 。在上述功能的支持下 , BladeDISC在X86平台以及AArch64平台上都已经端到端可用 。 具体使用方式及性能效果参见BaldeDISC提供的TF示例及PyTorch示例 。Blade推理加速器TensorRT的圈图支持 本次release开源了Blade推理加速器[7
两个重要的功能:TorchBlade和TensorFlowBlade 。 这两部分是Blade推理加速器面向两个最为广泛使用的深度学习框架所做的接入层 , 旨在提升模型优化的体验和完整度 。 Blade推理加速器在接入BladeDISC之外 , 也接入了TensorRT 。 具体来说 , 对于PyTorch和TensorFlow的模型 , Blade推理加速器会自动识别出可以被TensorRT优化的计算子图 , 并送给TensorRT优化引擎进行优化 。 一定程度上提升了使用TensorRT的转换成功率 , 并且提供了与BladeDISC发挥联合优化作用的可能性 。PyTorch Training的Proof-of-Concept跑通 BladeDISC正在逐步支持PyTorch模型的训练优化 , 目前已经成功跑通mnist的简单模型 。 在实现层面 , BladeDISC利用PyTorch的Lazy Tensor Core机制 , 将TorchScript子图优化为高效的可执行程序 。 详细的设计文档见此处 。参考文献 \"TVM: An Automated End-to-End Optimizing Compiler for Deep Learning\" Tianqi Chen Thierry Moreau Ziheng Jiang Lianmin Zheng Eddie Yan Meghan Cowan Haichen Shen Leyuan Wang Yuwei Hu Luis Ceze Carlos Guestrin Arvind Krishnamurthy. OSDI 2018 \"XLA: Optimizing Compiler for Machine Learning\" https://www.tensorflow.org/xla \"NVIDIA TensorRT\" https://developer.nvidia.com/tensorrt \"Putting the VM in TVM: The Relay Virtual Machine\" https://tvm.apache.org/docs//arch/virtual_machine.html \"阿里 BladeDISC 深度学习编译器正式开源\" https://zhuanlan.zhihu.com/p/462641670 \"AStitch: Enabling A New Multi-Dimensional Optimization Space for Memory-Intensive ML Training and Inference on Modern SIMT Architectures\" Zhen Zheng Xuanda Yang Pengzhan Zhao Guoping Long Kai Zhu Feiwen Zhu Wenyi Zhao Xiaoyong Liu Jun Yang Jidong Zhai Shuaiwen Leon Song and Wei Lin. ASPLOS 2022 Blade推理加速器 https://help.aliyun.com/document_detail/205128.html 原文链接:http://click.aliyun.com/m/1000342896/ 本文为阿里云原创内容 , 未经允许不得转载 。