ONNX(Open Neural Network Exchange,開放神經(jīng)網(wǎng)絡(luò)交換)是一種開放格式,用于存儲深度神經(jīng)網(wǎng)絡(luò)模型。ONNX 由微軟和Facebook 于2017 年共同推出,旨在促進不同深度學(xué)習(xí)框架之間的模型交換和互操作性。ONNX 定義了一組與環(huán)境和平臺無關(guān)的標準格式,使得AI 模型可以在不同的框架和環(huán)境下交互使用。經(jīng)過短短幾年的發(fā)展,ONNX 已經(jīng)成為表示深度學(xué)習(xí)模型的實際標準。它還支持傳統(tǒng)非神經(jīng)網(wǎng)絡(luò)機器學(xué)習(xí)模型。ONNX 有望成為整個AI 模型交換的標準。
全書包括6 章,分別為ONNX 安裝與使用、ONNX 運行時與應(yīng)用開發(fā)技術(shù)、ONNX 各種功能與性能分析、ONNX 數(shù)據(jù)與操作數(shù)優(yōu)化、ONNX 模型性能與應(yīng)用、ONNX 創(chuàng)新開發(fā)案例分析。
本書適合從事AI 算法、軟件、硬件開發(fā)的工程師閱讀,也可供科研人員、高校師生、技術(shù)管理人員參考使用。
第1章 ONNX 安裝與使用
1.1 安裝ONNX 運行時(ORT) 001
1.1.1 環(huán)境要求 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 構(gòu)建ONNX 運行時 010
1.3.1 構(gòu)建ONNX 運行時的方式 010
1.3.2 ONNX 運行時API 概述 017
1.3.3 API 詳細信息 021
1.4 支持程序相關(guān)API 028
第2章 ONNX 運行時與應(yīng)用開發(fā)技術(shù)
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 的輸入、輸出、節(jié)點、初始化器、屬性 038
2.2.3 元素類型 039
2.2.4 什么是opset 版本? 040
2.2.5 子圖、測試和循環(huán) 040
2.2.6 算子掃描 040
2.2.7 工具 041
2.3 ONNX 與Python 042
2.3.1 線性回歸示例042
2.3.2 初始化器,改進的線性規(guī)劃 046
2.3.3 遍歷ONNX 結(jié)構(gòu)并檢查初始化器 048
2.4 運算符屬性 049
2.5 根據(jù)符號計算矩陣中所有浮點數(shù)的總和 052
2.6 樹集合回歸器 058
2.7 程序創(chuàng)建和驗證模型功能 059
2.8 ONNX 模型使用開發(fā)示例分析 059
2.8.1 開發(fā)環(huán)境 060
2.8.2 創(chuàng)建控制臺應(yīng)用程序 060
2.8.3 時間序列異常檢測 061
2.8.4 尖峰檢測 062
2.9 在ML.NET 中使用ONNX 檢測對象 066
2.9.1 環(huán)境配置 066
2.9.2 目標檢測示例 066
第3章 ONNX 各種功能與性能分析
3.1 Python API 概述 090
3.1.1 加載ONNX 模型 090
3.1.2 加載帶有外部數(shù)據(jù)的ONNX 模型 090
3.1.3 操作TensorProto 和Numpy 數(shù)組 091
3.1.4 使用輔助函數(shù)創(chuàng)建ONNX 模型 092
3.1.5 用于映射ONNX IR 中屬性的轉(zhuǎn)換實用程序 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 版本轉(zhuǎn)換器 103
3.2 ONNX 中的廣播 105
3.2.1 多向廣播 105
3.2.2 單向廣播 105
3.3 ONNX 操作符可區(qū)分性標簽簡短指南 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 外部數(shù)據(jù) 109
3.5.1 加載帶有外部數(shù)據(jù)的ONNX 模型 109
3.5.2 將ONNX 模型轉(zhuǎn)換為外部數(shù)據(jù) 110
3.5.3 使用外部數(shù)據(jù)檢查模型 110
3.6 ONNX 模型庫 111
3.6.1 基本用法 111
3.6.2 ONNX 中心架構(gòu) 113
3.7 開放神經(jīng)網(wǎng)絡(luò)交換中間表示(ONNX IR)規(guī)范 114
3.7.1 ONNX IR 中間表示的作用 114
3.7.2 ONNX IR 中間表示組件 115
3.7.3 可擴展計算圖模型 115
3.7.4 數(shù)據(jù)流圖 119
3.7.5 張量表達式 122
3.7.6 靜態(tài)張量形狀 122
3.8 實現(xiàn)ONNX 后端 125
3.8.1 什么是ONNX 后端? 125
3.8.2 統(tǒng)一后端接口 125
3.8.3 ONNX 后端測試 125
第4章 ONNX 數(shù)據(jù)與操作數(shù)優(yōu)化
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 指數(shù)偏差問題 129
4.3.2 Cast 節(jié)點用于數(shù)據(jù)類型轉(zhuǎn)換 130
4.4 整數(shù)類型(4 位) 131
4.4.1 整數(shù)類型(4 位)概述 131
4.4.2 Cast 節(jié)點用于數(shù)據(jù)類型轉(zhuǎn)換、包裝和拆包 132
4.5 浮點數(shù)(4 位) 132
4.5.1 浮點數(shù)(4 位)概述 132
4.5.2 E2M1、包裝和拆包 132
4.6 ONNX 如何使用onnxruntime.InferenceSession 函數(shù) 133
4.6.1 操作符測試代碼示例 133
4.6.2 函數(shù)定義 134
4.6.3 函數(shù)屬性 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 代碼內(nèi)性能分析 147
4.8.2 支持程序分析 147
4.8.3 GPU 性能分析 148
4.8.4 記錄和跟蹤 148
4.9 線程管理 149
4.9.1 主要內(nèi)容介紹 149
4.9.2 設(shè)置操作內(nèi)線程數(shù) 150
4.9.3 線程旋轉(zhuǎn)規(guī)則 151
4.9.4 設(shè)置互操作線程數(shù) 151
4.9.5 設(shè)置操作內(nèi)線程關(guān)聯(lián) 151
4.9.6 Numa 支持和性能調(diào)優(yōu) 152
4.10 自定義線程回調(diào)與應(yīng)用 152
4.10.1 自定義線程回調(diào) 152
4.10.2 在自定義操作中的I/O 綁定 153
4.11 量化ONNX 模型 155
4.11.1 量化概述 155
4.11.2 ONNX 量化表示格式 155
4.11.3 量化ONNX 模型 156
4.11.4 量化示例 158
4.11.5 方法選擇 158
4.11.6 量化為Int4/UInt4 159
4.12 創(chuàng)建float16 和混合精度模型 161
4.12.1 float16 轉(zhuǎn)換解析 161
4.12.2 混合精度 162
第5章 ONNX 模型性能與應(yīng)用
5.1 ONNX 運行時圖形優(yōu)化 163
5.1.1 ONNX 運行時圖形優(yōu)化概述 163
5.1.2 ONNX 運行時圖形優(yōu)化使用方法 165
5.2 ORT 模型格式 166
5.2.1 ORT 模型格式是什么? 166
5.2.2 將ONNX 模型轉(zhuǎn)換為ORT 格式 167
5.2.3 將ONNX 模型轉(zhuǎn)換為ORT 格式腳本用法 168
5.3 加載并執(zhí)行ORT 格式的模型 170
5.3.1 不同平臺的運行環(huán)境 170
5.3.2 ORT 格式模型加載 170
5.3.3 從內(nèi)存中的字節(jié)數(shù)組加載ORT 格式模型 171
5.3.4 ORT 格式模型運行時優(yōu)化 172
5.4 BERT 模型驗證 174
5.4.1 BERT 模型驗證概述 174
5.4.2 對模型進行基準測試和分析 174
5.4.3 Olive-硬件感知模型優(yōu)化工具 175
5.5 AzureML 上ONNX 運行時的高性能推理BERT 模型 179
5.5.1 AzureML 上ONNX 運行時BERT 模型概述 179
5.5.2 步驟1-預(yù)訓(xùn)練、微調(diào)和導(dǎo)出BERT 模型(PyTorch) 179
5.5.3 步驟2-通過AzureML 使用ONNX 運行時部署B(yǎng)ERT 模型 181
5.5.4 步驟3-檢查AzureML 環(huán)境 181
5.5.5 步驟4-在AzureML 中注冊模型 182
5.5.6 步驟5-編寫評分文件 183
5.5.7 步驟6-寫入環(huán)境文件 187
5.5.8 步驟7-在Azure 容器實例上將模型部署為Web 服務(wù) 187
5.5.9 步驟8-使用WebService 推理BERT 模型 188
第6章 ONNX 創(chuàng)新開發(fā)案例分析
6.1 FedAS:彌合個性化聯(lián)合學(xué)習(xí)中的不一致性 190
6.1.1 概述 190
6.1.2 技術(shù)分析 190
6.1.3 結(jié)論 191
6.2 快照壓縮成像的雙先驗展開 192
6.2.1 概述 192
6.2.2 技術(shù)分析 192
6.2.3 結(jié)論 193
6.3 利用光譜空間校正改進光譜快照重建 193
6.3.1 概述 193
6.3.2 技術(shù)分析 193
6.3.3 結(jié)論 194
6.4 基于位平面切片的學(xué)習(xí)型無損圖像壓縮 194
6.4.1 概述 194
6.4.2 技術(shù)分析 195
6.4.3 結(jié)論 195
6.5 LiDAR4D:用于新型時空觀激光雷達合成的動態(tài)神經(jīng)場 195
6.5.1 概述 195
6.5.2 技術(shù)分析 196
6.5.3 結(jié)論 196
6.6 用于圖像恢復(fù)的具有注意特征重構(gòu)的自適應(yīng)稀疏變換器 197
6.6.1 概述 197
6.6.2 技術(shù)分析 197
6.6.3 結(jié)論 198
6.7 面向目標檢測中邊界不連續(xù)性問題的再思考 198
6.7.1 概述 198
6.7.2 技術(shù)分析 199
6.7.3 結(jié)論 199
6.8 綜合、診斷和優(yōu)化:邁向精細視覺語言理解 200
6.8.1 概述 200
6.8.2 技術(shù)分析 200
6.8.3 結(jié)論 201
6.9 光譜和視覺光譜偏振真實數(shù)據(jù)集 201
6.9.1 概述 201
6.9.2 技術(shù)分析 202
6.9.3 結(jié)論 203
6.10 CoSeR 橋接圖像和語言以實現(xiàn)認知超分辨率 204
6.10.1 概述 204
6.10.2 技術(shù)分析 204
6.10.3 結(jié)論 212
6.11 SAM-6D: 分段任意模型滿足零樣本6D 對象姿態(tài)估計 213
6.11.1 概述 213
6.11.2 技術(shù)分析 213
6.11.3 結(jié)論 214
6.12 NeISF:用于幾何和材料估計的神經(jīng)入射斯托克斯場 215
6.12.1 概述 215
6.12.2 技術(shù)分析 215
6.13 Monkey 圖像分辨率和文本標簽是大型多模態(tài)模型的重要內(nèi)容 217
6.13.1 概述 217
6.13.2 技術(shù)分析 218
6.13.3 結(jié)論 219
6.14 CorrMatch:通過相關(guān)性匹配進行標簽傳播,用于半監(jiān)督語義分割 219
6.14.1 概述 219
6.14.2 技術(shù)分析 220
6.15 VCoder:多模態(tài)大型語言模型的多功能視覺編碼器 220
6.15.1 概述 220
6.15.2 技術(shù)分析 220
6.15.3 結(jié)論 221
參考文獻