前言
从算法角度看,神经网络分Training(训练)和Inference(推理)两个过程,本书主要讨论Inference过程。从技术类别看,本书主要讨论神经网络硬件,尤其是芯片设计层面的内容,如何训练出优秀的模型、如何设计神经网络加速器的驱动程序和编译器等内容均非本书重点。
本书内容主要分三部分:神经网络的分析、神经网络加速器的设计及具体的实现技术。通过阅读本书,读者可以深入了解主流的神经网络结构,掌握如何从零开始设计一个能用、好用的产品级加速器。
“兵马未动,粮草先行”,在设计神经网络加速器之前,需要对主流的神经网络的结构、常见算子,以及各个算子运算细节有深入的理解。第1章介绍了目前主流图像处理领域神经网络的结构,提取出各个网络的基本块、网络算子及其参数量和运算量,阐述了加速器的编程模型和硬件架构分类。
“程序=数据结构+算法”,第2、3章分别讨论了加速器运算子系统和存储子系统的设计,并对NVDLA、TPU、GPU实现卷积运算的过程进行了详细的推演,以便读者对加速器架构设计有初步的了解。
“加速器设计需要综合能力”,仅靠零碎的灵感和天马行空的创意,设计不出能用、好用的加速器产品。第4~6章用大量篇幅讨论了加速器设计中可能遇到的问题及解决方法。
“生活不止眼前的苟且,还有诗和远方”,在加速器的设计过程中,闭门造车不可取,在埋头苦干的间歇,仰头望望天空和远方,或许有意想不到的收获。第7章对加速器进行盘点,展望了神经网络加速器的未来,希望对读者有所启发。
“一图胜千言”,很多复杂的逻辑用一张图就能轻松解释,很多烦琐的言语用一张图就能直观表达。本书包含100余幅图,希望将讲述的内容清晰地传达给读者。
“一切皆有可能”,本书在讨论具体设计问题时,一般会先给出多种建议,然后筛选出合理的方案,意在传达硬件架构设计的思维方式。很多思维方式不仅限于神经网络加速器,由此及彼,可推而广之。
感谢我的朋友姜君、周焱、王玮琪,他们总是耐心地鼓励和帮助我,我从他们身上学到很多。感谢我的太太张金艳和女儿甄溪,她们也为这本书付出了很多。
阅读本书不需要太多预备知识,需要的是求知探索的勇气和耐心。如果读者有任何问题和建议,欢迎与我联系:rill_zhen@126.com。
甄建勇
2023年3月于上海