第 1 章 昇騰AI處理器軟硬件架構(gòu) 1
1.1 Atlas硬件計算平臺 1
1.1.1 Atlas服務(wù)器 1
1.1.2 Atlas集群 3
1.2 昇騰AI處理器 3
1.3 達 芬奇架構(gòu) 5
1.3.1 計算單元 6
1.3.2 存儲系統(tǒng) 13
1.3.3 控制單元 17
1.3.4 指令集設(shè)計 19
1.4 硬件感知 20
1.5 昇騰異構(gòu)計算架構(gòu) 22
1.6 小結(jié) 23
1.7 測驗題 23
1.8 實踐題 24
第 2 章 Ascend C快速入門 25
2.1 并行計算的基本原理 25
2.1.1 并行體系結(jié)構(gòu)的分類 26
2.1.2 大模型并行加速的基本原理 28
2.1.3 并行效率量化的原理 29
2.2 Ascend C開發(fā)環(huán)境準(zhǔn)備 30
2.2.1 版本選擇 30
2.2.2 環(huán)境依賴 31
2.2.3 安裝開發(fā)套件軟件包 31
2.3 Ascend C算子的開發(fā)調(diào)用 32
2.3.1 CANN算子的類型 32
2.3.2 運行時和任務(wù)調(diào)度 34
2.3.3 兩種核函數(shù)的調(diào)用方式 38
2.3.4 調(diào)用一個昇騰算子 39
2.4 昇騰向量加法程序的加速比 43
2.5 小結(jié) 43
2.6 測驗題 43
2.7 實踐題 44
第 3 章 Ascend C編程模型與編程范式 45
3.1 Ascend C編程模型 45
3.1.1 AI Core硬件抽象 45
3.1.2 SPMD編程模型 47
3.1.3 流水線編程范式 48
3.2 Ascend C語法擴展 50
3.2.1 Ascend C API概述 51
3.2.2 數(shù)據(jù)存儲 53
3.2.3 任務(wù)間通信與同步模塊 56
3.2.4 資源管理模塊 57
3.2.5 臨時變量 58
3.3 向量編程范式 59
3.3.1 算子分析 60
3.3.2 核函數(shù)的定義與封裝 61
3.3.3 算子的數(shù)據(jù)通路 62
3.3.4 算子類的實現(xiàn) 63
3.3.5 算子的切分策略 67
3.4 矩陣編程范式 68
3.4.1 基礎(chǔ)知識 68
3.4.2 高階API實現(xiàn)Matmul算子流程概述 72
3.4.3 Matmul算子Kernel側(cè)的開發(fā) 72
3.4.4 Matmul算子Host側(cè)的開發(fā) 78
3.5 混合編程范式 81
3.5.1 matmul_leakyrelu算子的基本概念 81
3.5.2 matmul_leakyrelu算子Kernel側(cè)的開發(fā) 82
3.6 更多Ascend C算子樣例 88
3.6.1 雙曲正弦函數(shù)算子核函數(shù)的實現(xiàn) 89
3.6.2 Strassen矩陣乘法算子核函數(shù)的實現(xiàn) 91
3.6.3 LayerNorm核函數(shù)的實現(xiàn) 101
3.7 小結(jié) 105
3.8 測驗題 106
3.9 實踐題 106
第 4 章 Ascend C算子開發(fā)流程 108
4.1 算子開發(fā)流程概述 108
4.2 自動生成算子工程 109
4.3 算子開發(fā)流程:Kernel側(cè) 111
4.3.1 函數(shù)原型的聲明 113
4.3.2 算子類的實現(xiàn) 113
4.4 算子開發(fā)流程:Host側(cè) 114
4.4.1 Tiling實現(xiàn) 114
4.4.2 shape推導(dǎo)等函數(shù)的實現(xiàn) 117
4.4.3 算子原型的注冊 118
4.5 算子工程的編譯部署 119
4.5.1 算子工程的編譯 119
4.5.2 算子包的部署 121
4.6 PyTorch算子調(diào)用 122
4.6.1 PyTorch算子調(diào)用的基本原理 122
4.6.2 安裝PyTorch框架 122
4.6.3 安裝torch_npu插件 123
4.6.4 安裝APEX模塊 124
4.6.5 調(diào)用測試腳本 125
4.7 Ascend C算子在整網(wǎng)中的替換 126
4.7.1 替換算子的工程開發(fā)及編譯部署 126
4.7.2 PyTorch適配插件的開發(fā) 127
4.7.3 算子替換 129
4.8 小結(jié) 130
4.9 測驗題 130
4.10 實踐題 131
第 5 章 Ascend C算子調(diào)試調(diào)優(yōu) 132
5.1 算子調(diào)試工具 132
5.1.1 孿生調(diào)試 132
5.1.2 CPU域的調(diào)試 132
5.1.3 NPU域的調(diào)試 135
5.2 算子調(diào)優(yōu)工具 139
5.2.1 算子性能調(diào)優(yōu)原理 139
5.2.2 算子調(diào)優(yōu)基本流程 142
5.3 算子異常檢測工具 143
5.3.1 算子內(nèi)存的檢測原理 143
5.3.2 算子競爭的檢測原理 146
5.3.3 異常檢測工具的使用方法 146
5.4 昇騰算子性能的優(yōu)化方法 147
5.4.1 算子計算流程優(yōu)化 147
5.4.2 代碼實現(xiàn)優(yōu)化 150
5.4.3 層次化訪存優(yōu)化 152
5.4.4 計算資源利用優(yōu)化 153
5.5 小結(jié) 154
5.6 測驗題 154
5.7 實踐題 155
第 6 章 Ascend C大模型算子優(yōu)化 156
6.1 大模型與自注意力算子的基礎(chǔ)知識 156
6.1.1 大模型的奠基石——Transformer 156
6.1.2 自注意力算子在GPU上加速計算的發(fā)展 156
6.2 自注意力算子的優(yōu)化算法 160
6.2.1 自注意力算子在昇騰AI處理器上的優(yōu)化思路 160
6.2.2 自注意力算子的前向傳播優(yōu)化 161
6.3 自注意力算子前向傳播的實現(xiàn) 167
6.3.1 矩陣切分 168
6.3.2 矩陣乘法計算 170
6.3.3 Softmax計算 171
6.3.4 第二次矩陣乘法及輸出合并計算 173
6.4 自注意力算子的測試 176
6.4.1 生成算子API 176
6.4.2 編寫測試項目 178
6.4.3 編譯與運行 188
6.5 小結(jié) 188
6.6 測驗題 189
6.7 實踐題 189