发 帖  
原厂入驻New
[资料] ETPU-Z2全可编程神经网络开发平台
2020-5-18 17:13:24  355 深度学习 FPGA开发 Xilinx
分享
TPU神经网络加速器开发流程
EEP-TPU的开发流程与传统的嵌入式开发流程类似,拥有Host(主机)和Device(从机)两类设备。ETPU的开发流程通常也被分为两部分:神经网络算法开发流程和嵌入式应用开发流程。
神经网络算法的开发通常在Host主机上使用GPU加速完成,其简要的流程如下:开发人员在Host主机上进行算法开发工作(训练);开发(训练)完成后,通过交叉编译的方式,在主机环境下使用交叉编译工具(针对Device从机的编译工具)完成神经网络算法的(从机)可执行文件编译工作;最终通过某种通讯方式完成该可执行文件的下载,从而实现神经网络算法在嵌入式设备端的部署。典型的,Host主机是一台包含GPU的服务器或高性能PC,Device从机是一个ZYNQ/FPGA开发板
另一方面,通常情况下,当落地到具体场景解决某个具体问题时,神经网络算法通常仅是整体解决方案的一小部分,其他的算法和流程需要传统编程模型来实现。因此,当EEP-TPU匹配某种CPU(如ZYNQ的ARM)及其操作系统时(如Linux),该从设备的应用开发就需要按照该CPU及操作系统的环境来执行。一个典型的案例,当EEP-TPU配合运行Linux操作系统的ARM处理器时(如ZYNQ开发板),从设备的应用开发环境需要按照Linux应用开发的环境来部署;另一个典型的案例,当EEP-TPU配合运行Free-RTOS操作系统的RISC-V处理器时,从设备的应用开发环境需要按照Free-RTOS应用开发的环境来部署。
因此,当EEP-TPU配合某个CPU成为嵌入式SoC方案时,EEP-TPU的应用开发流程实际上便成为了基于某个CPU架构在某种操作系统环境下的嵌入式开发流程。目前,EEP-TPU可支持Linux、Free-RTOS、Bare-metal(裸机,无操作系统)三种应用开发环境。嵌入式软件的开发流程在这里就不再详细阐述,具体请参考相关书籍和文档。需要注意的是,EEP-TPU的开发流程与嵌入式从机的CPU架构无关,无论是ARM还是RISC-V,其流程都是相同的。
人工智能应用开发流程
基于EEP-TPU的人工智能应用开发可归纳为以下几个步骤:
(1)准备数据集
在传统的有监督的神经网络算法中,数据集对最终的算法性能起着决定性的关键作用。因此,神经网络算法训练的首要任务,就是实现数据集的搜集工作。
在机器视觉任务中,有监督神经网络算法的数据集由图片及其对应的标注信息组成。其中,图片通常来自实际场景,而对应的标注信息则根据不同的机器视觉任务大致分为三类:(1)分类标注,即该图片属于N类中的哪一类;(2)定位标注,即给出图片中K个物体的标注信息,该信息通常包含坐标(两个顶点的坐标x1,y1,x2,y2)、类别(N类中的哪一类)等;(3)像素分割标注,即给出每个像素点属于N类中的哪一类。
一个合格的数据集,每个种类的数量通常在1k~100k之间。著名的ImageNet数据集包含1000类,每类约1000张,该数据集的图片总数量高达百万。因此,给每张图进行“人工标注”,成为了数据集准备中最为繁杂的一项工作,通常需要耗费大量的人力、时间和金钱。
需要注意的是,在这里,数据集所包含的图片是神经网络算法的输入,而数据集中的标注则是神经网络算法的输出。“人工标注”的过程可以看作一种人“教”机器的过程,也即通过人类的先验知识,把事物在图像中所反映出来的正确属性(如类别、坐标等)变成机器可识别的文本形式,从而使得机器可以在后续的训练过程中使用。
(2)训练
数据集准备完毕后,便可开始算法训练工作,通常情况下,算法训练在Linux环境下使用带GPU的X86架构服务器或高性能PC来完成。
在机器视觉任务中,神经网络算法可以解决的问题大致分为三类:分类、检测、分割。如今,在全球科研机构和大型企业的共同努力下,针对这三类机器视觉任务有无数优秀的开源项目可以参考和使用。例如谷歌所开源的用于分类的Mobilenet算法,Darknet所开源的用于目标检测的YOLO算法,香港中文大学所开源的用于像素级分割的ICNet算法等。
选定参考算法后,另一个重要的任务,就是选择深度学习框架。深度学习框架是一种用于神经网络算法开发的工具,其主要作用,是根据神经网络结构,以数据集中的图片和标注为输入,计算得到与之对应的权重参数。神经网络结构+对应参数便构成了神经网络算法,在应用阶段(部署阶段),输入图片经过神经网络算法的计算便可最终得到与训练集所标注类似的信息,例如该图片输入哪一类物体,或者该图片内含什么物体且每个物体的坐标位置。
当数据集准备完毕(根据深度学习框架的要求转换成对应格式)、神经网络结构准备完毕(以文本形式按照某种语法描述),神经网络算法的训练过程几乎是自动的(约等于执行某个训练命令)。算法开发人员需要根据训练过程中所反映出来的各种数据来决定如何优化和改进神经网络结构,最终达到应用的需求。
当训练完毕后,通常会得到神经网络结构和权重参数两个文件(也可能合成一个文件),这两个文件将会被后续的算法部署阶段使用。
(3)EEP-TPU算法编译
神经网络算法的开发工作通常在X86架构的服务器上完成,而EEP-TPU则是一种与X86完全不同的计算架构。因此,上述训练所得的神经网络结构和权重参数文件,需要按照交叉编译的方式,在X86架构服务器上使用EEP-TPU编译器,把这两个文件编译成为EEP-TPU架构可以识别和使用的文件,这就是EEP-TPU算法编译过程。
EEP-TPU编译器仅支持CAFFE框架所输出的格式,其中神经网络结构由.prototxt为扩展名的文件描述,权重参数由.caffemodel为扩展名的文件描述。EEP-TPU编译器可以直接使用CAFFE输出的.prototxt和.caffemodel两个文件作为输入,从而编译得到EEP-TPU架构所使用的可执行文件(BIN文件),该可执行文件可在后续的嵌入式应用开发中所调用。
(4)EEP-TPU嵌入式应用开发
EEP-TPU张量处理器以知识产权IP的形式可以存在于多种不同的系统中。一个典型案例,在EEP-TPU + ARM CPU组成的SoC系统中,EEP-TPU以加速器的形式存在,专用于执行神经网络算法,而ARM CPU则可以运行Linux操作系统、执行网络任务、维护用户界面等。在这样的基于ARM的CPU系统中,EEP-TPU的应用开发完全遵循ARM嵌入式应用开发的流程和准则。
另一个典型案例,是仅由EEP-TPU组成的ASIC系统,其中EEP-TPU以主控处理器的形式存在,专用于基于某个特定神经网络算法的特定应用。在这样的ASIC系统中,EEP-TPU的应用将按照专用ASIC系统的方式,将特定流程的任务以软件+硬件结合的方式实现。
在特定的嵌入式系统中,EEP-TPU的调用通过特定的API(ApplicationProgram InteRFace)接口来实现,这些API接口通常以C/C++函数的形式存在,并通过静态链接库整合到用户的应用程序中。
(5)嵌入式应用程序的编译
通过调用EEP-TPU的API接口,用户可以在其开发的应用程序中,随时调用EEP-TPU进行神经网络计算,并快速获得结果。当应用程序开发完成后(通常是一个C/C++软件程序),EEP-TPU的调用及底层库都包含在该应用程序中。此时,该C/C++的软件程序需要通过CPU的编译器(如ARM GNU编译器)来完成编译工作,从而获得可以在嵌入式CPU处理器运行的可执行文件。
在这里,需要特别注意的是,在本文所介绍的EEP-TPU开发流程中,有两种不同的编译器,生成两种不同的可执行文件。EEP-TPU编译器用于把神经网络算法转变成嵌入式端神经网络算法可执行文件,CPU编译器用于把C/C++软件转变成嵌入式端应用程序可执行文件。他们之间是相互独立而存在的,也即可在应用程序不变的情况下,通过更换神经网络算法可执行文件来实现算法更新与迭代;也可在神经网络算法不变的情况下,通过更换应用程序可执行文件来实现应用功能的更新与迭代。
(6)下载
获取资料,天津阿吉毕科技有限公司,www.rjibi.com,peter.huang@rjibi.com,联系方式:18910818220
到这里为止,我们所有的开发工作都是在Host主机上完成的,并最终得到两个可执行文件:嵌入式应用程序可执行文件(CPU)和神经网络算法可执行文件(EEP-TPU)。这些可执行文件只能在从设备上(如ZYNQ 7020)运行,因此,需要通过某种方式把该文件拷贝到从设备的特定位置,这就是下载。
根据从设备系统所提供的功能不同,可使用的下载方式多种多样,可通过以太网、USB、UART、SPI等多种形式传输,具体可根据从设备所提供的通讯方式中选择最方便的即可。下载完成后,就可以在从设备上运行该程序,从而实现特定的AI任务了。

1
分享淘帖 显示全部楼层

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发资料
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表