对比GPU,使用FPGA创建神经网络
创始人
2025-07-05 00:50:15
0

当代的CPU按照一维方式进行计算,顺序执行指令,并将算法分解为逐条加载和执行的指令。然而,未来的计算发展趋势表明,我们将越来越多地依赖硬件加速器来支持并行执行,这将成为计算的常态。这种发展趋势将统一算法和硬件结构的利用,从而实现更快、更高效的解决方案。

在这个发展趋势中,支持二维计算的GPU的崛起已经部分实现了这一趋势。GPU具备大规模并行计算的能力,使得许多原本难以并行化的应用程序性能得到大幅提升。

图片图片

【左图】GPU最适合尴尬地并行处理图像处理算法。视频画面流畅。【右图】CPU的串行限制导致明显的延迟和性能不佳。

然而,GPU只能在特定情况下加速特定的算法。未来,通过互连的CPU和各种硬件加速器实现超优化将成为可能。FPGA将成为这个未来的重要组成部分,FPGA允许通过对硬件结构进行编程来实现极度定制化的二维计算。

图片图片

【左图】展示了CPU如何通过串行执行逐个指令来解决问题的过程。【右图】展示了GPU、FPGA和ASIC等硬件加速器如何在空间和时间上进行二维计算。

本文为大家展示如何将一个具体的神经网络用于睡眠追踪,并将其映射到FPGA上。更重要的是演示将硬件映射到算法所需的关键工具,介绍如何实现异构计算。

1 睡眠追踪:铅笔尖上的神经网络

这里制作了一个基于可穿戴FPGA的睡眠追踪器。在这个过程中,建立了一个流水线,能够将最初用Python(Keras)描述的神经网络映射到硅芯片(FPGA)上。从数据采集到神经网络预测,整个睡眠追踪过程完全在一个微小的FPGA上运行,没有处理器参与。

图片图片

在比铅笔尖还小的FPGA上部署了三层前馈神经网络(左图),这些FPGA可以在iCE40 Ultra Wearable Development Platform(右图中绿色圈出)中找到。

利用密歇根大学(Walch等人,2019年的《睡眠》期刊)开发的经过同行评审的算法实现。这是首个开源的睡眠数据集和相应的算法存储库。

使用来自该项目的有标签数据对这里的FPGA神经网络(NN)核心进行了验证。使用的神经网络是一个多层感知器,以加速度计数据、心率和昼夜节律数据作为输入,并以91.3%的整体准确率预测清醒、快速动眼(REM)睡眠和非快速动眼(non-REM)睡眠。

图片图片

FPGA睡眠追踪器的高级架构图。在前端,STM IMU芯片是连接到FPGA的数据源。在后端,可以连接一个主机计算机来读取数据并向睡眠追踪器发送命令。从头开始使用SystemVerilog自己开发了采样器、特征提取器、NN核心和UART核心。这能够实现一个在微小FPGA上可部署的高效解决方案。

构建的参数化定义的FPGA NN核心是独立于供应商的,并且适用于超出此应用范围的其他应用,因为流水线允许在一定约束条件下轻松更新模型形状和参数。

2 可适应加速器上二维算法的未来

如今,部署可适应加速器(如FPGA)是一项高摩擦且耗时的任务。将从今天的实践和未来的改进角度描述FPGA开发的三个方面。

2.1 二维算法将以高级方式(例如Python)进行描述并自动部署

编写FPGA代码是一项神秘的任务,需要不同于数据科学家和大多数软件工程师的专业知识。对于本来可以极大受益于基于FPGA的二维加速的团队来说,这可能成为一道阻碍。能够使用熟悉的高级语言(如Python)描述针对FPGA的算法对于普及FPGA的使用至关重要。FPGA专家也将从这种基础设施带来的主要效率提升中受益。

要在应用中部署一个新的睡眠追踪器网络,用户只需运行一个脚本并轻微修改几个文件。无需具备硬件知识,也无需编写新的SystemVerilog代码。

图片图片

神经网络部署流程使非FPGA专家能够训练新模型并部署到FPGA上。流程的步骤包括训练和导出Keras模型,使用脚本将输出模型解析为FPGA编译器工具链所需的数据,更新顶层FPGA项目文件中的模型常量,然后重新编译FPGA比特流。

这有效的原因在于只允许使用高度约束的模型。未来,更通用的高级综合(HLS)工具,如赛灵思(Xilinx)的Vitis HLS和谷歌的XLS,将允许用户提供要部署到可适应加速器的通用高级算法描述。

2.2 将以Python等语言高效地测试和调试二维算法

仿真、验证和调试是FPGA应用设计过程中关键的部分。这些过程也将从高级接口和工具中得到重大改进。

图片图片

睡眠追踪器应用的顶层测试平台图。能够使用Cocotb和Python进行测试、验证和调试FPGA设计,这是一大福音。Python的异步/等待语法的便利性以及在Python中轻松模拟子组件/导入测试数据的简易性极大地加快了我们的工作。

已经取得了巨大的进展。例如,虽然直接在SystemVerilog中编写了所有组件,但在所有的离设备验证和测试平台(对每个模块和整个睡眠应用)上都使用了Cocotb,而从未离开过Python。借助Cocotb,可以在Python生态系统中使用周期精确的仿真,这对于FPGA验证非常重要,而且对开发人员非常高效。

2.3 Rust将成为连接异构系统的粘合剂

嵌入式工程师常见的情况是在硬件加速器(如FPGA)和主机CPU之间建立通信。这项工作因其繁琐和容易出错而臭名昭著。

在Rust中构建了FPGA睡眠应用程序的设备驱动程序和更高级的Session API。前者实现了自定义数据包协议,而使用后者创建了各种与FPGA睡眠应用程序交互的程序。Rust是一个很好的解决方案,因为其类型系统和静态检查使得编写安全的低级代码和符合人体工程学的高级API变得更加容易。本演讲的后半部分将详细介绍其中一些特性。

相信Rust是将异构计算系统连接在一起的最佳选择。在这个角色中,Rust将提供低级通信的安全性,减少驱动程序的脆弱性,并为算法之间跨硬件边界进行通信提供人体工程学的API。

图片图片

将Rust作为CPU <-> FPGA的粘合剂的展望,包括针对常见I/O类的代码生成设施。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...