新書推薦:

《
诡舍(夜来风雨声悬疑幻想震撼之作)
》
售價:HK$
54.8

《
讲给青少年的人工智能
》
售價:HK$
52.8

《
海外中国研究·宋代文人的精神生活(经典收藏版)--重构宋代文人的精神内核
》
售價:HK$
107.8

《
埃勒里·奎因悲剧四部曲
》
售價:HK$
307.6

《
今天我想要什么:海豹的女性漫画
》
售價:HK$
74.8

《
日常的金字塔:写诗入门十一阶
》
售價:HK$
74.8

《
税的荒唐与智慧:历史上的税收故事
》
售價:HK$
107.8

《
图式疗法的刻意练习
》
售價:HK$
87.9
|
編輯推薦: |
【简单学】8000 多行代码即可从零实现深度学习推理框架
【透彻学】透明解析推理框架内部机制,不再是黑盒工具
【轻松学】附赠 B 站免费配套视频,附赠本书配套源代码
【一起学】基于 GitHub 2.7k 星标开源项目 KuiperInfer
【多模型】支持 ResNet、YOLOv5,支持 Llama 等大模型推理
|
內容簡介: |
本书带领读者手把手实现深度学习推理框架,并支持大语言模型的推理。
全书共 9 章,以实现开源深度学习推理框架 KuiperInfer 为例,从基础的张量设计入手,逐步深入讲 解计算图、核心算子等关键模块的设计与实现。最后,书中还涵盖了如何支持深度学习模型如 ResNet、 YOLOv5,以及大语言模型 Llama 2 的推理。通过本书,读者不仅能够获得构建和优化深度学习推理框架 的实践经验,还能深入理解框架的内部机制。
本书面向深度学习初学者、希望进一步了解深度学习推理框架的开发者,以及其他对相关内容感兴趣 的 AI 从业者。
|
關於作者: |
傅莘莘 深度学习算法工程师,擅长软件系统设计、C 和人工智能混合项目的开发。 代表作:KuiperInfer,https://github.com/zjhellofss/KuiperInfer,也就是本书的蓝本项目,多次上榜Github中文项目趋势榜。本课程的配套视频在Bilibili平台已经累计斤10万次播放:https://space.bilibili.com/1822828582。
|
目錄:
|
第 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 单元测试库 Google Test 的安装与配置
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 Llama 2 的关键实现
9.3.1 均方根归一化
9.3.2 自注意力机制
9.3.3 前馈神经网络层
9.3.4 Transformer 层
9.3.5 完整的 Transformer 解码器
9.4 KuiperInfer 支持 Llama 2 推理
9.4.1 加载模型文件
9.4.2 模型的推理
9.4.3 结果解码
9.4.4 大模型推理基础算子的实现
9.4.5 推理演示
9.5 小结
|
|