第 1 章 昇騰AI處理器軟硬件架構(gòu) 1
1.1 Atlas硬件計(jì)算平臺(tái) 1
1.1.1 Atlas服務(wù)器 1
1.1.2 Atlas集群 3
1.2 昇騰AI處理器 3
1.3 達(dá) 芬奇架構(gòu) 5
1.3.1 計(jì)算單元 6
1.3.2 存儲(chǔ)系統(tǒng) 13
1.3.3 控制單元 17
1.3.4 指令集設(shè)計(jì) 19
1.4 硬件感知 20
1.5 昇騰異構(gòu)計(jì)算架構(gòu) 22
1.6 小結(jié) 23
1.7 測(cè)驗(yàn)題 23
1.8 實(shí)踐題 24
第 2 章 Ascend C快速入門 25
2.1 并行計(jì)算的基本原理 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 運(yùn)行時(shí)和任務(wù)調(diào)度 34
2.3.3 兩種核函數(shù)的調(diào)用方式 38
2.3.4 調(diào)用一個(gè)昇騰算子 39
2.4 昇騰向量加法程序的加速比 43
2.5 小結(jié) 43
2.6 測(cè)驗(yàn)題 43
2.7 實(shí)踐題 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語法擴(kuò)展 50
3.2.1 Ascend C API概述 51
3.2.2 數(shù)據(jù)存儲(chǔ) 53
3.2.3 任務(wù)間通信與同步模塊 56
3.2.4 資源管理模塊 57
3.2.5 臨時(shí)變量 58
3.3 向量編程范式 59
3.3.1 算子分析 60
3.3.2 核函數(shù)的定義與封裝 61
3.3.3 算子的數(shù)據(jù)通路 62
3.3.4 算子類的實(shí)現(xiàn) 63
3.3.5 算子的切分策略 67
3.4 矩陣編程范式 68
3.4.1 基礎(chǔ)知識(shí) 68
3.4.2 高階API實(shí)現(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ù)的實(shí)現(xiàn) 89
3.6.2 Strassen矩陣乘法算子核函數(shù)的實(shí)現(xiàn) 91
3.6.3 LayerNorm核函數(shù)的實(shí)現(xiàn) 101
3.7 小結(jié) 105
3.8 測(cè)驗(yàn)題 106
3.9 實(shí)踐題 106
第 4 章 Ascend C算子開發(fā)流程 108
4.1 算子開發(fā)流程概述 108
4.2 自動(dòng)生成算子工程 109
4.3 算子開發(fā)流程:Kernel側(cè) 111
4.3.1 函數(shù)原型的聲明 113
4.3.2 算子類的實(shí)現(xiàn) 113
4.4 算子開發(fā)流程:Host側(cè) 114
4.4.1 Tiling實(shí)現(xiàn) 114
4.4.2 shape推導(dǎo)等函數(shù)的實(shí)現(xiàn) 117
4.4.3 算子原型的注冊(cè) 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)用測(cè)試腳本 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 測(cè)驗(yàn)題 130
4.10 實(shí)踐題 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 算子異常檢測(cè)工具 143
5.3.1 算子內(nèi)存的檢測(cè)原理 143
5.3.2 算子競(jìng)爭的檢測(cè)原理 146
5.3.3 異常檢測(cè)工具的使用方法 146
5.4 昇騰算子性能的優(yōu)化方法 147
5.4.1 算子計(jì)算流程優(yōu)化 147
5.4.2 代碼實(shí)現(xiàn)優(yōu)化 150
5.4.3 層次化訪存優(yōu)化 152
5.4.4 計(jì)算資源利用優(yōu)化 153
5.5 小結(jié) 154
5.6 測(cè)驗(yàn)題 154
5.7 實(shí)踐題 155
第 6 章 Ascend C大模型算子優(yōu)化 156
6.1 大模型與自注意力算子的基礎(chǔ)知識(shí) 156
6.1.1 大模型的奠基石——Transformer 156
6.1.2 自注意力算子在GPU上加速計(jì)算的發(fā)展 156
6.2 自注意力算子的優(yōu)化算法 160
6.2.1 自注意力算子在昇騰AI處理器上的優(yōu)化思路 160
6.2.2 自注意力算子的前向傳播優(yōu)化 161
6.3 自注意力算子前向傳播的實(shí)現(xiàn) 167
6.3.1 矩陣切分 168
6.3.2 矩陣乘法計(jì)算 170
6.3.3 Softmax計(jì)算 171
6.3.4 第二次矩陣乘法及輸出合并計(jì)算 173
6.4 自注意力算子的測(cè)試 176
6.4.1 生成算子API 176
6.4.2 編寫測(cè)試項(xiàng)目 178
6.4.3 編譯與運(yùn)行 188
6.5 小結(jié) 188
6.6 測(cè)驗(yàn)題 189
6.7 實(shí)踐題 189