-
内容大纲
本书“手把手”带领读者实现深度学习推理框架,并支持大语言模型的推理
全书共9章,以实现开源深度学习推理框架KuiperInfer为例,从基础的张量设计入手,逐步深入讲解计算图、核心算子等关键模块的设计与实现。此外,书中还介绍了如何支持基于CNN的模型,如ResNet.YOLOv5,以及大语言模型Llama 2的推理。书中代码基于C++,贴近业界实践
本书面向深度学习初学者、希望进一步了解深度学习推理框架的开发者,以及其他对相关内容感兴趣的AI从业者。跟着本书,你不仅能够掌握深度学习推理框架的核心知识,还能在本项目的基础上进行二次开发。 -
作者介绍
傅莘莘,AI系统工程师,专注于深度学习推理框架与AI编译器的研发。曾主导多款深度学习推理框架从0到1的设计与实现,在推理效率与精度优化方面取得了实际成果。 在B站开设了“自制推理框架”“自制大模型推理框架”等系列视频公开课(累计播放数超过10万),以通俗易懂的方式讲解技术,深受学生及其他技术爱好者的喜爱。 -
目录
第1章 深度学习推理框架基础
1.1 推理框架概览
1.1.1 什么是深度学习推理框架
1.1.2 代表性深度学习推理框架
1.2 KuiperferIn简介
1.2.1 KuiperInfer的组成部分
1.2.2 KuiperInfer的设计原则
1.3 环境配置与依赖安装
1.3.1 数学库的安装
13.2 对数学库的测试
1.3.3 单元测试库GoogleTest的安装与配置
1.3.4 日志库的安装
1.4 集成开发环境:CLion
1.4.1 在CLion中查看文件
1.4.2 使用CLion进行单元测试
1.5 集成开发环境:VSCode
1.6 小结
1.7 练习
第2章 张量的设计
2.1 张量是什么
2.1.1 张量的维度
2.1.2 张量中的基础数据结构
2.1.3 张量中的数据存储顺序
2.1.4 Cube中的数据排布
2.2 如何实现张量
2.2.1 实现张量的定义
2.2.2 创建新张量
2.2.3 张量的填充
2.2.4 改变张量的形状
2.2.5 张量的工具类方法
2.3 单元测试
2.3.1 创建数据容器
2.3.2 创建一维张量
2.3.3 创建三维张量
2.3.4 获取张量的形状
2.3.5 判断张量是否为空
2.3.6 获取张量中某个位置的元素
2.4 小结
2.5 练习
第3章 计算图的设计
3.1 计算图是什么
3.2 PNNX计算图的转换
3.2.1 将PyTorch模型转换为TorchScript模型
3.2.2 将TorchScript模型转换为PNNX格式的计算图
3.3 PNNX计算图结构
3.3.1 结构详解
3.3.2 加载模型结构定义文件
3.3.3 计算节点
3.3.4 操作数
3.3.5 参数和权重
3.4 KuiperInfer计算图结构
3.4.1 对操作数的封装
3.4.2 对权重类的封装
3.4.3 对计算节点的提取和封装
3.4.4 对参数的提取和封装
3.4.5 KuiperInfer计算图的整体结构
3.5 单元测试
3.5.1 测试模型的加载
3.5.2 测试PNNX中的计算节点
3.5.3 测试PNNX中的操作数
3.5.4 测试PNNX计算节点的权重
3.6 小结
3.7 练习
第4章 计算图的构建
4.1 计算节点的执行顺序
4.2 拓扑排序
4.2.1 基于深度优先的拓扑排序
4.2.2 拓扑排序的实现思路
4.2.3 构建之间的节点图关系
4.2.4 拓扑排序的编程实现
4.2.5 延伸:基于广度优先的拓扑排序
4.3 构建计算图的流程
4.3.1 状态检查
4.3.2 计算节点数据空间的初始化
4.3.3 整体构建流程
4.4 单元测试
4.4.1 拓扑排序测试
4.4.2 计算图状态变化测试
4.4.3 输出空间初始化测试
4.5 小结
4.6 练习
第5?e算子和算子注册器的设计与实现
5.1 什么是算子
5.2 算子类及其实现
5.2.1 算子类中的成员变量
5.2.2 算子类中的成员方法
5.2.3 算子类与计算节点
5.3 算子的全局注册器
5.3.1 全局注册器的设计方法与实现
5.3.2 向注册器中注册算子的实例化方法
5.3.3 从注册器中获取算子类的实例化方法
5.3.4 注册算子的工具类
5.4 算子的实例化方法
5.4.1 算子实例化的时机
5.4.2 编写第一个算子ReLU
5.4.3 注册ReLU算子
5.5 单元测试
5.5.1 验证全局注册器的唯一性
5.5.2 将实例化方法插入全局注册器
5.5.3 获取算子
5.5.4 验证ReLU算子的功能
5.6 小结
5.7 练习
第6章 池化算子和卷积算子的实现
6.1 池化算子
6.1.1 简介
6.1.2 池化操作中的边界填充
6.1.3 多通道输入特征图的池化
6.1.4 池化算子的实现
6.1.5 池化算子的注册
6.2 卷积算子
6.2.1 简介
6.2.2 卷积的直观解释
6.2.3 用Im2Col优化卷积计算
6.2.4 Im2Col方法的实现
6.2.5 卷积算子的计算过程
6.2.6 卷积算子中的GEMM实现
6.2.7 卷积算子的注册和实例化方法
6.3 单元测试
6.3.1 池化算子的相关测试
6.3.2 卷积算子的相关测试
6.4 小结
6.5 练习
第7章 表达式算子的实现
7.1 表达式和表达式算子的定义
7.2 词法分析
7.2.1 词法分析的定义
7.2.2 词法分析的过程
7.3 语法分析
7.3.1 语法二叉树结构
7.3.2 递归的条件
7.3.3 递归向下构建语法二叉树
7.3.4 对语法二叉树进行转换
7.3.5 逆波兰表达式
7.4 表达式算子的实现过程
7.4.1 实例化
7.4.2 类定义
7.4.3 注册
7.4.4 对Forward方法的重写
7.4.5 计算相关代码的实现
7.5 单元测试
7.5.1 词法分析测试
7.5.2 逆波兰表达式的生成测试
7.5.3 表达式计算过程测试
7.6 小结
7.7 练习
第8章 支持ResNet和YOLOv5推理
8.1 模型的执行方法
8.1.1 执行输入类计算节点
8.1.2 执行常规类计算节点
8.1.3 获取模型的输出
8.2 在KuiperInfer中支持ResNet
8.2.1 全连接算子的实例化
8.2.2 全连接算子的实现
8.2.3 ResNet推理流程概览
8.2.4 实现KuiperInfer对ResNet支持的
8.3 在KuiperInfer中支持YOLOv5
8.3.1 数据预处理
8.3.2 补充缺失的算子
8.3.3 YOLOv5模型的导出和运行
8.3.4 YOLOv5模型输出的后处理
8.4 小结
8.5 练习
第9章 支持大语言模型的推理
9.1 大模型简介
9.1.1 Transformer模型
9.1.2 GPT模型
9.2 大模型的架构
9.2.1 输入嵌入
9.2.2 位置编码
9.2.3 自注意力机制
9.2.4 前馈神经网络层
9.2.5 键-C值对缓存
9.2.6 残差连接与层归一化
9.2.7 解码
9.3 Llama2的关键实现
9.3.1 均方根归一化
9.3.2 自注意力机制
9.3.3 前馈神经网络层
9.3.4 Transformer层
9.3.5 完整的Transformer解码器
9.4 KuiperInfer支持Llama2推理
9.4.1 加载模型文件
9.4.2 模型的推理
9.4.3 结果解码
9.4.4 大模型推理基础算子的实现
9.4.5 推理演示
9.5 小结
同类热销排行榜
- C语言与程序设计教程(高等学校计算机类十二五规划教材)16
- 电机与拖动基础(教育部高等学校自动化专业教学指导分委员会规划工程应用型自动化专业系列教材)13.48
- 传感器与检测技术(第2版高职高专电子信息类系列教材)13.6
- ASP.NET项目开发实战(高职高专计算机项目任务驱动模式教材)15.2
- Access数据库实用教程(第2版十二五职业教育国家规划教材)14.72
- 信号与系统(第3版下普通高等教育九五国家级重点教材)15.08
- 电气控制与PLC(普通高等教育十二五电气信息类规划教材)17.2
- 数字电子技术基础(第2版)17.36
- VB程序设计及应用(第3版十二五职业教育国家规划教材)14.32
- Java Web从入门到精通(附光盘)/软件开发视频大讲堂27.92
推荐书目
-

孩子你慢慢来/人生三书 华人世界率性犀利的一枝笔,龙应台独家授权《孩子你慢慢来》20周年经典新版。她的《...
-

时间简史(插图版) 相对论、黑洞、弯曲空间……这些词给我们的感觉是艰深、晦涩、难以理解而且与我们的...
-

本质(精) 改革开放40年,恰如一部四部曲的年代大戏。技术突变、产品迭代、产业升级、资本对接...
[
