AMD Composable Kernel: 定制化算子融合,大幅提升AI端到端性能

简介: AMD Composable Kernel: 定制化算子融合,大幅提升AI端到端性能

Composable Kernel(CK)库旨在提供一套在 AMD GPU 上算子融合的后端方案,该研究希望未来能够移植到 AMD 的所有 GPU 上,并且最终也可以被移植到 AMD CPU 上,该项目已开源。与Meta AITemplate的深度合作大幅提升了AI模型在AMD GPU的端到端性能。

图优化在降低 AI 模型的训练和推理使用的时间和资源方面起着重要作用。图优化的一个重要功能是模型中将可以融合的算子进行融合,通过降低内存占用和减少数据在低速内存中的搬运来提高计算效率。然而,实现一套能够提供各种算子融合的后端方案难度很大,导致在实际硬件上 AI 模型能够使用的算子融合非常有限。


Composable Kernel (CK)库旨在提供一套在 AMD GPU 上的算子融合的后端方案。CK 使用通用编程语言 HIP C++,完全开源。其设计理念包括:


高性能 & 高生产力:CK 的核心是一组精心设计,高度优化,可复用的基础模块。CK 库内所有的算子都是通过组合这些基础模块实现的。复用这些基础模块大大缩短开发后端算法的周期,同时还能保证高性能。

精通当前的 AI 问题,快速适应未来的 AI 问题:CK 旨在提供一套完整的 AI 算子后端方案,这让复杂的算子融合成为可能,因为这样让整个后端都可以用 CK 实现,而不需依赖外部算子库。CK 的可复用基础模块足以实现常见 AI 模型(机器视觉,自然语言处理,等等)所需的各种算子及其融合。当新出现的 AI 模型需要新的算子时,CK 也将会提供所需的基础模块。

AI 系统专家的简单但强大的工具:CK 所有的算子都是用 HIP C++ 模版实现的。AI 系统专家可以通过实例化模版来定制这些算子的属性,比如数据类型,元操作类型,张量存储格式,等等。这通常只需要几行代码。

友好的 HIP C++ 界面:HPC 算法开发者一直在推动着 AI 计算加速的前沿。CK 的一个重要设计理念就是要让 HPC 算法开发者更容易对 AI 加速作出贡献。因此 CK 所有核心模块都是用 HIP C++ 实现,而不是 Intermediate Representation (IR)。HPC 算法开发者直接以他们熟悉的编写 C++ 代码的形式编写算法,而无需像基于 IR 的算子库那样,以通过编写针对某种特定算法的 Compiler Pass 来实现。这样做可以大大提高算法的迭代速度。

可移植性:今天使用 CK 作为后端的图优化将能够移植到未来 AMD 的所有的 GPU 上,并且最终也可以被移植到 AMD CPU 上【2】。



CK 源代码:https://github.com/ROCmSoftwarePlatform/composable_kernel


核心概念


CK 引入了两个概念以提高后端开发者的生产力:


1. 开创性的引入“张量坐标变换” (Tensor Coordinate Transformation)降低 AI 算子的编写复杂度。该研究开创性地定义了一组可复用的 Tensor Coordinate Transformation 基础模块,并且用它们把复杂的 AI 算子(比如卷积,group normalization reduction,Depth2Space,等等)以数学严谨的方式重新表达成了最基础的 AI 算子(GEMM,2D reduction,tensor transfer,等等)。这项技术可以让为基础 AI 算子编写的算法直接被用到所有与之对应的复杂的 AI 算子上,而无需重写算法。


2. 基于 Tile 的编程范式:开发算子融合的后端算法可以被看成先将每一个融合前的算子(独立算子)拆解成许多 “小块” 的数据操作,然后再把这些 “小块” 操作组合成融合的算子。每一个这样的 “小块” 操作都对应一个原始的独立算子,但是被操作的数据只是原始张量的一部分(tile),因此这样的 “小块” 操作被称为 Tile Tensor Operator。CK 库包含一组针对 Tile Tensor Operator 的高度优化的实现,CK 里所有的 AI 独立算子和融合算子都是用它们实现的。目前,这些 Tile Tensor Operators 包括 Tile GEMM,Tile Reduction 和 Tile Tensor Transfer。每一个 Tile Tensor Operator 都有针对 GPU thread block,warp 和 thread 的实现。


Tensor Coordinate Transformation 和 Tile Tensor Operator 共同组成了 CK 的可复用的基础模块。


图 1,使用 CK 的 Tensor Coordinate Transformation 基础模块将 convolution 算子表达成 GEMM 算子

 

图 2,CK 的组成(下:可复用的基础模块;上:独立算子与融合算子)


代码结构


CK 库结构分为四层,从下到上分别是:Templated Tile Operator,Templated Kernel and Invoker,Instantiated Kernel and Invoker 和 Client API【3】。每一层对应不同的开发者。


AI 系统专家:“我需要一个后端方案提供高性能的独立和融合算子让我可以直接使用”。这个例子【4】里用的 Client API 和 Instantiated Kernel and Invoker 提供了预先实例化并编译好的对象,以满足这类开发者的需求。

AI 系统专家:“我为一个开源的 AI 框架做最先进的图优化工作。我需要一个能够为图优化所需的所有融合算子提供高性能 kernel 的后端方案。同时我也需要定制这些 kernel,所以像 “要么接受,要么弃用” 的黑盒解决方案不能满足我的需求”。Templated Kernel and Invoker 层能满足这类开发者。比如这个例子【5】中开发者可以自己使用 Templated Kernel and Invoker 层实例化出所需的 FP16 的 GEMM + Add + Add + FastGeLU 的 kernel。

HPC 算法专家:“我的团队为公司内部不断迭代的 AI 模型开发高性能后端算法。我们团队中有 HPC 算法专家,但我们仍然希望可以通过复用和改进硬件供应商提供的高度优化的源代码来提高我们的生产力,并且让我们的代码可以被移植到未来的硬件构架上。我们希望可以不用通过与硬件提供商分享我们的代码来做到这点”。Templated Tile Operator 层可以帮助到这一类开发者。比如这个代码【6】中开发者使用 Templated Tile Operator 来实现 GEMM 的优化管线。


图 3,CK 库四层结构

 

基于 AITemplate + CK 的端到端模型推理


Meta 的 AITemplate 【7】(AIT)是一个统一 AMD 和 Nvidia GPU 的 AI 推理系统。AITemplate 使用 CK 作为其 AMD GPU 上的后端,它使用的是 CK 的 Templated Kernel and Invoker 层。


AITemplate + CK 在 AMD Instinct™ MI250 上取得了多个重要 AI 模型最先进的推理性能。CK 里大多数先进的融合算子的定义,都是在 AITemplate 团队的远见下推动的。许多融合算子的算法也是由 CK 和 AITemplate 团队共同设计。


本文比较了几个端到端模型在 AMD Instinct MI250 和同级别产品【8】的性能表现。本文中所有 AMD Instinct MI250 的 AI 模型的性能数据都是用 AITemplate【9】 + CK【10】取得的。


实验


ResNet-50


下图显示了 AMD Instinct MI250 上的 AIT + CK 与 A100-PCIe-40GB 和 A100-DGX-80GB 上的 TensorRT v8.5.0.12 【11】(TRT)的性能比较。结果显示 AMD Instinct MI250 上的 AIT + CK 取得了相比于 A100-PCIe-40GB 上的 TRT 1.08 倍的加速。


BERT


一个基于 CK 实现的 Batched GEMM + Softmax + GEMM 融合算子模版,可以完全消除掉中间结果在 GPU 计算单元(Compute Unit)与 HBM 之间的搬运。通过使用这个融合算子模版,attention layer 许多原本是带宽瓶颈(bandwidth bound)的问题变成了计算瓶颈(compute bound)的问题,这样可以更好发挥 GPU 的计算能力。这个 CK 的实现深受 FlashAttention 【12】的启发,并比原始的 FlashAttention 的实现减少了更多的数据搬运。


下图显示了 AMD Instinct MI250 上的 AIT + CK 与 A100-PCIe-40GB 和 A100-DGX-80GB 上的 FasterTransformer v5.1.1 bug fix 【13】(FT)的 Bert Base 模型(uncased)的性能比较。当 Sequence 是 4096 时,FT 在 A100-PCIe-40GB 和 A100-DGX-80GB 上会在 Batch 32 时 GPU 内存溢出。因此,在 Sequence 是 4096 时,本文只显示 Batch 16 的结果。结果显示 AMD Instinct MI250 上的 AIT + CK 取得了相比于 A100-PCIe-40GB 上的 FT 3.28 倍,以及相比于 A100-DGX-80GB 上的 FT 2.91 倍的加速。


Vision Transformer (VIT)


下图显示了 AMD Instinct MI250 上的 AIT + CK 与 A100-PCIe-40GB 和 A100-DGX-80GB 上的 TensorRT v8.5.0.12(TRT)的 Vision Transformer Base (224x224 图片)的性能比较。结果显示 AMD Instinct MI250 上的 AIT + CK 取得了相比于 A100-PCIe-40GB 上的 TRT 1.8 倍,以及相比于 A100-DGX-80GB 上的 TRT 1.4 倍的加速。


Stable Diffusion


端到端的 Stable Diffusion


下表显示 AIT + CK 在 AMD Instinct MI250 上 Stable Diffusion 端到端(Batch 1,2,4, 6)的性能数据。当 Batch 是 1 时,在 MI250 上只有一个 GCD 被使用,而在 Batch 2,4,6 时,两个 GCD 都被使用了。


Stable Diffusion 中的 UNet


不过本文还没有关于使用 TensorRT 运行 Stable Diffusion 端到端模型的公开的信息。但这篇文章“Make stable diffusion 25% faster using TensorRT” 【14】说明了怎么使用 TensorRT 加速 Stable Diffusion 中的 UNet 模型。UNet 是 Stable Diffusion 中最重要最花时间的部分,因此 UNet 的性能大致反应了 Stable Diffusion 的性能。


下图显示了 AMD Instinct MI250 上的 AIT + CK 与 A100-PCIe-40GB 和 A100-DGX-80GB 上的 TensorRT v8.5.0.12(TRT)的 UNet 的性能比较。结果显示 AMD Instinct MI250 上的 AIT + CK 取得了相比于 A100-PCIe-40GB 上的 TRT 2.45 倍,以及相比于 A100-DGX-80GB 上的 TRT 2.03 倍的加速。


更多信息


ROCm webpage: AMD ROCm™ Open Software Platform | AMD

ROCm Information Portal: AMD Documentation - Portal

AMD Instinct Accelerators: AMD Instinct™ Accelerators | AMD

AMD Infinity Hub: AMD Infinity Hub | AMD


Endnotes:


1.Chao Liu is PMTS Software Development Engineer at AMD. Jing Zhang is SMTS Software Development Engineer at AMD. Their postings are their own opinions and may not represent AMD’s positions, strategies, or opinions. Links to third party sites are provided for convenience and unless explicitly stated, AMD is not responsible for the contents of such linked sites and no endorsement is implied. GD-5

2.CK for CPU is in early development phase.

3.C++ APIs for now, Python APIs are under planning.

4.Example of CK “Client API” for GEMM + Add + Add + FastGeLU fused operator. https://github.com/ROCmSoftwarePlatform/composable_kernel/blob/685860c2a9483c9e909d2f8bfb95056672491...

5.Example of CK “Templated Kernel and Invoker” of GEMM + Add + Add + FastGeLU fuse operator. https://github.com/ROCmSoftwarePlatform/composable_kernel/blob/685860c2a9483c9e909d2f8bfb95056672491...

6.Example of using CK “Templated Tile Operator” primitives to write a GEMM pipeline. https://github.com/ROCmSoftwarePlatform/composable_kernel/blob/685860c2a9483c9e909d2f8bfb95056672491...

7.Meta’s AITemplate GitHub repository. https://github.com/facebookincubator/AITemplate

8.MI200-71: Testing Conducted by AMD MLSE 10.23.22 using AITemplate https://github.com/ROCmSoftwarePlatform/AITemplate, commit f940d9b) + Composable Kernel  https://github.com/ROCmSoftwarePlatform/composable_kernel, commit 40942b9) with ROCm™5.3 running on 2x AMD EPYC 7713 64-Core Processor server with 4x AMD Instinct MI250 OAM (128 GB HBM2e) 560W GPU with AMD Infinity Fabric™ technology vs. TensorRT v8.5.0.12 and FasterTransformer (v5.1.1 bug fix) with CUDA® 11.8 running on 2x AMD EPYC 7742 64-Core Processor server with 4x Nvidia A100-PCIe-40GB (250W) GPU and TensorRT v8.5.0.12 and FasterTransformer (v5.1.1 bug fix) with CUDA® 11.8 running on 2xAMD EPYC 7742 64-Core Processor server with 8x NVIDIA A100 SXM 80GB (400W) GPU. Server manufacturers may vary configurations, yielding different results. Performance may vary based on factors including use of latest drivers and optimizations.

9.https://github.com/ROCmSoftwarePlatform/AITemplate/tree/f940d9b7ac8b976fba127e2c269dc5b368f30e4e

10.https://github.com/ROCmSoftwarePlatform/composable_kernel/tree/40942b909801dd721769834fc61ad201b5795...

11.TensorRT GitHub repository. https://github.com/NVIDIA/TensorRT

12.FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. https://arxiv.org/abs/2205.14135

13.FasterTransformer GitHub repository. https://github.com/NVIDIA/FasterTransformer

14.Making stable diffusion 25% faster using TensorRT. https://www.photoroom.com/tech/stable-diffusion-25-percent-faster-and-save-seconds/

15.During their time in AMD


原文链接:https://community.amd.com/t5/instinct-accelerators/amd-composable-kernel-library-efficient-fused-kernels-for-ai/ba-p/553224


相关文章
|
14天前
|
机器学习/深度学习 人工智能 搜索推荐
AI与未来医疗:革命性的技术融合
本文探讨了人工智能(AI)在未来医疗领域的应用及其潜在影响。通过分析当前的技术进步和具体案例,如AI辅助诊断、个性化治疗方案及医疗机器人等,展示了AI如何提高医疗服务的效率和准确性,降低医疗成本,并增强患者的治疗体验。同时,文章也讨论了AI在医疗中面临的伦理和隐私问题,以及解决这些问题的可能途径。最后,本文对AI在未来医疗中的前景进行了展望,指出其将继续深刻改变医疗保健行业,为患者和医疗专业人员带来更多福祉。
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
构建智能化编程环境:AI 与代码编辑器的融合
在人工智能的推动下,未来的代码编辑器将转变为智能化编程环境,具备智能代码补全、自动化错误检测与修复、个性化学习支持及自动化代码审查等功能。本文探讨了其核心功能、技术实现(包括机器学习、自然语言处理、深度学习及知识图谱)及应用场景,如辅助新手开发者、提升高级开发者效率和优化团队协作。随着AI技术进步,智能化编程环境将成为软件开发的重要趋势,变革开发者工作方式,提升效率,降低编程门槛,并推动行业创新。
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的未来:AI与机器学习的融合
【9月更文挑战第29天】在软件测试领域,自动化测试一直是提高测试效率和质量的关键。随着人工智能(AI)和机器学习(ML)技术的飞速发展,它们正逐步渗透到自动化测试中,预示着一场测试革命的来临。本文将探讨AI和ML如何重塑自动化测试的未来,通过具体案例展示这些技术如何优化测试流程,提高测试覆盖率和准确性,以及它们对测试工程师角色的影响。
36 7
|
11天前
|
机器学习/深度学习 人工智能 数据挖掘
探索自动化测试的未来:AI与机器学习的融合
【9月更文挑战第29天】在软件测试领域,自动化测试一直是提高效率和准确性的关键。但随着技术的发展,特别是人工智能(AI)和机器学习(ML)的兴起,我们见证了一个新时代的到来——自动化测试的未来正逐渐被重新定义。本文将探讨AI和ML如何改变自动化测试的面貌,从智能测试脚本的生成到测试结果的深度分析,我们将一探究竟这些前沿技术是如何使测试流程更加智能化、高效化,并预测它们将如何塑造软件测试的未来趋势。
|
25天前
|
机器学习/深度学习 人工智能 测试技术
自动化测试的未来:AI与机器学习的融合之路
【9月更文挑战第15天】在软件测试领域,自动化一直被视为提高效率和精确度的关键。随着人工智能(AI)和机器学习(ML)技术的不断进步,它们已经开始改变自动化测试的面貌。本文将探讨AI和ML如何赋能自动化测试,提升测试用例的智能生成、优化测试流程,并预测未来趋势。我们将通过实际代码示例来揭示这些技术如何被集成到现有的测试框架中,以及开发人员如何利用它们来提高软件质量。
55 15
|
15天前
|
人工智能 安全 测试技术
忘掉GPT-5!OpenAI推出全新AI模型系列o1,声称性能达到博士级
忘掉GPT-5!OpenAI推出全新AI模型系列o1,声称性能达到博士级
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的未来:深度学习与自然语言处理的融合
【9月更文挑战第22天】本文旨在探讨AI技术中深度学习与自然语言处理的结合,以及它们如何共同推动未来技术的发展。我们将通过实例和代码示例,深入理解这两种技术如何相互作用,以及它们如何影响我们的生活和工作。
39 4
|
21天前
|
人工智能 测试技术
语言图像模型大一统!Meta将Transformer和Diffusion融合,多模态AI王者登场
【9月更文挑战第20天】Meta研究人员提出了一种名为Transfusion的创新方法,通过融合Transformer和Diffusion模型,实现了能同时处理文本和图像数据的多模态模型。此模型结合了语言模型的预测能力和Diffusion模型的生成能力,能够在单一架构中处理混合模态数据,有效学习文本与图像间的复杂关系,提升跨模态理解和生成效果。经过大规模预训练,Transfusion模型在多种基准测试中表现出色,尤其在图像压缩和模态特定编码方面具有优势。然而,其训练所需的大量计算资源和数据、以及潜在的伦理和隐私问题仍需关注。
55 7
|
1月前
|
人工智能 开发框架 搜索推荐
移动应用开发的未来:跨平台框架与AI的融合
在移动互联网飞速发展的今天,移动应用开发已成为技术革新的前沿阵地。本文将探讨跨平台框架的兴起,以及人工智能技术如何与移动应用开发相结合,从而引领行业走向更加智能化、高效化的未来。文章通过分析当前流行的跨平台开发工具和AI技术的应用实例,为读者提供对未来移动应用开发的独到见解和预测。
53 3

热门文章

最新文章