系列文章目录
第一章 AI系统学习笔记:模型开发训练推理流程与技术概念组成
目录
[3. AI训练与推理框架](#3. AI训练与推理框架)
[4. AI编译与计算架构](#4. AI编译与计算架构)
[5. AI硬件与体系结构](#5. AI硬件与体系结构)
前言
算法 运行在 开发环境 中,调用 框架 的 API,框架生成的计算图交给 编译工具 优化并生成硬件代码,最后由 芯片 执行运算。
一、深度神经网络模型的开发与工作方式
-
确定模型输入输出
-
设计与开发模型
-
训练过程 : (1) 前向传播 (2) 反向传播 (3) 梯度更新
-
模型预测结果满意后进入模型部署,进行推理和使用模型
推理过程 :推理只需要执行训练过程中的前向传播过程即可。推理的原理是基于训练好的AI模型,通过输入待预测的数据,经过前向传播过程,经过AI模型定义的激活函数和非线性函数处理数据,得到最终的预测结果。
二、AI系统技术概念组成
1.AI算法应用
- 领域算法:CV、NLP、音频处理中的 CNN、RNN、LSTM、GAN、Transformer、Stable Diffusion、Reinforce Learning
2.开发体系
-
集成开发环境:VS Code、Jupyter Notebook、PyCharm
-
编程语言:与主流编程语言集成,如 PyTorch、TensorFlow 与 Python 集成
3. AI训练与推理框架
AI训练与推理框架这一层尽可能让用户表达目标任务与AI算法,经历少让用户关注底层实现。AI框架负责提供用户前端的编程语言、接口和工具链,负责静态程序分析与计算图构建、编译优化等工作。
前端API
→
基本数据结构:张量
→
词法、语法、语义分析(解析用户代码)
→
中间表示(生成 IR / 计算图)
→
计算图动静态统一(确定图模式)
→
计算图控制流(处理分支/循环)
→
基本计算单元:有向无环图(DAG)
→
编译优化(对图/算子进行通用优化,如常量折叠、冗余节点消除)
→
图优化与图执行调度(节点排序、设备分配)
→
自动微分(训练时需要,在反向传播前构建梯度图)
→
推理优化(推理阶段替换为量化、剪枝后的子图)
→
模型压缩(蒸馏、剪枝、量化)可以在训练前/中/后做,但通常放在优化之前或替换环节。
关键依赖说明:
-
必须先有 前端API 定义模型,才能解析。
-
解析后才有 中间表示(IR)。
-
有了 IR 才能做 动静态统一 和 控制流 分析。
-
图结构确定后(DAG)才能做 编译优化(如常量折叠)。
-
优化完的图才能做 图执行调度(分配设备)。
-
自动微分 依赖于已经构建好的前向计算图。
-
推理优化 与 模型压缩 通常在训练结束、部署前进行,但也有训练时做剪枝的。
4. AI编译与计算架构
AI编译器以神经网络模型作为输入,将AI计算任务通过一层或多层IR进行翻译和优化,最后转化为目标硬件上可执行的代码。
框架生成的中间表示(IR)
↓
编程编译(开始编译流程)
├── 前端优化(硬件无关)
│ ├── 数据格式布局转换
│ ├── 内存分配(规划)
│ └── 公共子表达式消除
└── 后端优化(硬件相关)
├── 算子循环优化(循环分块、向量化等)
├── 指令和内存优化
└── 代码优化、代码生成(生成汇编/机器码)
↓
编程模型(CUDA / Ascend C / LLVM等)------ 用于编写算子或作为编译目标
↓
底层通信(多卡训练时,在运行时调用)
├── HCCL/NCCL
├── 通信原语
└── 集合通信算法
↓
AI硬件(CPU/GPU/NPU)执行
关键依赖:
-
必须有框架的 IR,编译才能开始。
-
前端优化 (硬件无关)先于 后端优化(硬件相关)。
-
编程模型 是编译器的目标语言或算子编写接口,代码生成后调用它。
-
底层通信 只在分布式运行时介入,通常独立并行,但需要依赖硬件和通信库。
5. AI硬件与体系结构
底层硬件:AI芯片,包括 CPU、GPU、ASIC、FPGA、TPU、NPU
AI硬件与体系结构负责程序的真实执行、互联与加速。作业与作业间需要平台提供调度、运行期资源分配与环境隔离。
三、整体串联(从算法到硬件执行)
AI算法应用
→ 开发体系(IDE + Python)
→ 前端API(写模型)
→ 张量
→ 词法/语法/语义分析
→ IR(中间表示)
→ 计算图(DAG + 控制流)
→ 编译优化(常量折叠等)
→ 图执行调度
→ 自动微分(训练)
→ 推理优化(推理)
→ 模型压缩(部署前)
→ 编程编译(前端优化→后端优化)
→ 编程模型(CUDA/LLVM)
→ 底层通信(多卡时)
→ AI硬件运行
总结
AI框架一般会提供以下功能:
- 以python API供开发者编写网络模型计算图结构
- 提供调用基本算子实现,大幅降低开发代码量
- 自动化内存管理,不暴露指针和内存管理给用户
- 实现自动微分功能,自动构建反向传播计算图
- 调用或生成运行时优化代码,调度算子在指定NPU的执行
- 在运行期应用并行算子,提升NPU利用率等优化(动态优化)