查看原文
其他

基于AWS,搭建云端FPGA深度学习应用

学研妹 Java学研大本营 2024-01-02

介绍FPGA(现场可编程门阵列)技术与深度学习之间的关联。

长按关注《Java学研大本营》

FPGA是一项经历了几十年发展的技术,自1985年首次推出商业产品以来,已经有着广泛的应用。那么,FPGA与深度学习等前沿话题之间存在怎样的关联呢?深度学习中的神经网络作为模拟人脑神经系统的计算模型,与FPGA的灵活性和并行计算能力相辅相成,形成了密切的关联。这种关联不仅体现在技术层面上,而且也与神经网络作为研究领域的发展历史具有潜在的联系。

1 使用非CPU架构的理由

1.1 摩尔定律

过去,计算领域一直由CPU主导,但随着时间的推移,人们对摩尔定律的可持续性产生了越来越多的怀疑。

为了避免芯片过热问题,CPU的时钟速度多年来一直没有显著提升。此外,尽管制程工艺可以制造出更小的特征尺寸,例如英特尔Skylake架构,晶体管的宽度已经缩小到了仅有100个原子的尺度,但我们迟早会面临技术上的限制。这些因素共同促使非CPU架构成为一种更优化的选择。

1. 2 新工作负载

随着新的工作负载的出现,如基因组学、金融计算和深度学习,另一个因素导致对CPU的统治地位产生变革。这些工作负载需要进行大量的数学计算,并且可以从大规模并行计算中获益(例如,利用成千上万个核心)。尽管CPU架构也可以胜任这些任务,但近年来出现了一个非常有竞争力的对手:由Nvidia领导的图形处理单元(GPU)。

2 GPU

典型的GPU配备数千个浮点核心,因此它被视为一台强大的计算机,能够提供适当的硬件并行性。很快,研究人员就学会了如何将这些芯片应用于大规模的机器学习和深度学习任务中。

因此,GPU时代开始了,并一直延续到如Nvidia V100这样的计算怪物被设计出来:它拥有211亿个晶体管,面积为815平方毫米,5120个CUDA核心和640个张量核心。这样的配置应该足够满足任何人的需求了吧?

在计算能力方面,GPU无与伦比。

然而,对于某些应用程序来说,GPU并不是性价比最高的选择。以下是一些不适合使用GPU的原因:

  • 功耗和功耗效率(即每瓦特的TeraOPS):GPU通常需要更多的电力供应和散热,这在嵌入式系统或物联网领域可能是一个问题。

  • 自定义数据类型:GPU主要设计用于处理浮点数计算,但在某些应用程序中,可能需要处理其他类型的数据,如整数、定点数或自定义数据类型。如果应用程序需要处理非浮点数数据类型,GPU的性能可能会受到限制。

  • 不规则的并行性或分歧:某些应用程序展示出不规则的并行性,即存在交替的顺序和并行处理阶段,或者存在分歧,即不是所有核心同时执行相同的代码。然而,GPU的并行性设计主要适用于规则的并行任务,对于不规则的并行性或分歧,可能无法充分利用GPU的优势。

那么,对于深度学习来说呢?对于深度学习而言,GPU在训练方面表现出色。由于其大规模并行性,GPU能够在相对较短的时间内处理大规模数据集,以优化训练过程。为了充分利用GPU的计算核心并提高吞吐量,使用样本批次而不是逐个样本输入模型。

然而,训练只是一部分,还有推理阶段。对于深度学习推理阶段,是否适合使用GPU则取决于具体情况。如果您的应用程序可以接受延迟收集足够的样本以形成完整批次,那么问题不大。但如果无法等待,您将不得不逐个样本进行推理,这可能会影响吞吐量。

为了获得最佳推理性能,下一步逻辑上应该是使用定制芯片。要么构建特定应用集成电路(ASIC),要么使用FPGA。这些定制芯片能够提供更好的推理性能,以满足特定需求。

3 ASIC方式

ASIC是一种完全定制的设计,批量生产并应用于设备。显然,您可以根据自身应用程序的需求进行调整和优化,以获得最佳性能和功耗效率等优势。

然而,设计、生产和部署ASIC是一项漫长、昂贵且充满风险的过程;还有ASIC的不灵活性也是问题:一旦ASIC芯片被设计、生产和部署后,其功能和结构便无法轻易更改,如果您的应用程序需要进行重大变更,将不得不从头开始设计。

4 FPGA方式

FPGA(现场可编程门阵列)正如其名,是可(重新)编程的逻辑电路。一个典型的FPGA包含成千上万甚至数百万个逻辑单元,数千个数字信号处理(DSP)切片,以及极快的片上存储器。

来源:embedded-vision.com

为了简化理解,我们可以将FPGA比作乐高数字架构,类似于乐高积木,通过混合和匹配适当的逻辑块,一个熟练的系统设计师几乎可以构建任何东西。

来源:bober-optosensorik.de

5 构建FPGA应用

以前,要构建FPGA应用程序需要购买昂贵的软件和硬件工具,用于设计、仿真、调试、综合和布线定制的逻辑电路。这些昂贵的工具大大限制了工程的扩展性。此外,为FPGA设计定制的逻辑,还需要掌握诸如VHDL或Verilog等晦涩的编程语言。

幸运的是,现在,开发者可以通过SDAccel环境和OpenCL来使用C/C++构建FPGA应用。SDAccel环境和OpenCL是一种并行计算编程模型,对于已经掌握CUDA开发的人来说,学习和应用SDAccel环境和OpenCL相对容易,他们可以利用已有的并行计算经验和技能进行FPGA应用程序的开发。

6 在AWS上部署FPGA应用

几年前,AWS推出了Amazon EC2 F1实例。

它们依赖于Xilinx Ultrascale+ VU9P芯片。下面是一些规格(PDF):超过250万个系统逻辑单元(规格-PDF)和6,840个DSP切片(规格-PDF)。它很强大!

为了简化FPGA开发,AWS还提供了一个附带完整Xilinx SDx 2017.1工具套件和免费许可的FPGA开发者AMI。该AMI还包括AWS SDK和HDK,以帮助您构建和管理FPGA镜像:两者都是开源的,并且在Github上可用。

整个过程大致如下:

  • 在计算优化的实例(如c4)上使用FPGA开发者AMI,设计、仿真和构建Amazon FPGA镜像(AFI)。

  • 在EC2 F1实例上,使用AWS FPGA SDK加载AFI,并从在CPU上运行的主机应用程序访问它。

7 使用FPGA构建神经网络

神经网络的核心操作是乘法和累加,它将输入与相应的权重相乘,并将结果相加起来。这个过程可以很容易地通过使用DSP切片在FPGA上实现。虽然这只是一个简单的例子,但更复杂的操作,如卷积或池化,也可以在FPGA上实现。

来源:“FPGA Implementations of Neural Networks”,Springer,2006

现代的FPGA具有大量的逻辑门,并且能够支持非常庞大的模型。为了实现更快的速度、更低的延迟和功耗优势,减少逻辑门的使用是非常重要的策略,这样可以提高性能并降低资源消耗。

8 优化FPGA上的深度学习模型

目前有许多正在进行的研究,旨在在最小化精度损失的情况下简化和缩小深度学习模型。其中最流行的三种技术包括:

量化,即使用整数权重(8位、4位甚至2位),而不是32位浮点数。这样可以减少功耗:实现模型所需的门数量减少,整数运算比浮点运算更便宜。还可以减少内存使用,因为我们节省了内存并缩小了模型大小。

修剪,即删除在预测成功方面起到很小或没有作用的连接。计算速度提高,延迟降低。还可以减少内存使用,因为我们节省了内存并减小了模型大小。

压缩,即对权重进行编码,因为它们现在是基于整数的,具有更小的可能值集合。这样可以减少内存使用,因为我们节省了内存并进一步减小了模型大小。

这些优化会使模型缩小到可以在芯片上的静态随机存储器(SRAM)上运行。这将有助于节省更多的功耗(因为SRAM比动态随机存储器(DRAM)更高效),并提高计算速度(因为芯片上的RAM始终比芯片外的RAM访问速度更快)。

9 深度学习硬件

当涉及到深度学习任务时,硬件的发展起着至关重要的作用。以下是对预测和深度学习硬件的综合描述:

  • 深度学习将逐渐成为公共云和物联网的主要工作负载。这意味着深度学习任务将在云平台和物联网设备上得到广泛应用。为了应对这种趋势,需要高性能的深度学习硬件来满足计算需求。

  • 推理任务将比训练任务消耗更多的基础设施资源。推理任务是使用预训练的模型对新数据进行预测或分类的过程。由于推理任务通常需要更高的效率和低延迟,因此需要专门的硬件来加速推理过程。

  • 基于云的GPU将在可预见的未来继续主导训练任务。目前,基于GPU的云计算平台已经成为训练深度学习模型的主要选择。由于GPU在并行计算方面的优势,预计它们将继续在训练任务中发挥重要作用。

  • 基于云的推理任务将成为一场重要的竞争。推理任务的需求也在不断增长,因此云服务提供商和硬件厂商之间将展开激烈的竞争,以提供高效、低延迟的推理解决方案。除了GPU,ASIC等定制化硬件也有潜力在推理任务中发挥重要作用。

  • 对于较小的物联网设备,CPU推理仍然存在。在资源受限的物联网设备中,使用CPU进行推理仍然是一种常见的选择。这些设备通常需要轻量级的推理解决方案,而不需要高度专门化的硬件加速器。

  • 对于较大的物联网设备,我们可能会见证一个以推理为驱动的FPGA复兴。边缘服务器和工业设备需要高效的推理能力,并且对功耗和定制化有更高的要求。FPGA具有灵活性和可定制性,能够提供高效的推理能力,并且在功耗和定制化方面具有优势。

这些预测和描述涉及到深度学习任务的发展趋势以及对不同硬件解决方案的需求。深度学习硬件的发展将在满足训练和推理任务需求的同时,为深度学习应用提供更高的性能和效率。这些预测和描述是基于当前的技术趋势和观察所作出的推测。

推荐书单

《Spring Cloud 微服务快速上手》

《Spring Cloud 微服务快速上手》介绍了当下最主流的属于Spring生态的微服务框架,它继承了Spring Boot的优点,开发部署都非常简单。本书内容全面,介绍了微服务架构的发展历程,包含Spring Cloud Netflix 和 Spring Cloud 阿里巴巴的组件,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。在解读核心组件的实现原理的同时,配以案例进行实践。本书内容包含微服务架构和云原生架构,读者在掌握微服务之后,可以进一步掌握云原生知识。

购买链接:https://item.jd.com/13251159.html

精彩回顾

使用FPGA打造VGA显卡

使用FPGA打造低延迟交易系统的优势与劣势

8个从Java 11到Java17中的功能提升

3个要点,掌握Spring Boot单元测试

10个超级实用的IntelliJ IDEA插件

长按关注《Java学研大本营》
长按访问【IT今日热榜】,发现每日技术热点
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存