Ascend C異構並行程序設計—— 昇騰算子編程指南
蘇統華,杜鵬,閆長江
相關主題
商品描述
本書以昇騰算子編程語言Ascend C的高效開發為核心,系統介紹華為面向人工智能的昇騰AI處理器架構、硬件抽象及其軟件棧。本書由淺入深,通過案例講解知識點,理論與實踐並重。全書分為6章,分別介紹了昇騰AI處理器軟硬件架構、Ascend C 快速入門、Ascend C編程模型與編程範式、Ascend C算子開發流程、Ascend C算子調試調優和Ascend C大模型算子優化。
本書適合人工智能產業的研發人員閱讀,也適合軟件工程、人工智能、信息安全、大數據、物聯網等專業的本科生學習。
作者簡介
苏统华
哈尔滨工业大学软件学院副院长,教授,博士生导师。主要科研方向为深度学习与异构计算、图像生成与安全等。承担国家重点研发课题、国家自然科学基金等科研项目30余项,发表论文80余篇,出版专著和译著15本。获聘首批华为昇腾领军人物(MVP,全国14人),担任首届MindSpore社区技术治理委员会成员(全球13人),担任华为昇腾专家,连续4年评为全国GPU教育工作者。
杜 鹏
博士,浙江大学计算机辅助设计与图形学国家重点实验室专职研究员,主要研究方向为图形学与CAD、人工智能、异构计算。在SIGGRAPH、CVPR等会议发表论文10余篇,出版《昇腾A处理器CANN架构与编程》《昇腾AI处理器CANN应用与实战——基于Atas硬件的人工智能案例开发指南》。获2021年度浙江省科学技术进步奖一等奖、2022年上海市技术发明奖一等奖。
闫长江
昇腾CANN首席架构师,负责昇腾AI处理器与异构计算架构CANN的架构设计,负责华为昇腾处理器的市场商用业务。在数据通信和计算机体系架构设计领域有超过20年的行业经验。
目錄大綱
第 1 章 昇騰AI處理器軟硬件架構 1
1.1 Atlas硬件計算平臺 1
1.1.1 Atlas服務器 1
1.1.2 Atlas集群 3
1.2 昇騰AI處理器 3
1.3 達 芬奇架構 5
1.3.1 計算單元 6
1.3.2 存儲系統 13
1.3.3 控制單元 17
1.3.4 指令集設計 19
1.4 硬件感知 20
1.5 昇騰異構計算架構 22
1.6 小結 23
1.7 測驗題 23
1.8 實踐題 24
第 2 章 Ascend C快速入門 25
2.1 並行計算的基本原理 25
2.1.1 並行體系結構的分類 26
2.1.2 大模型並行加速的基本原理 28
2.1.3 並行效率量化的原理 29
2.2 Ascend C開發環境準備 30
2.2.1 版本選擇 30
2.2.2 環境依賴 31
2.2.3 安裝開發套件軟件包 31
2.3 Ascend C算子的開發調用 32
2.3.1 CANN算子的類型 32
2.3.2 運行時和任務調度 34
2.3.3 兩種核函數的調用方式 38
2.3.4 調用一個昇騰算子 39
2.4 昇騰向量加法程序的加速比 43
2.5 小結 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 數據存儲 53
3.2.3 任務間通信與同步模塊 56
3.2.4 資源管理模塊 57
3.2.5 臨時變量 58
3.3 向量編程範式 59
3.3.1 算子分析 60
3.3.2 核函數的定義與封裝 61
3.3.3 算子的數據通路 62
3.3.4 算子類的實現 63
3.3.5 算子的切分策略 67
3.4 矩陣編程範式 68
3.4.1 基礎知識 68
3.4.2 高階API實現Matmul算子流程概述 72
3.4.3 Matmul算子Kernel側的開發 72
3.4.4 Matmul算子Host側的開發 78
3.5 混合編程範式 81
3.5.1 matmul_leakyrelu算子的基本概念 81
3.5.2 matmul_leakyrelu算子Kernel側的開發 82
3.6 更多Ascend C算子樣例 88
3.6.1 雙曲正弦函數算子核函數的實現 89
3.6.2 Strassen矩陣乘法算子核函數的實現 91
3.6.3 LayerNorm核函數的實現 101
3.7 小結 105
3.8 測驗題 106
3.9 實踐題 106
第 4 章 Ascend C算子開發流程 108
4.1 算子開發流程概述 108
4.2 自動生成算子工程 109
4.3 算子開發流程:Kernel側 111
4.3.1 函數原型的聲明 113
4.3.2 算子類的實現 113
4.4 算子開發流程:Host側 114
4.4.1 Tiling實現 114
4.4.2 shape推導等函數的實現 117
4.4.3 算子原型的註冊 118
4.5 算子工程的編譯部署 119
4.5.1 算子工程的編譯 119
4.5.2 算子包的部署 121
4.6 PyTorch算子調用 122
4.6.1 PyTorch算子調用的基本原理 122
4.6.2 安裝PyTorch框架 122
4.6.3 安裝torch_npu插件 123
4.6.4 安裝APEX模塊 124
4.6.5 調用測試腳本 125
4.7 Ascend C算子在整網中的替換 126
4.7.1 替換算子的工程開發及編譯部署 126
4.7.2 PyTorch適配插件的開發 127
4.7.3 算子替換 129
4.8 小結 130
4.9 測驗題 130
4.10 實踐題 131
第 5 章 Ascend C算子調試調優 132
5.1 算子調試工具 132
5.1.1 孿生調試 132
5.1.2 CPU域的調試 132
5.1.3 NPU域的調試 135
5.2 算子調優工具 139
5.2.1 算子性能調優原理 139
5.2.2 算子調優基本流程 142
5.3 算子異常檢測工具 143
5.3.1 算子內存的檢測原理 143
5.3.2 算子競爭的檢測原理 146
5.3.3 異常檢測工具的使用方法 146
5.4 昇騰算子性能的優化方法 147
5.4.1 算子計算流程優化 147
5.4.2 代碼實現優化 150
5.4.3 層次化訪存優化 152
5.4.4 計算資源利用優化 153
5.5 小結 154
5.6 測驗題 154
5.7 實踐題 155
第 6 章 Ascend C大模型算子優化 156
6.1 大模型與自註意力算子的基礎知識 156
6.1.1 大模型的奠基石——Transformer 156
6.1.2 自註意力算子在GPU上加速計算的發展 156
6.2 自註意力算子的優化算法 160
6.2.1 自註意力算子在昇騰AI處理器上的優化思路 160
6.2.2 自註意力算子的前向傳播優化 161
6.3 自註意力算子前向傳播的實現 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 小結 188
6.6 測驗題 189
6.7 實踐題 189