大模型動力引擎——PyTorch性能與顯存優化手冊

張愛玲、楊占略

  • 出版商: 清華大學
  • 出版日期: 2024-10-01
  • 定價: $534
  • 售價: 8.5$454
  • 語言: 簡體中文
  • ISBN: 7302673470
  • ISBN-13: 9787302673477
  • 相關分類: LangChainDeepLearning
  • 下單後立即進貨 (約4週~6週)

  • 大模型動力引擎——PyTorch性能與顯存優化手冊-preview-1
  • 大模型動力引擎——PyTorch性能與顯存優化手冊-preview-2
  • 大模型動力引擎——PyTorch性能與顯存優化手冊-preview-3
大模型動力引擎——PyTorch性能與顯存優化手冊-preview-1

買這商品的人也買了...

相關主題

商品描述

本書致力於探索如何在大規模深度學習模型訓練中,**限度地提高性能和優化顯存使 用。本書面向深度學習從業者,尤其是希望深入瞭解並提升模型訓練效率的工程師與研究 人員。隨著深度學習模型和數據規模的迅速增長,如何高效利用硬件資源,減少訓練時間, 成為當前AI系統工程的關鍵挑戰。本書從硬件和軟件的基礎知識入手,逐步引導讀者理解 和掌握PyTorch的優化技巧。內容涵蓋從單機到分佈式訓練,從顯存管理到性能分析的多種 優化策略,力求通過豐富的代碼實例和深入的原理講解,使讀者能夠在實踐中靈活應用這些 方法。

目錄大綱

目錄

第1章 歡迎來到這場大模型競賽 1

1.1 模型規模帶來的挑戰 2

1.2 數據規模帶來的挑戰 3

1.3 模型規模與數據增長的應對方法 4

第2章 深度學習必備的硬件知識 6

2.1 CPU與內存 7

2.1.1 內存 7

2.1.2 CPU 9

2.2 硬盤 11

2.3 GPU 13

2.3.1 CPU的局限性 13

2.3.2 GPU的硬件結構 14

2.3.3 GPU編程模型及其硬件對應 18

2.3.4 GPU的關鍵性能指標 19

2.3.5 顯存與內存間的數據傳輸 19

2.4 分佈式系統 22

2.4.1 單機多卡的通信 22

2.4.2 多機多卡的通信 24

2.4.3 分佈式系統的數據存儲 24

第3章 深度學習必備的PyTorch知識 26

3.1 PyTorch 的張量數據結構 27

3.1.1 張量的基本屬性及創建 27

3.1.2 訪問張量的數據 28

3.1.3 張量的存儲方式 29

3.1.4 張量的視圖 32

3.2 PyTorch中的算子 33

3.2.1 PyTorch的算子庫 33

3.2.2 PyTorch算子的內存分配 35

3.2.3 算子的調用過程 36

3.3 PyTorch的動態圖機制 38

3.4 PyTorch的自動微分系統 41

3.4.1 什麽是自動微分 41

3.4.2 自動微分的實現 42

3.4.3 Autograd 擴展自定義算子 46

3.5 PyTorch的異步執行機制 47

第4章 定位性能瓶頸的工具和方法 51

4.1 配置性能分析所需的軟硬件環境 52

4.1.1 減少無關程序的乾擾 52

4.1.2 提升PyTorch 程序的可重復性 53

4.1.3 控制GPU頻率 58

4.1.4 控制CPU的性能狀態和工作頻率 59

4.2 精確測量程序運行時間 60

4.2.1 計量CPU程序的運行時間 60

4.2.2 程序預熱和多次運行取平均 61

4.2.3 計量GPU程序的運行時間 62

4.2.4 精確計量GPU的運行時間 63

4.3 PyTorch性能分析器 64

4.3.1 性能分析 65

4.3.2 顯存分析 66

4.3.3 可視化性能圖譜 67

4.3.4 如何定位性能瓶頸 67

4.4 GPU 專業分析工具 71

4.4.1 Nsight Systems 71

4.4.2 Nsight Compute 71

4.5 CPU 性能分析工具 75

4.5.1 Py-Spy 75

4.5.2 strace 77

4.6 本章小結 78

第5章 數據加載和預處理專題 80

5.1 數據接入的準備階段 81

5.2 數據集的獲取和預處理 82

5.2.1 獲取原始數據 82

5.2.2 原始數據的清洗 82

5.2.3 數據的離線預處理 84

5.2.4 數據的存儲 86

5.2.5 PyTorch與第三方庫的交互 88

5.3 數據集的加載和使用 89

5.3.1 PyTorch 的 Dataset 封裝 90

5.3.2 PyTorch 的 DataLoader 封裝 92

5.4 數據加載性能分析 93

5.4.1 充分利用CPU的多核資源 94

5.4.2 優化CPU上的計算負載 95

5.4.3 減少不必要的CPU線程 96

5.4.4 提升磁盤效率 98

5.5 本章小結 99

第6章 單卡性能優化專題 100

6.1 提高數據任務的並行度 101

6.1.1 增加數據預處理的並行度 101

6.1.2 使用異步接口提交數據傳輸任務 104

6.1.3 數據傳輸與GPU計算任務並行 106

6.2 提高GPU計算任務的效率 109

6.2.1 增大BatchSize 109

6.2.2 使用融合算子 113

6.3 減少CPU和GPU間的同步 116

6.4 降低程序中的額外開銷 118

6.4.1 避免張量的創建開銷 119

6.4.2 關閉不必要的梯度計算 121

6.5 有代價的性能優化 123

6.5.1 使用低精度數據進行設備間拷貝 123

6.5.2 使用性能特化的優化器實現 125

6.6 本章小結 128

第7章 單卡顯存優化專題 129

7.1 PyTorch的顯存管理機制 130

7.2 顯存的分析方法 131

7.2.1 使用PyTorch API查詢當前顯存狀態 132

7.2.2 使用PyTorch的顯存分析器 133

7.3 訓練過程中的顯存占用 135

7.4 通用顯存復用方法 139

7.4.1 使用原位操作算子 139

7.4.2 使用共享存儲的操作 141

7.5 有代價的顯存優化技巧 142

7.5.1 跨批次梯度累加 142

7.5.2 即時重算前向張量 144

7.5.3 將GPU顯存下放至CPU內存 145

7.5.4 降低優化器的顯存占用 147

7.6 優化Python代碼以減少顯存占用 149

7.6.1 Python 垃圾回收機制 150

7.6.2 避免出現循環依賴 150

7.6.3 謹慎使用全局作用域 152

7.7 本章小結 153

第8章 分佈式訓練專題 155

8.1 分佈式策略概述 157

8.2 集合通信原語 158

8.3 應對數據增長的並行策略 161

8.3.1 數據並行策略 161

8.3.2 手動實現數據並行算法 162

8.3.3 PyTorch的DDP封裝 165

8.3.4 數據並行的性價比 167

8.3.5 其他數據維度的切分 169

8.4 應對模型增長的並行策略 169

8.4.1 靜態顯存切分 170

8.4.2 動態顯存切分 172

8.5 本章小結 176

第9章 高級優化方法專題 178

9.1 自動混合精度訓練 179

9.1.1 浮點數的表示方法 179

9.1.2 使用低精度數據類型的優缺點 181

9.1.3 PyTorch 自動混合精度訓練 182

9.2 自定義高性能算子 185

9.2.1 自定義算子的封裝流程 185

9.2.2 自定義算子的後端代碼實現 186

9.2.3 自定義算子導入Python 188

9.2.4 自定義算子導入PyTorch 189

9.2.5 在Python中使用自定義算子 190

9.3 基於計算圖的性能優化 191

9.3.1 torch.compile的使用方法 192

9.3.2 計算圖的提取 194

9.3.3 圖的優化和後端代碼生成 196

9.4 本章小結 198

第10章 GPT-2優化全流程 199

10.1 GPT模型結構簡介 200

10.2 實驗環境與機器配置 203

10.3 顯存優化 203

10.3.1 基準模型 204

10.3.2 使用跨批次梯度累加 204

10.3.3 開啟即時重算前向張量 205

10.3.4 使用顯存友好的優化器模式 205

10.3.5 使用分佈式方法降低顯存占用—FSDP 206

10.3.6 顯存優化小結 207

10.4 性能優化 208

10.4.1 基準模型 209

10.4.2 增加 BatchSize 209

10.4.3 增加數據預處理的並行度 210

10.4.4 使用異步接口完成數據傳輸 211

10.4.5 使用計算圖優化 211

10.4.6 使用float16混合精度訓練 212

10.4.7 (可選)使用自定義算子 213

10.4.8 使用單機多卡加速訓練 213

10.4.9 使用多機多卡加速訓練 214

10.4.10 性能優化小結 215

結語 216