FPGA异构计算现状及优化

FPGA异构计算现状及优化,第1张

基于FPGA的通用CNN加速设计,可以大大缩短FPGA开发周期,支持业务深度学习算法快速迭代;提供与GPU相媲美的计算性能,但拥有相较于GPU数量级的延时优势,为业务构建最强劲的实时AI服务能力。

WHEN?深度学习异构计算现状

随着互联网用户的快速增长,数据体量的急剧膨胀,数据中心对计算的需求也在迅猛上涨。同时,人工智能、高性能数据分析和金融分析等计算密集型领域的兴起,对计算能力的需求已远远超出了传统CPU处理器的能力所及。

FPGA异构计算现状及优化,FPGA异构计算现状及优化,第2张

异构计算被认为是现阶段解决此计算沟壑的关键技术,目前 “CPU+GPU”以及“CPU+FPGA” 是最受业界关注的异构计算平台。它们具有比传统CPU并行计算更高效率和更低延迟的计算性能优势。面对如此巨大的市场,科技行业大量企业投入了大量的资金和人力,异构编程的开发标准也在逐渐成熟,而主流的云服务商更是在积极布局。

WHY?通用CNN FPGA加速

业界可以看到诸如微软等巨头公司已经部署大批量的FPGA来做AI inference加速,FPGA相较于其他器件的优势是什么呢?

Flexibility:可编程性天然适配正在快速演进的ML算法

DNN、CNN、LSTM、MLP、reinforcement learning以及决策树等等

任意精度动态支持

模型压缩、稀疏网络、更快更好的网络

Performance:构建实时性AI服务能力

相较于GPU/CPU数量级提升的低延时预测能力

相较于GPU/CPU数量级提升的单瓦特性能能力

Scale

板卡间高速互联IO

Intel CPU-FPGA构架

与此同时,FPGA的短板也非常的明显,FPGA使用HDL硬件描述语言来进行开发,开发周期长,入门门槛高。以单独的经典模型如Alexnet以及Googlenet为例,针对一个模型进行定制的加速开发,往往需要数月的时间。业务方以及FPGA加速团队需要兼顾算法迭代以及适配FPGA硬件加速,十分痛苦。

一方面需要FPGA提供相较于CPU/GPU有足够竞争力的低延时高性能服务,一方面需要FPGA的开发周期跟上深度学习算法的迭代周期,基于这两点我们设计开发了一款通用的CNN加速。兼顾主流模型算子的通用设计,以编译器产生指令的方式来驱动模型加速,可以短时间内支持模型切换;同时,对于新兴的深度学习算法,在此通用基础版本上进行相关算子的快速开发迭代,模型加速开发时间从之前的数月降低到现在的一到两周之内。

HOW?通用CNN FPGA架构

基于FPGA的通用CNN加速整体框架如下,通过Caffe/Tensorflow/Mxnet等框架训练出来的CNN模型,通过编译器的一系列优化生成模型对应的指令;同时,图片数据和模型权重数据按照优化规则进行预处理以及压缩后通过PCIe下发到FPGA加速中。FPGA加速完全按照指令缓冲区中的指令集驱动工作,加速执行一遍完整指令缓冲区中的指令则完成一张图片深度模型的计算加速工作。每个功能模块各自相对独立,只对每一次单独的模块计算请求负责。加速与深度学习模型相抽离,各个layer的数据依赖以及前后执行关系均在指令集中进行控制。

FPGA异构计算现状及优化,FPGA异构计算现状及优化,第3张

简单而言,编译器的主要工作就是对模型结构进行分析优化,然后生成FPGA高效执行的指令集。编译器优化的指导思想是:更高的MAC dsp计算效率以及更少的内存访问需求。

接下来我们以Googlenet V1模型为例,对加速的设计优化思路做简单的分析。IncepTIon v1的网络,将1x1、3x3、5x5的conv和3x3的pooling stack在一起,一方面增加了网络的width,另一方面增加了网络对尺度的适应性。下图为模型中IncepTIon的基本结构。

FPGA异构计算现状及优化,FPGA异构计算现状及优化,第4张

数据依赖关系分析

此部分主要分析挖掘模型中可流水化以及可并行化的计算。流水化的设计可以提高加速中的计算单元利用率,并行化的计算可以在同一时刻利用尽量多的计算单元。

关于流水,分析部分包括数据从DDR加载到FPGA片上SRAM的 *** 作与PE进行计算的流水,通过此项优化将内存访问的时间overlap;DSP计算整列的计算控制过程,保证DSP利用率的提升。

关于并行,需要重点分析PE计算阵列与激活、pooling以及归一化等“后处理”模块之间的并行关系,如何确定好数据依赖关系以及防止冲突是此处设计关键。在IncepTIon中,可以从其网络结构中看到,branch a/b/c的1x1的卷积计算与branch d中的pooling是可以并行计算的,两者之间并不存在数据依赖关系。通过此处优化,3x3 max pooling layer的计算就可以被完全overlap。

模型优化

在设计中主要考虑两个方面:寻找模型结构优化以及支持动态精度调整的定点化。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2506023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存