AI加速(七)| 存算一体——冰箱里面炒鸡蛋?

点击链接查看全部专栏文章: https://blog.csdn.net/dongtuoc/category_11895363.html

计算机冯诺依曼架构下一个特点,就是存储和计算分离,这会带来一个问题,那就是计算机有时会遇到存储墙,也就是存储带宽不够导致的性能下降。

如果说流水技术可以为此破局,那么其实还有一个大杀器——存算一体技术。

存算一体,简而言之,就是把存储和计算放在一起,直接打破冯诺依曼架构的桎梏。

它是怎么做的呢

还是先从一个例子说起。假设我要做个炒鸡蛋。正常的话我有以下步骤:

  1. 把鸡蛋从冰箱里拿出来

  2. 拿着鸡蛋从冰箱走到灶台 

  3. 在灶台开火,开始炒鸡蛋

这个过程是经典的冯诺依曼架构中的流程。

这里面有一个弊端就是:数据(鸡蛋)需要从存储器(冰箱)中 load(拿)到计算单元(锅)中,然后进行计算(炒鸡蛋)。我们知道,load数据的过程是耗时的,尤其是数据量比较大的情况下。

比方需要炒1000个鸡蛋,一个锅肯定炒不下,需要多次拿鸡蛋,多次炒。

并且拿鸡蛋的速度取决于从冰箱走到灶台的速度,这里就是存储器到计算单元之间的总线带宽,带宽越大,速度越快。

但无论带宽多大,只要是这种架构,总是会有耗时,并且带宽是不可能很大的。

在这个时候,会出现一种极端情况,厨师炒鸡蛋的速度很快,可能1秒钟就炒完了,而从冰箱里拿鸡蛋到灶台,遇到个手脚不灵活的人,可能需要3秒钟。

不论多长时间,只要大于炒鸡蛋的时间,厨师就得等着鸡蛋过来。这个时候就是说,计算单元在空闲,性能瓶颈在带宽,程序打到了存储墙。

所谓存储墙,就是由于存储的数据需要load,但是load的时间很长,像是有一面墙在那里,导致计算单元空闲的情况。

为了解决这个问题,就有人提出,既然这样,那为什么不能把计算单元和存储单元放在一起呢?反正芯片都是人设计的嘛,放在一起就不需要来回搬运数据了啊。

比如,直接把锅做的特别大,大到可以放下1000个鸡蛋,或者说直接在冰箱里面炒鸡蛋,不用来回拿鸡蛋,这样不香么?

别说,还真香。这就是存算一体技术。

存——指的是存储器。

算——指的是计算单元。

两者合为一体,将计算单元和存储单元设计到一起,减少甚至消除数据的搬运。就这一点技术,就能使AI计算的性能得到飞一般的提升。

应用场景

存算一体技术,在AI领域,最有效的场景便是,存储器的内存足够大,可以放得下整个神经网络的权值参数。

举个例子,resnet50的权值参数大概为24MB,AlexNet的权值参数大概为59M,而VGG-16大概有130M的参数量大小。

假设一个存算芯片的容量为40M,那么很明显resnet50的所有参数都可以全部放进存储器,这样在做模型推理的时候,只需要把 feature map(也就是图片,比如人脸识别时,拍摄的人脸照片)加载进内存就能推理出结果了。

相反,VGG-16由于权值参数太多,无法一次全部加载完成,仍然需要分多次加载。并且每次加载都是需要耗时的,此时,存算技术对VGG-16带来的性能提升肯定没有Resnet50高。

因此,存算一体在模型参数小于存储容量的场景下,其性能优势十分明显,可以说,这个时候,没有任何多余的数据搬运操作。

总结

前两天一个同事给我提了个需求,需要开放几个接口给他,我跟他说,这些接口我早就都准备好了,是因为一直没有需求所以没有开放。

需求,会推动产品技术的不断迭代。

冯诺依曼架构,从二战时期被提出来开始影响世界。但随着近年AI的不断发展,对于计算机性能的要求逐步提高,使得人们不得不尝试打破传统,开始创新,并且从学界开始大规模走向工业界。

在如今美国动不动就禁止中国先进芯片工艺的大背景下,存算一体技术,或许也是一条出路,正如中纪委网站上一个关于存算一体公开课上说的那样——

28nm的存算一体芯片,他的能效跟7nm主流的GPU是相当的。

或许随着国内存算一体技术的不断发展,我们真能实现弯道超车,期待那一天早点到来。

猜你喜欢

转载自blog.csdn.net/dongtuoc/article/details/127521184