中文 英语
18lickc新利
的意见

多层处理提高推理吞吐量/瓦特

如何提高人工智能芯片的性能。

受欢迎程度

在讨论推理吞吐量时,重点通常放在所需的计算上。

例如,YOLOv3,一个强大的实时物体检测和识别模型,需要2270亿个mac(乘法-累加)来处理一个200万像素的图像!这是Winograd变换;如果没有它,将超过3000亿美元。

关于模型所需的大重量也有很多讨论:YOLOv3的重量为6200万。

经常被忽视的是中间激活的大小。

YOLOv3有100多层。

第一层的输入是200万像素的图像:2M x 3 RGB字节= 6mb。

第一层的输出是64MB的激活!

查看所有层的激活大小,我们发现按层输出的激活大小:

1层输出64MB
2层输出32MB
4层输出16MB
15层输出8MB
24层输出4MB
20层输出2MB
8层输出1MB
2层输出0.5MB

因此,如果推理芯片有8MB的片上SRAM用于激活存储,它需要将激活写入DRAM 7层,总共192MB,然后立即读取。

写入DRAM的时间可能很长,可能比执行层的时间还长,在这种情况下,推理引擎会停止工作。

写入DRAM的能量大约是写入本地SRAM的能量的100倍。

这些激活的大小使批处理不吸引人,因为大的存储和功率要求。

多层推理
上面的分析假设每一层在batch = 1时一次处理一步。

如果推理体系结构可以同时处理硬件中的1个以上的层呢?

让我们考虑模型的以下片段:

这是YOLOv3的前两层。

如果用nnMAX推理架构一次做一层,结果如下:

如果用于激活存储的本地SRAM是8MB,那么将大量的激活写入DRAM并从DRAM中读取,这会消耗电力并可能导致推理引擎失速。

如果你可以同时处理硬件中的Layer 0和Layer 1,并且Layer 0的输出直接输入Layer 1,那会怎么样呢?它就像下面这样,消除了64MB写入DRAM和64MB从DRAM读取。

在nnMAX架构中,当有足够的mac(比如4K mac)时,可以实现Layer 0和Layer 1同时运行,其中一个直接馈送到另一个。

这样做的好处是减少了DRAM带宽,降低了功耗,同时提高了吞吐量,因为推理引擎不会失速。

根据mac的数量,更多的层可以同时实现。

对于4K mac和8MB SRAM的nnMAX配置,多层操作的性能比单层配置的性能提高15-20%。

支持多层操作的推理架构将比不支持多层操作的推理架构具有显著的吞吐量/瓦特优势。



留下回复


(注:此名称将公开显示)

Baidu