面向云端深度学习推理的FPGA虚拟化方法与流程

文档序号:20767421发布日期:2020-05-15 19:09阅读:226来源:国知局
面向云端深度学习推理的FPGA虚拟化方法与流程

本发明涉及人工智能虚拟化技术领域,特别涉及一种面向云端深度学习推理的fpga虚拟化方法。



背景技术:

当前正处于人工智能快速发展的时代,深度学习在各种领域扮演着越来越重要的角色。其中,深度神经网络(dnn)的推理任务占据了云端数据中心的大部分深度学习任务负载。在数据中心中使用传统的通用处理器cpu(中央处理器)已无法满足深度学习巨大的算力需求。因此,现在通常使用专用的硬件平台,比如gpu、fpga(现场可编程门阵列)和asic(特定应用集成电路),来加速深度学习算法。得益于fpga对于可编程性、性能和功耗的良好平衡,越来越多的云端服务商,如亚马逊、阿里巴巴和百度等,都开始在数据中心中部署fpga来提供面向dnn推理任务的解决方案。

由于云端的dnn应用具有多任务和动态负载的特点,为了提供灵活可重配置的算力资源来匹配云端的应用特性以最大化整体性能和最小化服务成本,一种常用的方法是实现数据中心算力资源的虚拟化。目前面向神经网络应用的虚拟化方案主要有三种:一是多任务共享一块fpga,通过时分复用的方式在不同任务之间切换。大多数基于指令集架构(isa)的dnn加速器架构都可以通过这种方式实现计算资源的共享。基于isa的dnn加速器通过编译器生成不同任务的指令,在运行时切换指令以在同一个硬件架构上实现多任务的时分复用;二是多任务共享一块fpga,通过空分复用的方式实现多任务的并行。目前基于模板的dnn加速器可以支持空分复用,通过部分重配置的方式将不同的任务加载到fpga的不同区域。三是共享多块fpga,即预先将不同的fpga加载不同dnn的比特流,通过负载平衡的方式将不同dnn的任务请求发送到不同的fpga。当前工业界最先进的解决方案即是采用了这种方式。这种方式几乎不需要对fpga进行重配置,一旦某个fpga的dnn任务确定了,一段时间内便不会再切换,而是通过采用了负载平衡算法的调度器实现dnn任务在多块fpga的运行时调度。采用这种方案的另一个初衷在于一些神经网络的权重,比如循环神经网络(rnn),无法完整地存储在一块fpga上,因而需要多块fpga来存储。

但上述提到的面向神经网络应用的虚拟化方法都存在一些问题。第一种情况中基于isa的dnn加速器的时分复用方式,在大多数情况下用单块fpga去服务单个神经网络推理任务会导致一定程度的性能过剩和资源浪费,使得云端服务商的维护成本提高;第二种情况中基于模板的dnn加速器,对于每一个新任务的编译流程都涉及到硬件架构的重新生成。而硬件比特流的综合实现流程的时间开销往往在数小时以上,这对于云端神经网络应用在毫秒量级的响应时间是无法接受的;第三种共享多块fpga的方式,需要提前对云端神经网络的任务负载有个良好的先验才能确保所有fpga获得一个良好的利用率。此外,随着uram和3dram技术的提出,fpga的片上存储呈现着逐年增大的趋势,大多数神经网络应用如卷积神经网络(cnn)等,都可以用一块fpga存下。因此,第三种方案无法确保在任何情况下都能获得最大化的资源利用率。

基于此,亟待一种方法解决面向深度学习推理应用的fpga虚拟化方案中的资源利用率低和重配置开销高的问题。



技术实现要素:

本发明旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本发明的目的在于提出一种面向云端深度学习推理的fpga虚拟化方法,该方法在确保最大化硬件资源利用率的多任务算力资源共享下,实现运行时的快速动态重配置。

为达到上述目的,本发明实施例提出了面向云端深度学习推理的fpga虚拟化方法,包括以下步骤:通过向基于指令集架构的深度神经网络加速器架构引入两级指令调度器和硬件资源池,构建基于指令集架构的深度神经网络加速器虚拟化架构;根据所述基于指令集架构的深度神经网络加速器虚拟化架构,将完整编译流程划分为静态编译和动态编译;在所述静态编译第一次部署时生成细粒度指令包,当所述动态编译重配置时,对所述细粒度指令包进行整合,快速生成需求指令文件。

本发明实施例的面向云端深度学习推理的fpga虚拟化方法,通过软硬件协同设计的方法,在硬件上对基于isa的加速器架构进行虚拟化拓展,在软件上对编译流程进行再设计,从而在确保最大化硬件资源利用率的多任务算力资源共享下,实现运行时的快速动态重配置。

另外,根据本发明上述实施例的面向云端深度学习推理的fpga虚拟化方法还可以具有以下附加的技术特征:

进一步地,在本发明的一个实施例中,所述两级指令调度器包括第一级指令调度器和第二指令调度器。

进一步地,在本发明的一个实施例中,所述第一级指令调度器用于负责任务级的指令缓存与调度、上下文切换的任务级信息收发,并控制管理所述第二级指令调度器。

进一步地,在本发明的一个实施例中,所述第二级指令调度器用于负责所述硬件资源池中的模块级调度、上下文切换的模块级信息收发和最基本可共享单元的数据同步广播管理。

进一步地,在本发明的一个实施例中,所述硬件资源池用于两种不同粒度的硬件资源共享,其中,第一种为基于多核架构的粗粒度资源共享,第二种为基于多处理单元的细粒度资源共享。

进一步地,在本发明的一个实施例中,在所述静态编译第一次部署时,根据最基本可共享单元的硬件架构和并行度参数来生成所述细粒度指令包。

进一步地,在本发明的一个实施例中,在所述动态编译重配置时,根据动态分配的硬件资源和所述静态编译阶段生成的细粒度指令包,对所述细粒度指令包进行硬件资源绑定、整合和快速性能评估优化,低开销生成部署可用的指令文件。

进一步地,在本发明的一个实施例中,所述细粒度指令包中每个指令包均根据最基本可共享单元的并行度生成。

本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1为根据本发明一个实施例的面向云端深度学习推理的fpga虚拟化方法流程图;

图2为根据本发明基于isa的dnn加速器虚拟化方法中的硬件架构及软件编译,(a)为硬件结构,(b)为软件编译;

图3为根据本发明基于isa的dnn加速器虚拟化的硬件架构结构示意图,其中,(a)为原有的面向单任务、静态负载优化的硬件架构,(b)为在原来基础上引入了两级指令调度器和硬件资源池;

图4为根据本发明基于isa的dnn加速器虚拟化的软件编译实现流程图,其中,(a)为原有的编译流程,输入为dnn模型,编译器根据dnn模型架构和网络参数生成可用于硬件部署的指令文件,(b)为提出的动态-静态编译流程,两个阶段的编译通过细粒度指令包实现交互,最终实现快速动态编译以满足低开销的运行时动态重配置;

图5为根据本发明一个具体实施例中静态方案与虚拟化方案在不同任务到达率下的延时性能对比折线图;

图6为根据本发明一个具体实施例中静态方案和虚拟化方案在不同任务数下的吞吐量对比折线图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

本发明实施例旨在解决面向深度学习推理应用的fpga虚拟化方案中的资源利用率低和重配置开销高的问题。当前常用的三种虚拟化方案中,第一种和第三种会带来硬件资源利用率低的问题。第二种方案可以充分利用fpga的硬件资源,但是引入了过大的动态重配置时间开销。因此,为了同时最大化fpga的资源利用率和最小化运行时的动态重配置时间,本发明实施例分析了现有不同虚拟化方案的优缺点,综合基于isa的dnn加速器无需重生成硬件比特流的特点和第二种方案中空分复用的高效硬件利用率,提出基于isa的dnn加速器架构的神经网络应用虚拟化技术方法。

下面参照附图描述根据本发明实施例提出的面向云端深度学习推理的fpga虚拟化方法。

图1是本发明一个实施例的面向云端深度学习推理的fpga虚拟化方法结构示意图。

如图1所示,该面向云端深度学习推理的fpga虚拟化方法包括以下步骤:

在步骤s101中,通过向基于指令集架构的深度神经网络加速器架构引入两级指令调度器和硬件资源池,构建基于指令集架构的深度神经网络加速器虚拟化架构。

可以理解的是,步骤s101硬件架构的中心思想是在基于isa的dnn加速器架构的基础上添加额外的指令调度器以支持任务间的指令文件调度,并将底层计算资源池化以支持多任务共享,使能dnn加速器对于多任务的支持和计算资源的动态共享。

其中,两级指令调度器包括第一级指令调度器和第二指令调度器。第一级指令调度器用于负责任务级的指令缓存与调度、上下文切换的任务级信息收发,并控制管理第二级指令调度器,第二级指令调度器用于负责硬件资源池中的模块级调度、上下文切换的模块级信息收发和最基本可共享单元的数据同步广播管理。

具体地,如图3所示,两级指令调度器:主要由第一级指令调度器和第二级指令调度器组成:(1)第一级指令调度器是原有架构所不具备的指令调度器,主要负责任务级的指令缓存与调度。同时,第一级指令调度器还会负责上下文切换的任务级信息收发,并控制管理所有的第二级指令调度器;(2)第二级指令调度器与原有架构中的指令调度器功能类似。原有架构的指令调度器完成模块级的指令调度,即负责数据搬运模块、计算模块及下属子模块的控制与调度。同样的,第二级指令调度器主要负责硬件资源池中的模块级调度。除此之外,第二级指令调度器还负责上下文切换的模块级信息收发,以及最基本可共享单元的数据同步广播管理。

其中,硬件资源池用于两种不同粒度的硬件资源共享,其中,第一种为基于多核架构的粗粒度资源共享,第二种为基于多处理单元的细粒度资源共享。

具体地,如图4所示,本发明实施例主要实现了两种不同粒度的硬件资源共享:(1)基于多核架构的粗粒度资源共享。这种共享方式下,最基本的可共享单元为单个dnn的加速器核,每个核都包含了基本的数据搬运模块、计算模块、内存和第二级指令调度器;(2)基于多处理单元(pe)的细粒度资源共享。此处的pe对应计算模块中的基本计算单元,即每个计算子模块都是一个pe阵列。本发明通过将最基本的计算单元pe进行资源池化,相应地将内存中的基本存储单元进行池化,使得多任务可以更加灵活地实现对硬件资源的共享。

在步骤s102中,根据基于指令集架构的深度神经网络加速器虚拟化架构,将完整编译流程划分为静态编译和动态编译。

具体而言,本发明实施例中的软件编译流程主要将原有的“dnn模型—编译器—指令文件”流程中的编译器部分通过动态-静态编译的技术进行了划分,以通过细粒度指令包实现快速的低开销动态重配置技术,其中,划分出耗时较长但是只需要在第一次部署时运行的静态编译流程,主要是根据最基本可共享单元的硬件架构和并行度参数来生成细粒度指令包;划分出在运行时重配置阶段的快速动态编译流程,根据动态分配的硬件资源和静态编译阶段生成的细粒度指令包,对细粒度指令包进行硬件资源绑定、整合和快速性能评估优化,从而以非常低的开销生成部署可用的指令文件。

在步骤s103中,在静态编译第一次部署时生成细粒度指令包,当动态编译重配置时,对细粒度指令包进行整合,快速生成需求指令文件。

进一步地,在本发明的一个实施例中,在静态编译第一次部署时,根据最基本可共享单元的硬件架构和并行度参数来生成细粒度指令包;在动态编译重配置时,根据动态分配的硬件资源和静态编译阶段生成的细粒度指令包,对细粒度指令包进行硬件资源绑定、整合和快速性能评估优化,低开销生成部署可用的指令文件。

进一步地,在本发明的一个实施例中,细粒度指令包中每个指令包均根据最基本可共享单元的并行度生成。

可以理解的是,假设dnn加速器具有输入通道、输出通道和输出图像的高、宽的四种并行度,静态编译器可以选取某一个特定维度对某一网络层按照该维度进行切分,所对应的每个输出特征子图可以依据编译流程生成单个细粒度指令包。由于相邻指令包之间包含了一定的冗余重叠指令,因而在动态编译阶段,需要根据新分配的硬件资源所对应的并行度,对指令包进行整合以删除冗余指令并匹配对应并行度。同时,动态编译阶段需要通过快速评估找到每一层最佳的切分维度,从而确保整合后的指令达到与原有编译流程生成指令相近的性能。

下面在xilinxvu9pfpga和intelxeone5-2653cpu硬件平台上对所设计的基于isa的dnn加速器fpga虚拟化方法进行实验,对发明实施例做进一步说明。

其中,所测试的三种神经网络为vgg-16、resnet-18和mobilenetv1。基于isa的dnn加速器的最小并行度为512操作数/时钟周期(ops/cycle),最大并行度为8192ops/cycle。

本发明实施例首先对软件编译时间开销和神经网络的单次推理延时进行了实验。如表1所示,静态编译流程相比原有编译流程会引入10.6%到35.2%的额外时间开销,但是由于静态编译只需要在第一次部署时运行,这部分时间开销在实际云端系统中是可以忍受的。动态编译时间开销在0.81ms到1.75ms,考虑到指令从ddr传输到dnn加速器的时间,整体的动态重配置时间为0.94ms到2.04ms。对应的三个神经网络的一次推理计算延时范围为6.0ms到219.1ms,因而对应的1ms动态重配置时间是可接受的,符合云端实际系统的响应速度要求。

表1软件编译时间开销和神经网络单次推理延时(ms)

本发明实施例对云端场景下多任务、动态负载的场景进行了单块fpga上基于isa的dnn加速器的虚拟化实现的性能模拟实验。实验中使用泊松分布来模拟不同任务的动态负载,通过改变分布中的lambda参数来控制不同任务的到达率。实验对三种并行度都为8192ops/cycle的实现方案——单个大核的静态方案,8个小核的静态方案和本发明实施例所提出的虚拟化方案,在mobilenetv1网络上对整体延时和吞吐量进行性能对比。

如图5所示,单个大核的静态方案在低到达率的情况下有较好的延时性能,而在高到达率的情况下,由于任务阻塞导致整体延时性能快速下降。多个小核的静态方案在不同到达率下延时性能一致,但无法达到最优性能。而本发明实施例的虚拟化方案在不同到达率情况下都能获得最佳的延时性能。

如图6所示,单个大核的静态方案在多任务情况下的整体吞吐量都较低,而多个小核的静态方案能随着任务数提高以获得吞吐量的提高。相比之下,本发明实施例的虚拟化方案在不同任务量情况下都达到了最佳的吞吐量性能。

根据本发明实施例提出的面向云端深度学习推理的fpga虚拟化方法,在硬件架构方面,在引入小于5%的额外硬件资源开销和小于2%的性能损失的情况下,使得原有仅支持单任务和静态负载的基于isa的dnn加速器能支持多任务并发执行和运行时的资源重配置;在软件编译层面,使得运行时动态重配置的时间开销从原有设计的100ms量级降低到1ms量级,能满足云端神经网络应用的快速响应需求;通过该技术方案的软硬件协同设计,使得在多任务、动态负载的神经网络推理场景下获得1.88倍到2.20倍的吞吐量提升和1.36倍到1.77倍的延时性能提升。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1