【AI系统】Kernel 层架构

简介: 推理引擎的Kernel层负责执行底层数学运算,如矩阵乘法、卷积等,直接影响推理速度与效率。它与Runtime层紧密配合,通过算法优化、内存布局调整、汇编优化及调度优化等手段,实现高性能计算。Kernel层针对不同硬件(如CPU、GPU)进行特定优化,支持NEON、AVX、CUDA等技术,确保在多种平台上高效运行。

推理引擎的 Kernel 层通常是推理引擎中用于执行底层数学运算的组件。在神经网络模型推理过程中,需要对大量数据进行高效的数学运算,如矩阵乘法、卷积、池化等。Kernel 层就是实现这些运算的核心部分,它直接影响着推理引擎的速度和效率,因此本文将会重点介绍 Kernel 层相关的内容。

Kernel 层介绍

在推理引擎架构中,Runtime 层和 Kernel 层是紧密相连的两个组件。

Runtime 提供了一个执行环境,它管理整个推理过程,包括模型的加载、预处理、执行和后处理。它还负责资源管理,如内存分配和线程管理。其通常具有平台无关性,可以在不同的操作系统和硬件上运行,为上层应用提供 API 接口,使得用户能够轻松地集成和使用神经网络模型。

Kernel 层包含了一系列的低级函数,它们直接在硬件上执行数学运算,如卷积、矩阵乘法和激活函数。其通常是硬件特定的,针对不同的 AI 加速芯片有不同的实现。Kernel 层实现时,会进行各种优化,包括算法优化、内存访问优化、向量化、并行化和硬件特定的汇编优化。如下图所示为在推理引擎中的 Kernel 层。

image

从层与层之间集成的角度来说,Runtime 层会根据模型的操作和目标硬件选择合适的 Kernel 层来执行计算。Runtime 的决策(如算子融合、内存管理等)会影响到 Kernel 层的性能表现。Kernel 层作为 Runtime 层的一部分,被集成到整个推理流程中。

而从交互和适配的角度来说,Runtime 层负责调用 Kernel 层提供的函数,传递必要的输入数据,并处理 Kernel 层的输出结果。它可能会提供一些适配层(adapter layer),以便在不同的硬件上运行相同的 Kernel 代码,或者将不同硬件的 Kernel 接口统一化。Runtime 层的优化和 Kernel 层的优化共同决定了整个推理引擎的性能。

总体而言,Runtime 提供了一个高层次的抽象,管理模型的执行和资源,而 Kernel 层则是底层的实现,直接在硬件上执行数学运算。Kernel 层的优化主要体现在各种高性能算子和算子库的设计上,这些算子和算子库通常针对不同的 AI 加速芯片进行了优化,以提高计算速度和效率。

推理架构

如图所示,下面分别从 CPU 和 GPU 的角度介绍一下几种人工实现的高性能算子和封装的高性能算子库:

image

CPU 优化:

  1. NEON:NEON 是 ARM 架构上的 SIMD(单指令多数据)扩展,用于提高多媒体处理和浮点运算的性能。推理引擎可以利用 NEON 指令集来优化 Kernel 层,特别是在移动设备和嵌入式设备上;

  2. AVX:AVX(Advanced Vector Extensions)是 Intel 处理器上的 SIMD 指令集,用于提高浮点运算和整数运算的性能。推理引擎可以利用 AVX 指令集来优化 Kernel 层,特别是在 Intel CPU 上;

  3. Metal:Metal 是苹果开发的低级图形和计算 API,用于优化在 Apple GPU 上的性能。推理引擎可以利用 Metal API 来优化 Kernel 层,特别是在 iOS 和 macOS 设备上;

  4. TVM:TVM(Tensor Virtual Machine)是一个开源的深度学习编译器框架,用于优化神经网络模型在各种硬件上的性能。它支持 CPU、GPU、TPU 和其他类型的硬件。

GPU 优化:

  1. CUDA:CUDA 是英伟达的并行计算平台和编程模型,用于在英伟达 GPU 上执行并行计算。推理引擎可以利用 CUDA 来优化 Kernel 层,特别是在大规模矩阵运算和卷积操作方面;

  2. OpenCL:OpenCL 是一个开放的标准,用于编写在异构系统上运行的程序。它允许开发者利用 CPU、GPU 和其他类型的处理器来加速计算密集型任务。推理引擎可以利用 OpenCL 来优化 Kernel 层,特别是在 GPU 上;

  3. Vulkan:Vulkan 是新一代的图形和计算 API,用于在各种 GPU 上执行并行计算。推理引擎可以利用 Vulkan API 来优化 Kernel 层,特别是在高性能计算和图形处理方面;

  4. Tensor Cores:Tensor Cores 是英伟达 GPU 上的一种特殊类型的核心,专门用于加速矩阵乘法和卷积操作。推理引擎可以利用 Tensor Cores 来优化 Kernel 层,特别是在执行大规模的矩阵运算时。

此外,封装的高性能算子库有:

  1. cuDNN(CUDA Deep Neural Network Library):由英伟达开发,为 GPU 优化的神经网络算子库,包括卷积、池化、归一化、激活函数等;

  2. MKL-DNN(Intel Math Kernel Library for Deep Neural Networks):由 Intel 开发,为 CPU 优化的神经网络算子库,现在发展成为 oneDNN,支持多种 Intel 处理器;

  3. MIOpen:由 AMD 开发,为 GPU 优化的深度学习算子库,特别针对 AMD 的 GPU 架构进行了优化;

  4. TensorRT:英伟达的深度学习推理优化器,它提供了 C++和 Python 接口,可以对模型进行优化并生成高性能的推理引擎;

  5. ONNX Runtime:支持 ONNX 模型的跨平台推理引擎,包括了对多种硬件平台的高性能算子实现;

  6. ACL(ARM Compute Library):由 ARM 开发,为 ARM 架构的 CPU 和 GPU 提供优化的算子库,包括卷积、池化、全连接层等。

这些算子方面的优化方法和技术可以根据具体的硬件平台和模型需求来选择和组合,以提高推理引擎在 Kernel 层的性能。在实际应用中,开发者需要根据目标设备和性能要求来选择最合适的优化策略。

推理流程

推理引擎的推理流程是指从加载模型到输出推理结果的一系列步骤。首先加载预先训练好的模型文件,这些文件可能是以特定格式(如 ONNX、TensorFlow SavedModel、PyTorch TorchScript 等)保存的。

此外,对模型结构,包括层的类型、参数和拓扑结构进行解析。之后将模型转换或编译为推理引擎能够执行的格式,这其中可能包括优化模型结构、融合某些层以减少计算和内存访问、选择合适的 Kernel 实现等操作。对于支持硬件加速的推理引擎,这一步可能还包括为特定 AI 加速芯片生成优化的执行代码。在上述离线模块生成的推理模型经过模型压缩(或者不压缩)后送入编译模块再次进行汇编层面的优化,完成优化后就可以真正在线执行推理。

image

在线执行阶段,将输入数据(如图像、文本等)转换为模型所需的格式,将预处理后的输入数据复制到设备内存中,为推理做准备。在推理引擎中执行模型,最后将处理后的推理结果返回给用户或下游应用程序。

整个推理流程的目标是高效、准确地执行模型推理,同时尽可能减少计算和延迟。

开发推理程序

Kernel 层所进行的优化一般蕴含在上图中的⑤进行执行,Runtime 会根据模型的操作和目标硬件选择合适的 Kernel 来执行计算。如图所示,Kernel 层作为 Runtime 的一部分,被集成到整个推理流程中。

image

其负责调用 Kernel 层提供的函数,传递必要的输入数据,并处理 Kernel 的输出结果。总的来说,Runtime 层的优化和 Kernel 层的优化共同决定了整个推理引擎的性能。Runtime 的决策(如算子融合、内存管理等)会影响到 Kernel 层的性能表现。

Kernel 层优化方法

算法优化

算法优化主要针对卷积算子的计算进行优化。卷积操作是神经网络模型中计算密集且耗时的部分,因此对其进行优化能够显著提升推理性能。其中,对于卷积 Kernel 算子的优化主要关注 Im2Col、Winograd 等算法的应用。这些算法通过特定的数学变换和近似,减少了卷积操作的计算复杂度,从而提升了推理速度。其主要方法有:

  1. 空间组合优化算法:将大卷积分解为小卷积,减少内存访问次数,提高缓存利用率。

  2. Im2Col/Col2Im:将输入图像和卷积核转换为列向量形式,使用矩阵乘法来实现卷积,可以利用高效矩阵乘法库。

  3. Winograd 算法:通过预计算和转换,减少卷积中的乘法次数,特别适用于小尺寸的卷积核。

  4. 快速傅里叶变换(FFT):对于大尺寸的卷积核,使用 FFT 将空间域的卷积转换为频域的点乘,提高计算效率。

内存布局

在内存布局方面,主要的方法有:

  1. 权重和输入数据的重排:重新组织权重和输入数据的内存布局,使得数据访问更加连续,减少缓存缺失。

  2. 通道优先(Channel First/Last):根据硬件特性选择通道数据的存储顺序,例如 NCHW 或 NHWC。

  3. NC1HWC0 与 NCHW4:NC1HWC0 布局通常用于支持 Winograd 算法或其他需要特定通道分组操作的卷积算法。这种布局是针对特定硬件(如某些 AI 加速器)优化的,其中 C 被分割为 C1 和 C0,C1 代表通道的分组数,C0 代表每个分组中的通道数。这种布局可以减少内存访问次数,提高缓存利用率,并可能减少所需的内存带宽。NCHW4 是一种特殊的内存布局,其中 C 被分割为 4 个通道,这种布局通常用于支持 4 通道的 SIMD 操作。NCHW4 布局可以在支持 4 通道向量化指令的硬件上提供更好的性能,例如某些 ARM 处理器。这种布局可以减少数据填充(padding)的需要,并提高数据处理的并行度。

汇编优化

从汇编优化的方面,主要的方法有:

  1. 指令优化:针对特定 CPU 指令集(如 AVX、AVX2、SSE 等)进行优化,使用向量化指令来提高计算效率。

  2. 循环优化:减少循环的开销,增加指令级的并行性。

  3. 存储优化:优化内存访问模式,使得数据访问更加连续,以提高缓存命中率和内存带宽利用率。

调度优化

从调度优化的方面,则主要有并行计算和自动调优等方法。根据操作间的依赖关系和执行时间,合理调度任务,减少等待时间和提高资源利用率。

推理引擎的 Kernel 层是整个推理系统的基础,对于实现高性能的深度学习推理至关重要。随着深度学习应用的普及和硬件技术的进步,推理引擎的 Kernel 层也在不断地发展和优化,以适应更加多样化的应用场景和性能要求。

如果您想了解更多AI知识,与AI专业人士交流,请立即访问昇腾社区官方网站https://www.hiascend.com/或者深入研读《AI系统:原理与架构》一书,这里汇聚了海量的AI学习资源和实践课程,为您的AI技术成长提供强劲动力。不仅如此,您还有机会投身于全国昇腾AI创新大赛和昇腾AI开发者创享日等盛事,发现AI世界的无限奥秘~

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
3天前
|
存储 机器学习/深度学习 人工智能
【AI系统】计算图优化架构
本文介绍了推理引擎转换中的图优化模块,涵盖算子融合、布局转换、算子替换及内存优化等技术,旨在提升模型推理效率。计算图优化技术通过减少计算冗余、提高计算效率和减少内存占用,显著改善模型在资源受限设备上的运行表现。文中详细探讨了离线优化模块面临的挑战及解决方案,包括结构冗余、精度冗余、算法冗余和读写冗余的处理方法。此外,文章还介绍了ONNX Runtime的图优化机制及其在实际应用中的实现,展示了如何通过图优化提高模型推理性能的具体示例。
24 4
【AI系统】计算图优化架构
|
9天前
|
人工智能 并行计算 编译器
【AI系统】SIMD & SIMT 与 CUDA 关系
本文深入解析了AI芯片中SIMD和SIMT的计算本质,基于NVIDIA CUDA实现的对比,探讨了不同并行编程模型,包括串行(SISD)、数据并行(SIMD)和多线程(MIMD/SPMD)。文章详细介绍了各模型的特点及应用场景,特别强调了英伟达GPU中的SIMT机制如何通过SPMD编程模型实现高效并行计算,以及SIMD、SIMT、SPMD之间的关系和区别。
46 13
|
9天前
|
人工智能 自然语言处理 前端开发
【AI系统】LLVM 前端和优化层
本文介绍了 LLVM 编译器的核心概念——LLVM IR,并详细讲解了 LLVM 的前端 Clang 如何将 C、C++ 等高级语言代码转换为 LLVM IR。文章还探讨了编译过程中的词法分析、语法分析和语义分析三个关键步骤,以及 LLVM 优化层的 Pass 机制,包括分析 Pass 和转换 Pass 的作用及依赖关系。
16 3
|
13天前
|
机器学习/深度学习 存储 人工智能
【AI系统】Tensor Core 架构演进
自2017年Volta架构推出以来,英伟达的GPU架构不断进化,从Volta的张量核心(Tensor Core)革新,到Turing的整数格式支持,再到Ampere的稀疏矩阵计算优化,以及Hopper的FP8张量核心和Transformer引擎,直至2024年的Blackwell架构,实现了30倍的LLM推理性能提升。每一代架构都标志着深度学习计算的重大突破,为AI技术的发展提供了强大的硬件支持。
29 1
|
13天前
|
人工智能 并行计算 流计算
【AI系统】GPU 架构与 CUDA 关系
本文介绍了英伟达GPU硬件基础概念,重点解析了A100 GPU架构中的GPC、TPC、SM等组件及其功能。接着深入讲解了CUDA并行计算平台和编程模型,特别是CUDA线程层次结构。最后,文章探讨了如何根据CUDA核心数量、核心频率等因素计算GPU的算力峰值,这对于评估大模型训练的算力需求至关重要。
39 2
|
14天前
|
存储 缓存 人工智能
【AI系统】GPU 工作原理
本文详细解析了AI计算体系中的GPU工作原理,重点介绍了GPU与CPU在架构上的差异,强调了GPU在并行计算方面的优势。文章通过$AX+Y$的例子,展示了GPU如何通过并行和并发提高计算效率,并深入探讨了GPU的缓存机制及线程原理,解释了GPU如何通过大量线程和Warp来掩盖延迟问题,实现高效计算。
52 0
|
13天前
|
机器学习/深度学习 人工智能 并行计算
【AI系统】Tensor Core 基本原理
本文深入介绍了英伟达GPU中的Tensor Core,一种专为加速深度学习设计的硬件单元。文章从发展历程、卷积计算、混合精度训练及基本原理等方面,详细解析了Tensor Core的工作机制及其在深度学习中的应用,旨在帮助读者全面理解Tensor Core技术。通过具体代码示例,展示了如何在CUDA编程中利用Tensor Core实现高效的矩阵运算,从而加速模型训练和推理过程。
42 0
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
构建未来:AI驱动的自适应学习系统
【5月更文挑战第22天】 随着人工智能技术的迅猛发展,教育领域正在经历一场由数据驱动的革新。本文将探讨AI技术在构建自适应学习系统中的关键作用,分析其如何通过个性化教学方案提高学习效率,并预测未来发展趋势。我们将深入研究机器学习算法如何识别学习者的需求,实时调整教学内容和难度,以及AI如何帮助教师和学生在教育过程中实现更好的互动和反馈。
211 0
|
7月前
|
机器学习/深度学习 存储 编解码
最新轻量化Backbone | FalconNet汇聚所有轻量化模块的优点,成就最强最轻Backbone
最新轻量化Backbone | FalconNet汇聚所有轻量化模块的优点,成就最强最轻Backbone
214 1
|
7月前
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv5改进 | Conv篇 | 利用DualConv二次创新C3提出一种轻量化结构(降低参数30W)
YOLOv5改进 | Conv篇 | 利用DualConv二次创新C3提出一种轻量化结构(降低参数30W)
386 1