1.2 实验设计
结合智能计算系统的软硬件技术栈,本书设计了如图1.1所示的分阶段实验和综合实验。其中,分阶段实验以图像风格迁移作为驱动范例,读者可以通过逐步完成算法实验(第2~3章)、编程框架实验(第4章)、智能编程语言实验(第5章)、深度学习处理器运算器设计实验(第6章)等,点亮知识树(如图1.2所示),开发出实现图像风格迁移的智能计算系统;综合实验(第7章)包括目标检测、文本检测、自然语言处理等不同应用领域的实验,读者可以巩固对相关知识的系统理解和掌握,了解不同应用对智能计算系统的需求,并开发出相应的智能计算系统,进阶为智能计算系统全栈工程师。
针对上述实验,我们首先介绍实验目的和相关背景知识;之后介绍相关实验环境(为了由浅入深地增进读者对智能计算系统的了解,实验环境包括通用CPU平台和DLP平台);接下来通过详细实验步骤引导读者进行实验并给出评估标准;最后,在实验思考部分引导读者进行进阶设计,以加深读者对智能计算系统的全面理解。
图1.2 智能计算系统知识树(见彩插)
第2章介绍如何利用三层全连接神经网络实现手写数字分类的两个实验,包括在CPU平台和DLP平台上实现手写数字分类,以帮助读者深入理解神经网络训练及推断的原理。其中,实验一是CPU平台上的手写数字分类实验,介绍如何使用Python语言实现面向手写数字分类任务的三层全连接神经网络的训练和推断,涉及神经网络基本单元的前向传播和反向传播的计算,基于随机梯度下降法的参数更新,以及神经网络设计优化方法等。实验二是DLP平台上的手写数字分类实验,介绍如何调用DLP上Python语言封装的深度学习函数库pycnml,将实验一中与神经网络前向计算相关的模块移植到DLP平台上,最终在DLP平台上实现手写数字分类。这两个实验将为后续更复杂的实验(如风格迁移等)奠定基础,并让读者对DLP编程和处理效率有初步了解。
第2章知识点:全连接神经网络的正向传播、随机梯度下降法、反向传播,以及设计优化方法,包括网络结构(隐层个数、神经元个数)、激活函数、损失函数等。
第3章介绍与深度学习算法相关的三个实验,包括CPU平台和DLP平台上基于VGG网络的图像分类实验以及非实时风格迁移实验。其中,实验一是CPU平台上基于VGG网络的图像分类实验,使用Python实现VGG网络结构及推断等模块,使用预训练好的模型参数对给定的输入图像进行分类,并分析VGG网络的计算量及性能瓶颈。实验二是DLP平台上的图像分类实验,介绍如何调用pycnml库中的相关接口将实验一中的相关模块移植到DLP平台上,并最终在DLP平台上实现图像分类。实验三是非实时风格迁移实验(对应《智能计算系统》教材的3.6.1节),在实验一的基础上介绍如何利用VGG网络对输入图像进行训练来获得风格化的图像,其中涉及利用VGG网络提取图像特征、计算内容/风格损失、迭代训练来求解风格化图像等。
第3章知识点:卷积神经网络的网络层(包括卷积层、池化层、全连接层、Softmax层等)及其构建,基于VGG的图像分类,基于VGG的非实时风格迁移算法。
第4章介绍与深度学习编程框架相关的四个实验,包括利用编程框架实现图像分类,利用图像转换网络实现实时风格迁移的推断、实时风格迁移的训练,以及自定义TensorFlow的CPU算子。其中,实验一是图像分类实验,介绍如何利用TensorFlow框架实现CPU和DLP两种平台上的图像分类,帮助读者熟悉TensorFlow的编程模型及基本用法。实验二是实时风格迁移的推断实验,介绍如何基于TensorFlow在CPU和DLP平台上分别实现实时风格迁移中图像转换网络的推断过程,并进行性能对比分析。实验三是实时风格迁移的训练实验,介绍如何基于TensorFlow实现图像转换网络的训练,包括损失函数的构建、训练方法的定义等。通过与第3章中使用Python语言实现深度学习算法对比,读者可以体会使用编程框架开发的便利性和高效性。实验四是自定义CPU算子实验,介绍如何在TensorFlow中新增自定义算子,以解决原生编程框架不支持特定算子的问题。
第4章知识点:编程框架TensorFlow的编程模型的基本用法,基于TensorFlow的图像分类以及实时图像风格迁移的推断过程(即VGG网络和图像转换网络的前向传播,包括定义模型计算单元(如卷积层、池化层)和创建网络模型),基于TensorFlow的实时图像风格迁移训练(即模型训练,包括定义损失函数、创建优化器、定义模型训练方法、保存模型),自定义TensorFlow算子。
第5章介绍智能编程语言方面的三个实验,包括BCL算子开发与集成、BCL性能优化、BPL(BANG Python Language)算子开发与集成。其中,实验一是BCL算子开发与集成实验,介绍如何使用智能编程语言BCL定义新的算子以扩展高性能库算子,并将其集成到编程框架中,从而加速实时图像风格迁移。通过该实验,读者可以掌握对高性能库及编程框架进行扩展的能力,并可以根据特定应用场景的需求自主定义DLP算子,以适应智能算法的快速演进。实验二是BCL性能优化实验,以矩阵乘为例,介绍如何使用智能编程语言BCL来充分利用DLP上的计算和存储资源从而实现性能优化。通过该实验,可以掌握DLP平台上使用智能编程语言进行算法性能优化的原理、多核流水优化技术,从而加深对智能计算系统和智能编程语言的理解。实验三是BPL算子开发与集成实验,使用智能编程语言BPL来实现实验一中的算子开发与集成,以进一步提高开发效率。
第5章知识点:智能计算系统抽象架构(包括计算模型、控制模型、存储模型),智能编程模型(包括Kernel函数、编译器支持和运行时支持),智能编程语言基础,面向智能计算设备的高层接口——智能应用编程接口,功能调试接口及工具,性能调优接口及工具。
第6章*以深度学习算法中最核心的卷积运算和矩阵运算为例,介绍如何设计深度学习处理器运算器,包括串行内积运算器、并行内积运算器,以及矩阵运算子单元等。其中,前两个实验分别是串行、并行内积运算器实验,介绍如何使用Verilog HDL(Hardware Description Language,硬件描述语言)编写实现深度学习卷积和全连接层中的内积运算,然后在ModelSim仿真环境下进行仿真验证,并评估内积运算器的性能。实验三是矩阵运算子单元实验,在前两个实验的基础上,介绍如何设计运算子单元的整体结构及其控制单元,使用Verilog编写具体代码并进行仿真验证,评估矩阵运算子单元的性能。第6章的实验供有芯片设计基础的读者选做。
第6章知识点:算法的计算特征分析和访存特征分析、DLP运算器设计、编译调试仿真。
第7章综合实验中介绍了如何在DLP平台上开发目标检测、文本检测和自然语言处理三个不同领域的人工智能应用。通过将智能算法、编程框架、智能编程语言和深度学习处理器的相关知识点串联起来,在智能计算平台上实现应用部署及优化,从而使读者具备融会贯通的智能计算系统设计开发能力。其中,实验一是目标检测实验,介绍面向DLP平台如何实现经典的目标检测算法——YOLOv3网络,并进行性能优化,最终完成在DLP平台上的目标检测应用。实验二是文本检测实验,介绍面向DLP平台如何实现文本检测的代表性算法——EAST网络,并进行性能优化,最终完成在DLP平台上的文本检测应用。实验三是自然语言处理实验,介绍如何实现自然语言处理的代表性算法——BERT网络,并进行性能优化,最终完成在DLP平台上的典型自然语言处理应用——问答系统。
第7章知识点:第2~6章的相关知识点,以及目标检测(基于YOLO网络),文本检测(基于EAST网络),自然语言处理(基于BERT网络)。
书中标*的章节或习题,供读者选做。本书代码示例用“TODO”表示需要读者来实现的内容,如果“TODO”后有2~3行下划线,表示需要补充的代码有多行,可能不止2~3行。代码示例中“...”处不需要补充代码,仅表示不展示该部分的代码。