- 博客(82)
- 收藏
- 关注
转载 转载:【AI系统】推理引擎示例:AscendCL
AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发神经网络应用的 C 语言 API 库,提供运行资源管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等 API,能够实现利用昇腾硬件计算资源、在昇腾 CANN 平台上进行深度学习推理计算、图形图像预处理、单算子加速计算等能力。简单来说,就是统一的 API 框架,实现对所有资源的调用。
2024-12-17 13:30:05
99
转载 转载:【AI系统】昇腾推理引擎 MindIE
MindIE(Mind Inference Engine,昇腾推理引擎)是华为昇腾针对 AI 全场景业务的推理加速套件。通过分层开放 AI 能力,支撑用户多样化的 AI 业务需求,使能百模千态,释放昇腾硬件设备算力。支持多种主流 AI 框架,提供多层次编程接口,帮助用户快速构建基于昇腾平台的推理业务。业界标准 RPC 接口高效对接业务层,支持 Triton 和 TGI 等主流推理服务框架,实现小时级应用部署。
2024-12-17 13:29:31
456
转载 转载:【AI系统】推理引擎架构
在深入探讨推理引擎的架构之前,让我们先来概述一下推理引擎的基本概念。推理引擎作为 AI 系统中的关键组件,负责将训练好的模型部署到实际应用中,执行推理任务,从而实现智能决策和自动化处理。随着 AI 技术的快速发展,推理引擎的设计和实现面临着诸多挑战,同时也展现出独特的优势。本文将详细阐述推理引擎的特点、技术挑战以及如何应对这些挑战,为读者提供一个较为全面的视角。
2024-12-17 13:28:53
278
转载 转载:【AI系统】推理系统架构
推理系统架构是 AI 领域中的一个关键组成部分,它负责将训练好的模型应用于实际问题,从而实现智能决策和自动化。在构建一个高效的推理系统时,我们不仅需要考虑其性能和准确性,还需要确保系统的可扩展性、灵活性以及对不同业务需求的适应性。在本文中,我们将主要以 NVIDIA Triton Inference Server 为基础深入探讨推理系统架构的各个方面。
2024-12-17 13:28:17
203
转载 转载:【AI系统】推理流程全景
本文介绍神经网络模型在部署态中的两种方式:云侧部署和边缘侧部署。其中,云侧部署适用于云服务器等具备强大计算能力和存储空间的环境,可以实现高吞吐量和集中的数据管理,但可能面临高成本、网络延迟和数据隐私等挑战。边缘侧部署适用于边缘设备和移动设备等资源受限的环境,可以通过模型优化、硬件加速和分布式计算等方式降低延迟和能耗,但也面临有限算力、数据分散和安全性风险等挑战。两种部署方式都有自己的优势和局限性,需要根据具体应用场景来选择合适的部署方式。
2024-12-17 13:27:42
141
转载 转载:【AI系统】推理系统介绍
推理系统是一个专门用于部署神经网络模型,执行推理预测任务的 AI 系统。它类似于传统的 Web 服务或移动端应用系统,但专注于 AI 模型的部署与运行。通过推理系统,可以将神经网络模型部署到云端或者边缘端,并服务和处理用户的请求。因此,推理系统也需要应对模型部署和服务生命周期中遇到的挑战和问题。在本文中,将首先概述训练和推理的基本流程,随后深入分析训练阶段与推理阶段之间的差异。接着,将深入探讨推理系统的优化目标以及面临的挑战。
2024-12-17 13:27:11
99
转载 转载:【AI系统】推理系统引言
在深入探讨推理系统与推理引擎之前,首先需要明确“推理”这一概念。推理,简单来说,就是在利用大量数据训练好模型的结构和参数后,使用小批量数据进行一次前向传播,从而得到模型输出的过程。在此过程中,并不涉及模型梯度和损失的优化。推理的最终目标,便是将训练好的模型部署到实际的生产环境中,使 AI 真正运行起来,服务于日常生活。推理系统,是一个专门用于部署神经网络模型,执行推理预测任务的 AI 系统。它类似于传统的 Web 服务或移动端应用系统,但专注于 AI 模型的部署与运行。
2024-12-17 13:26:34
71
转载 转载:【AI系统】Ascend C 编程范式
在完成算子分析后,可以正式开始开发算子代码,其第一步应该完成对于核函数的定义和封装。在本文将介绍如何对函数原型进行定义,并介绍核函数定义中应该遵循的规则;随后将介绍函数原型中所需实现的内容;最后本文将完成核函数的封装,便于后续对于核函数的调用。函数原型定义本样例中,函数原型名为add_custom,根据算子分析中对算子输入输出的分析,确定有 3 个参数 x,y,z,其中 x,y 为输入内存,z 为输出内存。根据核函数定义的规则,使用__global__函数类型限定符来标识它是一个核函数,可以被。
2024-12-17 13:24:44
119
转载 转载:【AI系统】Ascend C 语法扩展
Ascend C 采用华为自研的毕昇编译器,设备侧编程采用 C/C++语法扩展允许函数执行空间和地址空间作为合法的类型限定符,提供在主机(Host)侧和设备(Device)侧独立执行的能力,同时提供针对不同地址空间的访问能力。Ascend C 算子采用标准 C++ 语法和一组编程类库 API 进行编程,可以根据自己的需求选择合适的 API。(外部数据存储空间)和(核上内存空间);类库 API 分为高阶 API 和基础 API。
2024-12-17 13:24:13
114
转载 转载:【AI系统】算子开发编程语言 Ascend C
本文将深入探讨昇腾算子开发编程语言 Ascend C,这是一种专为昇腾 AI 处理器算子开发设计的编程语言,它原生支持 C 和 C++标准规范,最大化匹配用户的开发习惯。Ascend C 通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力 AI 开发者低成本完成算子开发和模型调优部署。通过本文内容的学习,读者将能够理解 Ascend C 编程语言的核心概念、编程模型和优势,以及如何利用这些工具提高 AI 算子的开发效率和性能。
2024-12-17 13:23:38
172
转载 转载:【AI系统】CANN 算子类型
一元算子通过对单个操作数进行操作,如取反或递增,而二元算子对两个操作数执行操作,例如加法或赋值。关系算子用于比较值之间的关系,逻辑算子用于在逻辑表达式中组合条件。位运算符操作二进制位,而赋值算子将值分配给变量。算子在编程语言中定义了基本操作,而在数学中,它们描述了对数学对象的操作,如微积分中的导数和积分算子。算子的理解对于正确理解和编写代码以及解决数学问题至关重要。
2024-12-17 13:23:07
108
转载 转载:【AI系统】昇腾异构计算架构 CANN
本文将介绍昇腾 AI 异构计算架构 CANN(Compute Architecture for Neural Networks),这是一套为高性能神经网络计算需求专门设计和优化的架构。CANN 包括硬件层面的达·芬奇架构和软件层面的全栈支持,旨在提供强大的硬件基础和管理网络模型、计算流及数据流的软件栈,以支撑神经网络在异构处理器上的执行。通过本文内容的学习,读者将能够理解 CANN 如何为深度学习提供全面的硬件和软件支持,以及如何通过其多层级架构实现高效的 AI 应用开发和性能优化。
2024-12-17 13:22:35
210
转载 转载:【AI系统】TVM 实践案例
某些加速器有专用格式来表示神经网络,如 ARM Ethos-N 和 Xilinx Vitis AI,为了满足这种需求,该框架提供了一组统一的 API 来定制序列化的代码格式:1)将生成的代码编译和序列化为一个 bit 流,以便其可以与其他子模块一起实例化;2)在运行时反序列化来自子模块的 bit 流至此,针对 DNN 模型的编译和打包模块已经完成,之后进入运行时系统加载模块并执行推理。
2024-12-17 13:22:03
178
转载 转载:【AI系统】Auto-Tuning 原理
AutoTVM 是 TVM 的第一代自动调优系统,其是基于模板的。AutoTVM 需要事先编写模板来组成调度的搜索空间,最佳性能的上限取决于模板的设计,这对模板的编写带来了很高的要求。作为第二代调优系统,Ansor(Auto Scheduler)取消了模板机制,优化过程可以自动、无干预的进行:无需手动指定优化方式,编译器自动应用调度原语。Ansor 自动生成一个覆盖全面的优化的大搜索空间,并为空间中的每个张量程序提供被选择的机会。首先,它自动构建一个大的搜索空间,以覆盖给定计算定义的尽可能多的张量程序。
2024-12-17 13:21:26
164
转载 转载:【AI系统】算子循环优化
在具体硬件执行计算的时候,实际会大量地使用 for 等循环指令不断地去读取不同的数据执行重复的指令(SIMT/SIMD),因此循环优化主要是为了提升数据的局部性或者计算的并行性,从而提升整体算子性能,当然这二者都需要 AI 芯片硬件的支持。
2024-12-16 15:35:38
157
转载 转载:【AI系统】算子手工优化
在上一篇中,探讨了算子计算和调度的概念,并强调了高效调度策略在释放硬件性能和降低延迟方面的重要性。本文,我们将深入讨论手写算子调度时需要考虑的关键因素,并介绍一些著名的高性能算子库。
2024-12-16 15:34:30
141
转载 转载:【AI系统】计算与调度
上一篇我们了解了什么是算子,神经网络模型中由大量的算子来组成,但是算子之间是如何执行的?组成算子的算法逻辑跟具体的硬件指令代码之间的调度是如何配合?
2024-12-16 15:33:53
132
转载 转载:【AI系统】AI 编译器后端优化
AI 编译器分为多层架构,最顶层由各种 AI 训练框架编写的神经网络模型架构,一般由 Python 编写,常见的 AI 训练框架有 PyTorch、MindSpore、PaddlePaddle 等。在导入 AI 编译器时需要用对应框架的converter功能转换为 AI 编译器统一的 Graph IR,并在计算图级别由进行计算图级优化,也叫前端优化。前端优化主要的计算图优化包括图算融合、数据排布转换、内存优化、死代码消除,这些优化是硬件无关的通用优化。在得到优化后的计算图后,将其转换为TensorIR。
2024-12-16 15:33:17
77
转载 转载:【AI系统】代数简化
代数简化(Algebraic Reduced)是一种从数学上来指导我们优化计算图的方法。其目的是利用交换率、结合律等规律调整图中算子的,或者删除不必要的算子,以提高图整体的计算效率。代数化简可以通过子图替换的方式完成,具体实现:1)可以先抽象出一套通用的子图替换框架,再对各规则实例化。2)可以针对每一个具体的规则实现专门的优化逻辑。下面我们将介绍三种不同的代数简化方案。
2024-12-16 15:32:39
78
转载 转载:【AI系统】死代码消除
死代码消除(Dead Code Elimination)是一种编译器优化技术,旨在删除程序中不会被执行的代码,从而提高程序的执行效率和资源利用率。死代码是指在程序的当前执行路径下不会被访问或执行的代码片段。
2024-12-16 15:32:04
94
转载 转载:【AI系统】公共表达式消除原理
在程序中,有时会出现多个地方使用相同的表达式进行计算,并且这些表达式的计算结果相同。重复计算这些表达式,会增加不必要的计算开销。公共表达式消除的目标就是识别出这些重复的计算,并将其提取出来,只计算一次,然后将结果保存起来供后续使用。对于 b * c,程序只需要计算一次,并将结果保存在 temp 中,当计算 a 和 d 使用到时直接载入 temp 中保存的值即可,避免了 b * c 的重复计算,提高程序的执行效率。编译器开发者将公共子表达式消除分成两类。
2024-12-16 15:31:28
78
转载 转载:【AI系统】常量折叠原理
常量折叠(Constant Folding)是编译器的一种优化技术,它通过在编译期间对常量表达式进行计算,将其结果替换为常量值,从而减少程序运行时的计算和开销。
2024-12-16 15:30:58
118
转载 转载:【AI系统】内存分配算法
本文将介绍 AI 编译器前端优化部分的内存分配相关内容。在 AI 编译器的前端优化中,内存分配是指基于计算图进行分析和内存的管理,而实际上内存分配的实际执行是在 AI 编译器的后端部分完成的。本文将包括三部分内容,分别介绍模型和硬件的内存演进,内存的划分与复用好处,节省内存的算法。在下图所示的 AI 编译器技术栈示意图中,内存分配位于计算图优化部分。
2024-12-16 15:30:26
120
转载 转载:【AI系统】布局转换原理与算法
数据布局转换目前已经越来越多地用于编译器的前端优化,将内部数据布局转换为后端设备友好的形式。数据布局转换主要影响程序的空间局部性,所谓空间局部性指的是如果一个内存位置被引用了一次,那么程序很可能在不远的将来引用其附近的一个内存位置,它会影响到程序执行中的缓存及其他性能。目前已经有许多数据布局转换技术:数组维度的排列,数据分块等等。接下来,我们将简单介绍数据布局转换,包括数据在内存如何排布,张量数据在内存中如何排布,以及数组维度排列的具体应用如 NCHW 与 NHWC 这两种数据排布方式。
2024-12-16 15:29:55
72
转载 转载:【AI系统】算子融合
近年来,人们对优化神经网络模型的执行一直非常重视。算子融合是一种常见的提高神经网络模型执行效率的方法。这种融合的基本思想与优化编译器所做的传统循环融合相同,它们会带来:1)消除不必要的中间结果实例化,2)减少不必要的输入扫描;3)实现其他优化机会。下面让我们正式走进算子融合。
2024-12-16 15:29:21
251
转载 转载:【AI系统】图算 IR
本文将围绕计算图介绍相关内容。首先介绍计算图的基本构成,包括计算图的整体介绍、与自动微分的关系、控制流的表示方法等;接着将介绍 AI 框架产生计算图的方式,包括产生静态图和产生动态图的方式;之后将介绍静态和动态计算图的内容,包括 AI 框架关于计算图的不同方案,例如现在大部分的 AI 框架都是从动态的计算图转到静态的计算图,而 MindSpore 是一开始支持静态的计算图,最后支持动静统一的动静态计算图;最后介绍计算图对 AI 编译器有何作用。
2024-12-16 15:28:47
94
转载 转载:【AI系统】AI编译器前瞻
本文首先会基于 The Deep Learning Compiler: A Comprehensive Survey 中的调研做一个热门 AI 编译器的横向对比,并简要介绍几个当前常用的 AI 编译器。随后会分析当前 AI 编译器面临的诸多挑战,并展望 AI 编译器的未来。
2024-12-16 15:27:59
268
转载 转载:【AI系统】AI 编译器基本架构
在上篇文章中将 AI 编译器的发展大致分为了 3 个阶段,分别为 1)朴素编译器、2)专用编译器以及 3)通用编译器。本文作为上一节 AI 编译器架构的一个延续,着重讨论 AI 编译器的通用架构。首先将回顾现有 AI 编译器架构(以 PyTorch 作为标杆),随后引出通用 AI 编译器的架构模型,并进一步介绍其 IR 中间表达层、前端优化以及后端优化的细节,最后以图的形式展示现有 AI 编译器全栈产品。
2024-12-16 15:27:14
216
转载 转载:【AI系统】AI 编译器历史阶段
AI 编译器是一种针对 AI 和机器学习应用特别优化的编译器,它能够满足推理场景和训练场景不同需求,将高级语言编写的程序或者训练好的模型文件转换成可以在特定硬件上高效执行的程序。以 Python 语言为前端AI 编译器拥有以 Python 为主的动态解释器语言前端,Python 是一种广泛用于 AI 领域的高级编程语言,因其简洁的语法和强大的库支持而受到欢迎。动态解释器语言前端指的是编译器在处理 Python 代码时,会进行动态类型检查和解释执行,这有助于在运行时捕获和处理类型错误。拥有多层 IR 设计。
2024-12-16 15:26:37
140
转载 转载:【AI系统】LLVM 前端和优化层
在上一篇文章讲到了 LLVM 的 IR 贯穿了 LLVM 编译器的全生命周期,里面的每一个箭头都是一个 IR 的过程,这个就是整体 LLVM 最重要的核心概念。有了 LVM IR 之后这并不意味着 LLVM 或者编译器的整个 Pipeline 都是使用一个单一的 IR,而是在编译的不同阶段会采用不同的数据结构,但总体来说还是会维护一个比较标准的 IR。接下来本文就具体的介绍一下 LLVM 的前端和优化层。
2024-12-14 14:27:40
139
转载 转载:【AI系统】LLVM IR 详解
在上一篇文章中,我们已经简要介绍了 LLVM 的基本概念和架构,我们现在将更深入地研究 LLVM 的 IR(中间表示)的概念。了解 LLVM IR 的重要性是为了能够更好地理解编译器的运作原理,以及在编译过程中 IR 是如何被使用的。LLVM IR 提供了一种抽象程度适中的表示形式,同时能够涵盖绝大多数源代码所包含的信息,这使得编译器能够更为灵活地操作和优化代码。本文将进一步探究 LLVM IR 的不同表示形式,将有助于我们更好地理解代码在编译器中是如何被处理和转换的。
2024-12-14 14:26:48
261
转载 转载:【AI系统】LLVM IR 基本概念
编译器常见的作用是将源高级语言的代码编译到某种中间表示(Intermediate Representation,一般称为 IR),然后再将 IR 翻译为目标体系结构(具体硬件比如 MIPS 或 X86)的汇编语言或者硬件指令。LLVM IR 提供了一种抽象层,使程序员可以更灵活地控制程序的编译和优化过程,同时保留了与硬件无关的特性。通过使用 LLVM IR,开发人员可以更好地理解程序的行为,提高代码的可移植性和性能优化的可能性。
2024-12-14 14:25:34
116
转载 转载:【AI系统】LLVM 架构设计和原理
在上一篇文章中,我们详细探讨了 GCC 的编译过程和原理。然而,由于 GCC 存在代码耦合度高、难以进行独立操作以及庞大的代码量等缺点。正是由于对这些问题的意识,人们开始期待新一代编译器的出现。在本文,我们将深入研究 LLVM 的架构设计和原理,以探索其与 GCC 不同之处。
2024-12-14 14:24:33
137
转载 转载:【AI系统】GCC 主要特征
GCC(GNU Compiler Collection,GNU 编译器集合)最初是作为 GNU 操作系统的编译器编写的,旨在为 GNU/Linux 系统开发一个高效的 C 编译器。其历史可以追溯到 1987 年,当时由理查德·斯托曼(Richard Stallman)创建,作为 GNU 课程的一部分。最初,GCC 仅是一个用于编译 C 语言的编译器,但很快扩展以支持其他编程语言,其设计强调可移植性和模块化,使其能够适应多种硬件和操作系统环境。
2024-12-14 14:23:35
67
转载 转载:【AI系统】传统编译器发展
我们平时所说的程序,是指双击后或者执行命令行后,就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有.exe和.com;在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。
2024-12-14 14:22:16
112
转载 转载:【AI系统】编译器基础介绍
Pass 主要是对源程序语言的一次完整扫描或处理。在编译器中,Pass 指所采用的一种结构化技术,用于完成编译对象(IR)的分析、优化或转换等功能。Pass 的执行就是编译器对编译单元进行分析和优化的过程,Pass 构建了这些过程所需要的分析结果。一个 Pass 通常会完成一项较为独立的功能,例如 LoopUnroll Pass 会进行循环展开的操作。但 Pass 与 Pass 之间可能会存在一些依赖,部分 Pass 的执行会依赖于其它一些 Pass 的分析或者转换结果。
2024-12-14 14:21:26
155
转载 转载:【AI系统】AI 芯片的思考
为了满足数据中心算力需求,谷歌在 2014 年开始研发基于特定领域架构(Domain-specific Architecture,DSA)的 TPU(Tensor Processing Unit),专门为深度学习任务设计的定制硬件加速器,加速谷歌的机器学习工作负载,特别是训练和推理大模型。
2024-12-14 14:19:48
92
转载 转载:【AI系统】从 CUDA 对 AI 芯片思考
从技术的角度重新看英伟达生态,有很多值得借鉴的方面。本文将主要从流水编排、SIMT 前端、分支预测和交互方式等方面进行分析,同时对比 DSA 架构,思考可以从英伟达 CUDA 中借鉴的要点。
2024-12-14 14:19:02
171
转载 转载:【AI系统】CUDA 编程模式
前面的文章对 AI 芯片 SIMD 和 SIMT 计算本质进行了分析,结合英伟达 CUDA 实现对 SIMD 和 SIMT 进行了对比,本文将以英伟达 GPU 为例,讲解 GPU 的编程模型。
2024-12-14 14:18:09
117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅