自製深度學習推理框架

傅莘莘

  • 出版商: 人民郵電
  • 出版日期: 2025-03-01
  • 定價: $479
  • 售價: 8.5$407
  • 語言: 簡體中文
  • 頁數: 198
  • ISBN: 7115662584
  • ISBN-13: 9787115662583
  • 相關分類: DeepLearning
  • 下單後立即進貨 (約4週~6週)

  • 自製深度學習推理框架-preview-1
  • 自製深度學習推理框架-preview-2
自製深度學習推理框架-preview-1

相關主題

商品描述

本書帶領讀者手把手實現深度學習推理框架,並支持大語言模型的推理。

 

全書共 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 砮 算子和算子註冊器的設計與實現

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 鍵–值對緩存

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 小結