本书从深度神经网络和AI芯片研究现状出发,系统地论述了目前深度学习主流开发平台和深度神经网络基于FPGA平台实现加速的开发原理和应用实例。全书主要包括5部分:第1~2章介绍了深度神经网络的发展,并总结了深度学习主流开发平台和AI芯片的研究现状;第3~6章在对深度神经网络基础层算子、FPGA进行了介绍后,总结了FPGA神经网络开发基础及RTL级开发;第7章分析了基于FPGA实现神经网络加速的实例;第8章介绍了基于OpenCL的FPGA神经网络计算加速开发;第9章分析了前沿神经网络压缩与加速技术。
本书可以为人工智能、计算机科学、信息科学、神经网络加速计算研究者或者从事深度学习、图像处理的相关研究人员提供参考,也可作为相关专业本科生及研究生的教学参考书。
近几年来,随着计算机技术的发展以及硬件设备计算能力的提高,人工智能技术得到了飞速发展,神经网络也由原来的浅层发展至深层,由此引出深度学习的概念。深度学习在图像处理、语音识别、机器控制等领域取得了巨大的突破,很多公司都希望在人工智能领域有所成就,试图抓住先机,占领应用市场,因此相关专业人才供不应求。研究者一般使用多个GPU(Graphics Processing Unit,图形处理器)或者计算机集群进行深层复杂模型的研究与探索,从而解决更加复杂的问题,但却忽略了能量消耗与计算资源的限制因素。虽然很多算法在GPU加速条件下可以实现不错的效果,但是距离工业界的实际要求还有很大的差距,很多复杂模型无法部署在小型设备上或者计算实时性无法满足应用需求,这也是困扰众多工程师的主要难题。
现场可编程门阵列(Field Programmable Gate Array,FPGA)可以通过硬件描述语言(Verilog或VHDL)或C?/?C++?/?OpenCL进行编程,它具有提供原始计算能力、设计灵活、安全可靠、高效率和低功耗的优势。目前一些公司和研究机构把深度学习的模型迁移到FPGA上,以满足工业和特殊领域的使用需求。FPGA在深度学习中的研究大致可以分为对特定的应用程序进行加速、对特定的算法进行加速、对算法的公共特性进行加速,以及带有硬件模板的通用加速器框架设计。在芯片需求还未形成规模、算法需要不断改进的情况下,FPGA大大降低了从算法到芯片电路的调试成本,也是实现半定制人工智能芯片的最佳选择之一。
我们依托于智能感知与图像理解教育部重点实验室、智能感知与计算国际合作联合实验室、智能感知与计算国际联合研究中心以及西安电子科技大学-加速云深度学习联合实验室,致力于深度学习理论研究及其硬件的应用开发。本书基于以上的研究基础,为读者分享相关的设计和开发思路,希望能够为相关领域的工程师提供参考。本书的完成离不开团队的支持与帮助,特别感谢李洋、李秀芳、杨育婷、张若浛、陈洁等博士,以及邹洪斌、杨康、樊龙飞、孙璆琛、姜升、苏蓓、冯雨歆、陈亚楠等硕士研究生在写作和工程开发与验证中的辛勤与努力,感谢李艾瑾、施玲玲等硕士研究生帮忙校勘,感谢书中所有被引用文献的作者。本书的内容和安排完全是作者的偏好,由于水平有限,书中可能还存在不妥之处,恳请广大读者批评指正。
第1章 深度学习及AI芯片 1
1.1 深度学习研究现状 1
1.1.1 深度学习的概念 1
1.1.2 深度学习和神经网络的发展历程 2
1.1.3 典型的深度神经网络 4
1.1.4 深度学习的典型应用 5
1.2 AI芯片研究现状 10
1.2.1 GPU 10
1.2.2 半制定FPGA 11
1.2.3 全定制ASIC 11
1.2.4 SoC 11
1.2.5 类脑芯片 12
第2章 深度学习开发平台 13
2.1 深度学习平台介绍 13
2.1.1 TensorFlow 13
2.1.2 Caffe 16
2.1.3 Pytorch 17
2.1.4 MXNet 19
2.1.5 CNTK 20
2.1.6 PaddlePaddle 21
2.1.7 Darknet 22
2.2 深度学习平台对比 23
第3章 深度神经网络基础层算子介绍 26
3.1 卷积算子 26
3.2 反卷积算子 29
3.3 池化算子 31
3.3.1 平均池化算子 31
3.3.2 最大池化算子 32
3.4 激活算子 33
3.5 全连接算子 34
3.6 Softmax算子 35
3.7 批标准化算子 36
3.8 Shortcut算子 37
第4章 FPGA基本介绍 39
4.1 FPGA概述 39
4.1.1 可编程逻辑器件 39
4.1.2 FPGA的特点 40
4.1.3 FPGA的体系结构 40
4.2 FPGA系列及型号选择 41
4.2.1 FPGA生产厂家 41
4.2.2 FPGA系列 42
4.2.3 基于应用的FPGA型号选择 44
4.3 FPGA性能衡量指标 44
第5章 FPGA神经网络开发基础 46
5.1 FPGA开发简介 46
5.2 FPGA的结构特性与优势 46
5.3 FPGA深度学习神经网络加速计算的开发过程 48
5.3.1 神经网络模型计算量分析 48
5.3.2 神经网络模型访问带宽分析 51
5.3.3 加速硬件芯片选型 53
5.3.4 加速硬件系统设计 55
5.4 FPGA在深度学习方面的发展 58
第6章 FPGA神经网络计算的RTL级开发 60
6.1 搭建开发环境 60
6.1.1 开发环境的选择 60
6.1.2 开发环境的搭建 61
6.2 RTL级开发的优势与劣势 63
6.3 RTL级开发的基本流程 63
6.3.1 需求理解 65
6.3.2 方案评估 65
6.3.3 芯片理解 65
6.3.4 详细方案设计 68
6.3.5 RTL级HDL设计输入 79
6.3.6 功能仿真 81
6.3.7 综合优化 82
6.3.8 布局布线与实现 82
6.3.9 静态时序分析与优化 83
6.3.10 芯片编程与调试 83
6.4 RTL级神经网络加速设计流程 83
6.5 RTL级神经网络加速仿真 84
6.6 RTL级神经网络加速时序优化 84
第7章 基于FPGA实现YOLO V2模型计算加速实例分析 86
7.1 神经网络基本算子的FPGA实现 86
7.1.1 加速逻辑方案整体设计 86
7.1.2 卷积算子设计 89
7.1.3 全连接算子设计 97
7.1.4 池化算子设计 100
7.2 FPGA YOLO V2的顶层设计 103
7.2.1 YOLO V2模型简介 103
7.2.2 YOLO V2模型结构 105
7.2.3 YOLO V2的FPGA实现设计 107
7.3 FPGA YOLO V2的模块设计 111
7.3.1 卷积 111
7.3.2 YOLO V2偏置、归一化/缩放/激活 114
7.3.3 激活函数 116
7.4 FPGA YOLO V2的系统和RTL仿真 116
7.5 FPGA YOLO V2系统时序优化 118
7.5.1 插入寄存器 118
7.5.2 并行化设计 120
7.5.3 均衡设计 124
7.5.4 减少信号扇出 126
7.5.5 优化数据信号路径 127
7.6 性能对比 128
7.6.1 S10的检测流程 128
7.6.2 检测结果 129
7.6.3 与GPU的性能对比 130
第8章 基于OpenCL的FPGA神经网络计算加速开发 132
8.1 OpenCL基础 132
8.1.1 OpenCL简介 132
8.1.2 OpenCL模型 133
8.1.3 命令事件 140
8.2 OpenCL FPGA开发流程 141
8.2.1 搭建OpenCL开发环境 141
8.2.2 开发流程 144
8.3 OpenCL程序优化 160
8.3.1 数据传输优化 160
8.3.2 内存访问优化 161
8.3.3 数据处理优化 163
8.3.4 其他优化手段 170
8.3.5 矩阵乘法优化实例 170
8.4 OpenCL FPGA实例 176
8.4.1 分类任务 176
8.4.2 目标检测 201
第9章 神经网络压缩与加速技术 221
9.1 神经网络剪枝压缩与权值共享方法 221
9.1.1 神经网络剪枝 222
9.1.2 权值共享 223
9.2 低秩估计 226
9.3 模型量化 227
9.3.1 二值化权重 227
9.3.2 三值化权重 228
9.3.3 二值化神经网络 229
9.3.4 多位神经网络 230
9.4 知识蒸馏 231
参考文献 234