内容简介
ONNX(Open Neural Network Exchange,开放神经网络交换)是一种开放格式,用于存储深度神经网络模型。ONNX 由微软和Facebook 于2017 年共同推出,旨在促进不同深度学习框架之间的模型交换和互操作性。ONNX 定义了一组与环境和平台无关的标准格式,使得AI 模型可以在不同的框架和环境下交互使用。经过短短几年的发展,ONNX 已经成为表示深度学习模型的实际标准。它还支持传统非神经网络机器学习模型。ONNX 有望成为整个AI 模型交换的标准。
全书包括6 章,分别为ONNX 安装与使用、ONNX 运行时与应用开发技术、ONNX 各种功能与性能分析、ONNX 数据与操作数优化、ONNX 模型性能与应用、ONNX 创新开发案例分析。
本书适合从事AI 算法、软件、硬件开发的工程师阅读,也可供科研人员、高校师生、技术管理人员参考使用。
目录
第1章 ONNX 安装与使用
1.1 安装ONNX 运行时(ORT) 001
1.1.1 环境要求 001
1.1.2 使用Python 安装ONNX 001
1.1.3 使用C# /C/C++/WinML 安装ONNX 002
1.2 使用ONNX 运行时 006
1.2.1 在Python 中使用ONNX 运行时 006
1.2.2 在C++中使用ONNX 运行时 010
1.3 构建ONNX 运行时 010
1.3.1 构建ONNX 运行时的方式 010
1.3.2 ONNX 运行时API 概述 017
1.3.3 API 详细信息 021
1.4 支持程序相关API 028
第2章 ONNX 运行时与应用开发技术
2.1 ONNX 运行时支持程序 035
2.1.1 ONNX 运行时支持程序简介 035
2.1.2 支持程序摘要 036
2.1.3 添加支持程序 036
2.2 ONNX 原理介绍 037
2.2.1 ONNX 基本概念 037
2.2.2 ONNX 的输入、输出、节点、初始化器、属性 038
2.2.3 元素类型 039
2.2.4 什么是opset 版本? 040
2.2.5 子图、测试和循环 040
2.2.6 算子扫描 040
2.2.7 工具 041
2.3 ONNX 与Python 042
2.3.1 线性回归示例042
2.3.2 初始化器,改进的线性规划 046
2.3.3 遍历ONNX 结构并检查初始化器 048
2.4 运算符属性 049
2.5 根据符号计算矩阵中所有浮点数的总和 052
2.6 树集合回归器 058
2.7 程序创建和验证模型功能 059
2.8 ONNX 模型使用开发示例分析 059
2.8.1 开发环境 060
2.8.2 创建控制台应用程序 060
2.8.3 时间序列异常检测 061
2.8.4 尖峰检测 062
2.9 在ML.NET 中使用ONNX 检测对象 066
2.9.1 环境配置 066
2.9.2 目标检测示例 066
第3章 ONNX 各种功能与性能分析
3.1 Python API 概述 090
3.1.1 加载ONNX 模型 090
3.1.2 加载带有外部数据的ONNX 模型 090
3.1.3 操作TensorProto 和Numpy 数组 091
3.1.4 使用辅助函数创建ONNX 模型 092
3.1.5 用于映射ONNX IR 中属性的转换实用程序 093
3.1.6 检查ONNX 模型 094
3.1.7 ONNX 实用功能 096
3.1.8 ONNX 形状推理 099
3.1.9 ONNX 模型文本语法 101
3.1.10 类型表示 102
3.1.11 ONNX 版本转换器 103
3.2 ONNX 中的广播 105
3.2.1 多向广播 105
3.2.2 单向广播 105
3.3 ONNX 操作符可区分性标签简短指南 106
3.3.1 差异性标签 106
3.3.2 定义差异性标签的方法 106
3.4 维度表示 108
3.4.1 维度表示的目的 108
3.4.2 表示定义 108
3.4.3 表示传播 109
3.4.4 表示验证 109
3.5 外部数据 109
3.5.1 加载带有外部数据的ONNX 模型 109
3.5.2 将ONNX 模型转换为外部数据 110
3.5.3 使用外部数据检查模型 110
3.6 ONNX 模型库 111
3.6.1 基本用法 111
3.6.2 ONNX 中心架构 113
3.7 开放神经网络交换中间表示(ONNX IR)规范 114
3.7.1 ONNX IR 中间表示的作用 114
3.7.2 ONNX IR 中间表示组件 115
3.7.3 可扩展计算图模型 115
3.7.4 数据流图 119
3.7.5 张量表达式 122
3.7.6 静态张量形状 122
3.8 实现ONNX 后端 125
3.8.1 什么是ONNX 后端? 125
3.8.2 统一后端接口 125
3.8.3 ONNX 后端测试 125
第4章 ONNX 数据与操作数优化
4.1 管理实验操作符和图像类别定义 126
4.1.1 弃用的实验操作符 126
4.1.2 图像类别定义 126
4.2 ONNX 类型 127
4.2.1 PyTorch 中的示例 127
4.2.2 操作符惯例 129
4.3 E4M3FNUZ 和E5M2FNUZ 129
4.3.1 指数偏差问题 129
4.3.2 Cast 节点用于数据类型转换 130
4.4 整数类型(4 位) 131
4.4.1 整数类型(4 位)概述 131
4.4.2 Cast 节点用于数据类型转换、包装和拆包 132
4.5 浮点数(4 位) 132
4.5.1 浮点数(4 位)概述 132
4.5.2 E2M1、包装和拆包 132
4.6 ONNX 如何使用onnxruntime.InferenceSession 函数 133
4.6.1 操作符测试代码示例 133
4.6.2 函数定义 134
4.6.3 函数属性 137
4.7 自定义算子 138
4.7.1 添加算子 138
4.7.2 控制操作测试 139
4.7.3 自定义运算符 139
4.7.4 缩减运算符配置文件 145
4.8 分析工具 147
4.8.1 代码内性能分析 147
4.8.2 支持程序分析 147
4.8.3 GPU 性能分析 148
4.8.4 记录和跟踪 148
4.9 线程管理 149
4.9.1 主要内容介绍 149
4.9.2 设置操作内线程数 150
4.9.3 线程旋转规则 151
4.9.4 设置互操作线程数 151
4.9.5 设置操作内线程关联 151
4.9.6 Numa 支持和性能调优 152
4.10 自定义线程回调与应用 152
4.10