Google TPU 揭密

转自:https://mp.weixin.qq.com/s/Kf_L4u7JRxJ8kF3Pi8M5iw

Google TPU(Tensor Processing Unit)问世之后,大家一直在猜测它的架构和性能。Google的论文“In-Datacenter Performance Analysis of a Tensor Processing Unit”让我们有机会一探究竟。

首先让我们看看摘要:

Many architects believe that major improvements in cost-energy-performance must now come from domain-specific hardware. This paper evaluates a custom ASIC—called a Tensor Processing Unit (TPU)—deployed in datacenters since 2015 that accelerates the inference phase of neural networks (NN). The heart of the TPU is a 65,536 8-bit MAC matrix multiply unit that offers a peak throughput of 92 TeraOps/second (TOPS) and a large (28 MiB) software-managed on-chip memory. The TPU’s deterministic execution model is a better match to the 99th-percentile response-time requirement of our NN applications than are the time-varying optimizations of CPUs and GPUs (caches, out-of-order execution, multithreading, multiprocessing, prefetching, …) that help average throughput more than guaranteed latency. The lack of such features helps explain why, despite having myriad MACs and a big memory, the TPU is relatively small and low power. We compare the TPU to a server-class Intel Haswell CPU and an Nvidia K80 GPU, which are contemporaries deployed in the same datacenters. Our workload, written in the high-level TensorFlow framework, uses production NN applications (MLPs, CNNs, and LSTMs) that represent 95% of our datacenters’ NN inference demand. Despite low utilization for some applications, the TPU is on average about 15X - 30X faster than its contemporary GPU or CPU, with TOPS/Watt about 30X - 80X higher. Moreover, using the GPU’s GDDR5 memory in the TPU would triple achieved TOPS and raise TOPS/Watt to nearly 70X the GPU and 200X the CPU.

这段摘要的信息量非常大,我把重点高亮出来了。首先,这个TPU芯片是面向datacenter inference应用。它的核心是由65,536个8-bit MAC组成的矩阵乘法单元(matrix multiply unit),峰值可以达到92 TeraOps/second (TOPS) 。有一个很大的片上存储器,一共28 MiB。它可以支持MLP,CNN和LSTM这些常见的NN网络,并且支持TensorFLow框架。摘要里面还可以看出,传统CPU和GPU使用的技术(caches, out-of-order execution, multithreading, multiprocessing, prefetching)它都没用,原因是它面向的应用都是deterministic execution model,这也是它可以实现高效的原因。它的平均性能(TOPS)可以达到CPU和GPU的15到30倍,能耗效率(TOPS/W)能到30到80倍。如果使用GPU的DDR5 memory,这两个数值可以达到大约GPU的70倍和CPU的200倍。

到此我们可以看出,Google的TPU采用了一个专用处理器或者硬件加速器的架构,比之前的想象的在GPU架构上改进的方法要激进的多,当然这样做实现的效率也高得多。

 

整体架构

上图是TPU的架构框图,按文章的说法,这个芯片的目标是:

“The goal was to run whole inference models in the TPU to reduce interactions with the host CPU and to be flexible enough to match the NN needs of 2015 and beyond, instead of just what was required for 2013 NNs.”

具体的架构信息如下:

“TPU指令通过PCIe Gen3 x16总线从主机发送到指令缓冲区(instruction buffer)。内部模块一般是通过256 bit宽的路径连接在一起的。从右上角开始,矩阵乘法单元(Matrix Multiply Unit)是TPU的核心。它包含256x256 MAC,可以对有符号或无符号整数执行8位乘法和加法。 16位运算结果由下面的4MiB 32bit的累加器处理。 4MiB代表4096个, 256-element, 32-bit累加器。矩阵单元每个时钟周期产生一个256-element的部分和(partial sum)。我们选择了4096,首先是注意到每个字节的操作需要达到峰值性能为大约1350,所以我们将其舍入到2048;然后复制了它,以便编译器可以在峰值运行时使用双缓冲方式。

“当使用8 bit权重(weight)和16 bit激活(activation)(或反之亦然)的混合时,矩阵乘法单元以半速计算,并且当它们都是16bit时以四分之一速度计算。它每个时钟周期读取和写入256个值,可以执行矩阵乘法或卷积。矩阵单元保存一个64KiB的权重块( tile of weights),并使用了双缓冲(这样可以在处理时同时读入权重)。该单元设计用于密集矩阵,而没有考虑稀疏的架构支持(部署时间的原因)。稀疏性将在未来的设计中占有优先地位。

“矩阵乘法单元的权重通过片上的权重FIFO(Weight FIFO)进行缓存,该FIFO从片外8 GiB DRAM读取。由于是用于推论,权重为只读。8 GiB可以同时支持许多模型。权重FIFO的深度是4个tile。中间结果保存在24 MiB片上统一缓冲区(Unified Buffer)中,可以作为矩阵乘法单元的输入。可编程DMA实现和CPU Host内存以及统一缓冲区传输数据。”

下图给出了TPU芯片的布局,可以粗略看出各部分面积的比例。

指令集

按作者的说法,TPU的指令集是CISC类型(TPU instructions follow the CISC tradition),平均每个指令的时钟周期CPI(clock cycles per instruction)是10到20。指令总共应该有10几个,重要的指令如下:

1. Read_Host_Memory reads data from the CPU host memory into the Unified Buffer (UB).

2. Read_Weights reads weights from Weight Memory into the Weight FIFO as input to the Matrix Unit.

3. MatrixMultiply/Convolve causes the Matrix Unit to perform a matrix multiply or a convolution from the Unified Buffer into the Accumulators. A matrix operation takes a variable-sized B*256 input, multiplies it by a 256x256 constant weight input, and produces a B*256 output, taking B pipelined cycles to complete.

4. Activate performs the nonlinear function of the artificial neuron, with options for ReLU, Sigmoid, and so on. Its inputs are the Accumulators, and its output is the Unified Buffer. It can also perform the pooling operations needed for convolutions using the dedicated hardware on the die, as it is connected to nonlinear function logic.

5. Write_Host_Memory writes data from the Unified Buffer into the CPU host memory.

其它指令还包括:

The other instructions are alternate host memory read/write, set configuration, two versions of synchronization, interrupt host, debug-tag, nop, and halt. The CISC MatrixMultiply instruction is 12 bytes, of which 3 are Unified Buffer address; 2 are accumulator address; 4 are length (sometimes 2 dimensions for convolutions); and the rest are opcode and flags.

这是一个非常专用的指令集,主要就是运算和访存指令。从另一个角度也说明了TPU是一个非常专用的处理器。

微结构

首先是最重要的一句话“The philosophy of the TPU microarchitecture is to keep the matrix unit busy”,相信这也是所有设计NN加速器的同学的philosophy。

“TPU为CISC指令使用4级流水线,其中每条指令在单独的阶段中执行。设计是是通过将其它指令的执行与MatrixMultiply指令重叠,来隐藏其他指令的执行时间。为此,Read_Weights指令遵循解耦访问/执行(decoupled-access/execute)原理。它可以在发送地址之后,从权重存储器中取出权重之前就完成。如果输入激活或权重数据尚未就绪,矩阵单元就会暂停(stall)。”

“因为TPU的CISC指令可以占用站数千个时钟周期,这与传统的RISC流水线不同(每个阶段一个时钟周期),所以TPU没有一个很清晰的流水线overlap diagrams。如果一个NN网络的层的激活操作必须在下一层的矩阵乘法开始之前完成,就会发生有趣的情况;我们看到一个“延迟槽”(delay slot),其中矩阵单元会在从Unified Buffer中安全读取数据之前等待显式同步信号( explicit synchronization)。”

由于读取大的SRAM的能耗比算术运算高的多,所以矩阵单元通过减少统一缓冲区的读写来降低能耗,所谓脉动运行(systolic execution)。下图显示了数据从左侧流入,权重从顶部加载。给定的256-element乘累加运算通过矩阵作为对角波前(diagonal wavefront)移动。权重被预加载,并且与新块的第一数据一起在前进波上生效。控制和数据是流水线方式,所以好像给出256个输入是一次读取的,并且它们可以立即更新256个累加器中的每一个的一个位置。从正确性的角度来看,矩阵单元的脉动性对软件的是透明的。但是对于性能,它的延迟是软件需要考虑的因素。

软件

 

“TPU软件栈必须与为CPU和GPU开发的软件栈兼容,以便应用程序可以快速移植到TPU。在TPU上运行的应用程序的一部分通常写在TensorFlow中,并被编译成可以在GPU或TPU上运行的API。像GPU一样,TPU栈分为用户空间驱动程序和内核驱动程序。内核驱动程序是轻量级的,只处理内存管理和中断。它是为长时间的稳定性而设计的。用户空间驱动程序会经常变化。它设置和控制TPU执行,将数据重新格式化为TPU命令,将API调用转换为TPU指令,并将其转换为应用程序二进制文件。用户空间驱动程序在首次evaluate的时候编译模型,缓存程序image并将权重image写入TPU的权重存储器;第二次和以后的evaluate就是全速运行。 TPU从输入到输出完全运行大多数的模型,最大化TPU计算时间与I / O时间的比率。计算通常每次进行一层,重叠执行,允许矩阵乘法单元隐藏大多数非关键路径操作。”

文章后面很大篇幅是介绍TPU和CPU,GPU性能对比的,大家可以仔细看看,有机会再讨论吧。说实话,Google在2015年就能部署这样的ASIC张量处理器,不得不佩服啊。

T.S.

参考:

1. Norman P. Jouppi, et al."In-Datacenter Performance Analysis of a Tensor Processing Unit",accepted by ISCA 2017

转载于:https://www.cnblogs.com/bonelee/p/8317829.html

Google TPU 揭密——看TPU的架构框图,矩阵加乘、Pool等处理模块,CISC指令集,必然需要编译器...相关推荐

  1. 基于论文分析Google的张量处理器TPU

    本文转载自微信公众号CPUinNUDT,由<基于论文分析Google的张量处理器TPU>及<基于论文分析Google的张量处理器TPU(补充)>两篇文章合并而成,如有相关问题, ...

  2. 怎么看电脑系统是win几_一文看懂arm架构和x86架构有什么区别

    一文看懂arm架构和x86架构有什么区别 本文主要介绍的是arm架构和x86架构的区别,首先介绍了ARM架构图,其次介绍了x86架构图,最后从性能.扩展能力.操作系统的兼容性.软件开发的方便性及可使用 ...

  3. 张力柯:从技术演变的角度看互联网后台架构(附视频回顾)

    5月25日,互联网架构技术沙龙圆满落幕.本期沙龙特邀请腾讯的技术专家分享关于技术架构.落地实践案例.无服务器云函数架构.海量存储系统架构等话题,从技术角度看架构发展,为开发者们带来丰富的实践经验内容, ...

  4. 从平台角度看物联网体系架构

    从平台角度看物联网体系架构 一.前言 万物互联时代已经到来,2020年全球物联网连接数将达到300亿个.中国的物联网市场更是飞速发展,随着许多新商业模式的涌现,市场将迎来井喷期.预计2020年物联网连 ...

  5. 从智能合约的演进看 Move 的架构设计

    从智能合约的演进看 Move 的架构设计 智能合约是什么 回顾智能合约的演进 Bitcoin 的智能合约 Ethereum 的智能合约 Ethereum 的问题 Libra Move Move 中的基 ...

  6. 从重大漏洞应急看云原生架构下的安全建设与安全运营(下)

    前言: 前一篇文章"从重大漏洞应急看云原生架构下的安全建设与安全运营(上)"中,我们简要分析了对于重大安全漏洞,在云原生架构下该如何快速进行应急和修复,以及云原生架构对于这种安全应 ...

  7. 华泰证券研究所谢春生:从全球看金融 IT 架构的变化

    10月28日,第四届中国金融科技产业峰会.第三届中新(苏州)金融科技应用博览会在苏州国际博览中心开幕 大会同期举办的博云"云原生应用与实践"分论坛汇集金融行业头部机构与云原生技术领 ...

  8. 从零开始系列(四):一文看懂arm架构和x86架构有什么区别

    从零开始系列(四):一文看懂arm架构和x86架构有什么区别 相关系列文章推荐:   从零开始系列(一):在github上搭建自己的博客   从零开始系列(二):数据库基础篇   从零开始系列(三): ...

  9. 从云网络时延看应用部署架构

    在引出云网络时延这看起来比较专业的话题前,先看几个比较有意思的问题. 人的最快反应速度是多少毫秒? 机器人最快反应速度是多少毫秒? 这样能在介绍云网络时延时让大家有一个时间量级上的感知. 什么是时延 ...

最新文章

  1. 20步打造最安全的Nginx Web服务器
  2. sqoop2增量导入无法指定last value问题解决方法
  3. 水晶报表弹出用户密码输入框问题的解决
  4. CLH锁 、MCS锁
  5. 非你所想:eigrp非等价负载均衡
  6. tomcat基本使用,就是这么简单
  7. WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
  8. Java EE中的配置管理
  9. feign传递多个对象_面向对象
  10. shell第四次练习
  11. 点云质量评估_点云配准中常用的评价指标
  12. JavaScript高级(二)
  13. 十大超级老牌黑客逐个曝光
  14. 2021年烷基化工艺找解析及烷基化工艺考试试卷
  15. ChatGPT开源平替——OpenChatKit(前OpenAI团队打造)
  16. WebRTC学习06----1对1视频通信实例
  17. EI检索的国际会议有这些
  18. Pandas_C3_分组cheat sheet
  19. 理解ASAN的shadow memory和读懂报错信息
  20. 报表汇总工具FineReport中下拉框如何显示多列

热门文章

  1. Nginx基于TCP的四层负载均衡介绍
  2. mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...
  3. 直接访问静态图片_详解nginx和tomcat访问图片和静态页面的配置方法
  4. vsphere服务器虚拟化流程,VMware vSphere服务器虚拟化实验
  5. float布局设置同一行行高一样_布局思想:大事化小、先行后列、见缝插针
  6. 湖北工业大学c语言作业答案,湖北工业大学C语言PPT
  7. mysql执行计划extra为null_MySQL执行计划extra解析
  8. ajax提交表单,导致浏览器卡死
  9. 【408预推免复习】操作系统之虚拟存储器
  10. 【PAT (Advanced Level) Practice】1008 Elevator (20 分)