杰克·埃里克森MathWorks
在边缘应用中有效地实现深度学习推理需要深度学习网络的设计和深度学习处理器的协同。
深度学习HDL工具箱™ 在MATLAB中实现深度学习网络的FPGA原型®.为了提高性能或针对定制硬件,您可以在MATLAB中探索折衷,以收敛到深度学习处理器的定制FPGA实现上。然后一个MATLAB函数驱动HDL Coder™生成一个IP核与目标无关的合成RTL和AXI接口。它还可以选择运行FPGA实现来创建位流,以便在设备上编程深度学习处理器。
深度学习HDL工具箱提供了从MATLAB中进行深度学习推断的FPGA原型,因此您可以在满足FPGA约束的同时快速迭代和收敛于一个能够提供满足系统要求的性能的网络。
但是,如果您想要定制FPGA实现,以提高性能或针对定制板,该怎么办?为此,可以使用MATLAB配置处理器,并驱动HDL编码器生成具有RTL和AXI接口的IP核。
这都是基于深度学习处理器架构,具有通用卷积和全连接模块,所以您可以编程您的定制网络和逻辑,控制哪一层正在运行,以及它的激活输入和输出。由于每一层的参数需要存储在外部DDR存储器中,处理器还包括高带宽存储器访问。
您可以根据您的系统需求定制此深度学习处理器,再加上定制深度学习网络的能力,提供了许多选项来优化应用程序的FPGA实现。
为了说明这一点,我们来看一个应用程序,它使用一个经过训练的系列网络来对徽标进行分类。假设我们需要每秒处理15帧。
所以我们只需加载经过训练的网络。
我们将设置一个自定义处理器配置,所有默认设置和运行在220 MHz。注意卷积模块和全连接模块的数据类型和并行线程的数量。这是默认设置的目标是ZCU102板,这是我们正在使用的。
然后我们将处理器配置应用于一个训练网络的工作流对象
现在,我们可以在部署该定制处理器之前评估其性能。结果是这里的总延迟,在220 MHz时意味着帧速率将略低于每秒6帧,这将无法满足我们的系统要求。
这就是合作的重要性所在,因为我们有选择。假设我们致力于这个董事会。我们的深度学习专家不认为我们可以去除任何层并获得相同的精度,但我们可能能够量化到int8。从32位到8位的单词长度为我们提供了并行执行更多乘法累积的资源。
因此,我们将设置一个新的自定义处理器配置对象,将卷积层和完全连接层都设置为int8,并将每个层的并行线程数增加4倍。
现在,我们需要对网络本身进行量化,以便评估其在深度学习处理器上的性能。您可以在文档中了解有关此过程的更多信息。运行需要一分钟,并为每个层返回给定校准数据存储的数值范围。通常我们会运行更多的校准图像,然后用另一组进行验证,但是…
让我们看看这个新的处理器配置的估计结果——现在我们达到了每秒16帧,这已经足够满足我们虚构的需求了。
从这里开始,buildProcessor函数完成其余的工作。它调用HDL编码器为您配置的处理器生成独立于目标的可合成RTL。若您已经设置了一个参考设计,它将生成一个带有AXI寄存器映射的IP核,这样它就可以直接插入到实现中。如果您已经设置并定义了一个实现工作流,它会一直运行到生成一个位流来对设备进行编程。
我们可以在Vivado中查看实现结果。我们在220 MHz的目标上进行计时,这里显示了资源使用情况。
这显示了深度学习网络的设计和深度学习处理器的实现之间的协作是多么强大,在MATLAB中做正确的事情是多么容易。
您还可以从以下列表中选择网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。