中文 英语
18lickc新利
的意见

大批量处理是否总能提高神经网络吞吐量?

了解大图像如何与批处理大小相互作用,以确定内存使用情况。

受欢迎程度

常见的基准测试,如ResNet-50,在大批处理时的吞吐量通常比在批处理大小=1时高得多。

例如,Nvidia Tesla T4在批处理=32时的吞吐量是批处理=1模式时的4倍。

当然,更大的批处理大小有一个代价:延迟增加,这在实时应用程序中可能是不可取的。

为什么更大的批次可以提高ResNet-50和其他常见基准测试的吞吐量?
ResNet-50有以下功能:

  • 输入图像224 x 224像素x 3字节(RGB) =约0.05MB
  • 重量22.7MB

推理加速器还需要存储作为模型每一层输出的激活。在ResNet-50这样的模型中,激活只需要暂时保存,因为它们被用于后续层。

在ResNet-50中,最大的激活是0.8MB。通常,之前或之后的一个层将具有一半的激活大小。因此,如果有1.2MB的SRAM用于临时激活存储,那么不需要将激活写入DRAM:这是batch=1的情况。如果所有的激活都必须写入DRAM中,那么当把所有层的激活大小加起来时,这就意味着几乎有10MB的激活被写入,10MB的激活被读入。这意味着用于临时激活的1.2MB片上存储避免了每帧20MB的DRAM带宽。这几乎和22.7MB的权重一样多。

批处理的思想实际上非常简单。如果读取权重限制了性能,那么每次权重可用时都需要处理更多的图像以提高吞吐量。批处理大小为10时,您可以每10张图像读入一次权重,从而将权重加载放缓分散到更多的工作负载中。每个映像需要1.2MB的片上SRAM,临时激活只需要12MB的SRAM, batch=10时无需使用DRAM带宽进行激活。

对于许多架构和SRAM容量来说,加载权重是性能的限制因素。这就是为什么更大的批处理大小对于更高的吞吐量更有意义(尽管它们会增加延迟)。ResNet-50和许多“简单”模型都是如此,因为它们都使用小尺寸的图像。

那么百万像素的cnn呢?
大多数人认为每个模型在更大的批处理规模下都有更高的吞吐量。

然而,这一假设是基于目前大多数芯片引用的通用基准,即ResNet-50、GoogleNet和MobileNet。重要的是要注意,它们的共同点是图像大小都不是真实世界的:224×224或299×299甚至408×408。所有这些甚至比VGA还要小,VGA是一种非常古老的计算机显示标准,640×480。典型的200万像素图像传感器比224×224大40倍。

随着图像大小的增长,权重大小不会改变。然而,中间激活的大小与输入图像大小成比例增长。ResNet-50的任何层的最大激活是0.8MB,但当ResNet-50被修改为200万像素的图像时,最大激活增长到33.5MB。仅对于batch=1,用于激活的片上SRAM存储需要为最大激活的33.5MB加上前导或后导激活的1 / 2 = 50MB。这本身就是一个很大的片上SRAM,比22.7MB的权重还要大。在这种情况下,将权值保留在芯片上并在DRAM中存储至少更大的激活量可能会导致更高的性能。

如果考虑大批处理大小,例如batch=10的ResNet-50在200万像素,则需要500MB的片上SRAM来存储所有临时激活。即使是最大的芯片C也没有足够的SRAM来处理大批量。所有模型的百万像素图像的激活大小都在增加,这就是为什么大批量的百万像素图像不能获得更高的吞吐量。

结论
所有处理百万像素图像的模型使用的内存都与ResNet-50的224×224等微型模型非常不同。权重的比例对应于大图像的激活翻转。为了真正了解推理加速器对于任何具有百万像素图像的CNN的性能如何,供应商需要查看使用百万像素图像的基准测试。明显的行业趋势是更大的模型和更大的图像,因此YOLOv3更能代表推理加速的未来。有效地使用片上存储器将是低成本/低功耗推理的关键。



1评论

Shikha 说:

<<>

为什么SRAM中的1.2 MB在DRAM中变成了10mb写入和10mb读取?(我遗漏了一些东西。)

留下回复


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

Baidu