TensorFlow XLA优化与Memory

TensorFlow XLA优化与Memory

XLA概述

XLA(加速线性代数)是用于优化TensorFlow计算的线性代数的域特定编译器。结果是在服务器与移动平台上的速度,内存使用率与可移植性得到了改善。最初,大多数用户不会从XLA中看到很大的好处,通过使用即时(JIT)编译或提前编译(AOT)的XLA进行试验,针对新硬件加速器尝试XLA。

XLA框架是实验性与积极的开发。尽管现有算子的语义,不太可能发生变化,但预计将增加更多的算子,涵盖重要的用例。

构建XLA

XLA与TensorFlow合作有几个目标:

  • 提高执行速度。编译子图减少短暂算子的执行时间,消除TensorFlowRuntime间的开销,融合流水线算子,减少内存开销,专用于已知张量shape,允许更积极的常量传播。
  • 改善内存使用。分析与调度内存使用情况,原则上消除许多中间存储缓冲区。
  • 减少对自定义算子的依赖。通过改进自动融合低级算子的性能,消除对许多自定义算子的需求,匹配手工融合的自定义算子的性能。
  • 减少移动数据开销。通过提前编译子图。发出可直接链接到另一个应用程序的对象/头文件,消除TensorFlow Runtime。结果可将移动推理的占用空间。减少几个数量级。
  • 提高可移植性。大部分TensorFlow程序,促进硬件编写新的后端程序,不用在硬件上修改运行。与专门针对新硬件的个体单算子的方法形成对比,利用这些算子,需要重写TensorFlow程序。

Memory杂谈(DRAM,SRAM)

一个正常的40nm工艺,一个6T(6 transistors)的SRAM面积是150*0.04*0.04= 0.24um2/SRAM。如果需要一个1Mb的SRAM,面积是1M*0.24um2= 0.24mm2,大概0.5mm*0.5mm。

估算是差不多合理的。40nm的CMOS工艺,feature size是40nm,一个SRAM的面积大概就是120-150F^2,算的是一样的。

memory的面积居然都如此的标准!

为何DRAM比SRAM的面积小很多呢?有不同memory的电路图?

 

 (a) DRAM ; (b) SRAM

上面这个图里,左边是一个DRAM,一个transistor加上一个capacitor,结构相当简单。右图是一个SRAM,中间是交叉连接的两个inverter,组成了一个典型的latch。(latch,一个digital的capacitor),左右两个transistor当做了开关,功能与左图DRAM pass transistor差不多。

memory的面积,SOC里放了一个512MB的SRAM,12nm的工艺下,面积是400mm^2.
尺寸是20mm*20mm。

继续Google:

SRAM vs. DRAM in Computers

表格里CPU一般放的是SRAM,替代DRAM。SRAM用了positive feedback的latch,速度比模拟电路(一个模拟的开关对电容充电)的DRAM要快很多。

SRAM要6个transistor,DRAM才一个transistor,面积小了很多。如果需要很大的memory,DRAM在节约SOC成本占优了。

有很特别的电容,需要一定的阈值与对抗漏电能力,DRAM的工艺,替代传统logic process,特别的 DRAM process。只有三家公司提供DRAM的工艺:美光科技,三星与 SK 海力士。

继续谈成本,Google到了下面这句话:

Logic processes - those used for CPUs - are also more expensive. A logic wafer might cost $3500 vs $1600 for DRAM. Intel's logic wafers may cost as much $5k. That's costly real estate.

 

 

 SRAM的成本压力,CPU上不会集成大的DRAM,把DRAM放在片外。CPU的内部,只有SRAM作为cache,替代主要的memory。

有一种所谓的Memory Hierarchy。类似金字塔形状的结构,最大程度的优化速度与成本。

 

 

 

参考资料

https://zhuanlan.zhihu.com/p/146094598

https://www.zhihu.com/question/285202403/answer/444253962

posted @ 2021-12-08 05:56  吴建明wujianming  阅读(333)  评论(0编辑  收藏  举报