杰克·埃里克森,MathWorks
在边缘应用中有效地实现深度学习推理需要深度学习网络的设计和深度学习处理器之间的协作。
深度学习HDL工具箱™ 在MATLAB中实现深度学习网络的FPGA原型®。为了提高性能或针对定制硬件,您可以在MATLAB中进行权衡,以收敛于深度学习处理器的定制FPGA实现。然后,单个MATLAB函数驱动HDL编码器™ 生成具有独立于目标的可合成RTL和AXI接口的IP核。它还可以选择运行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国家/地区网站未针对您所在地的访问进行优化。