上周,谷歌在论文预印本平台arxiv上发表了其关于TPU v4的深入解读论文《TPU v4: An Optically Reconfigurable Supercomputer for Machine Learning with Hardware Support for Embeddings》(TPU v4:通过光互联可重配置的机器学习超级计算机,搭载硬件嵌入层加速)。
该论文将于今年六月在ISCA 2023(International Symposium on Computer Architecture,计算机架构领域的顶级会议)上正式发表,而目前的预印本无疑为我们提供了可以一窥其全貌的机会。
为了TPU的可扩展性设计专用光学芯片,谷歌也是拼了
从论文的标题可以看到,谷歌TPU v4的一个主要亮点是通过光互连实现可重配置和高可扩展性(也即标题中的“optically reconfigurable”)。
而在论文的一开始,谷歌开门见山首先介绍的也并非传统的MAC设计、片上内存、HBM通道等AI芯片常见的参数,而是可配置的光学互联开关(reconfigurable optical switch)。
作为论文的重中之重,这里我们也详细分析一下为什么光学互联在TPU v4设计中占了这么重要的位置,以至于谷歌甚至为了它自研了一款光学芯片。
TPU v4从一开始设计时,其目标就是极高的可扩展性,可以有数千个芯片同时加速,从而实现一个为了机器学习模型训练而设计的超级计算机。
在谷歌的设计中,超级计算机的拓扑结构为:将4x4x4(64)个TPU v4芯片互联在一起形成一个立方体结构(cube),然后再把4x4x4这样的cube串联在一起形成一个总共有4096个TPU v4的超级计算机。

TPU超级计算机(由4096个TPU v4组成)拓扑结构,图/谷歌
在这样的拓扑中,物理距离较近的TPU v4(即在同一个4x4x4 cube中的芯片)可以用常规的电互联(例如铜绞线)方法连接,但是距离较远的TPU之间(例如在cube之间的互联)就必须使用光互连,原因就在于在如此大规模的超级计算机中,芯片之间的数据互联在很大程度上会决定整体计算的效率;
如果数据互联效率不够高的话,很多时候芯片都在等待来自其他芯片的数据到达以后开始计算,这样就形成了效率浪费。为了避免这样“芯片等数据”的情形出现,就必须确保芯片之间互联能拥有高带宽,低延迟。而光互连对于物理距离较远的芯片就成为了首选。
光互连在高性能计算中的使用也并非新闻,而谷歌在TPU v4中的主要突破是使用可重配置的光互连(即加入光路开关,optical circuit switch OCS)来快速实现不同的芯片互联拓扑。
换句话说,芯片之间的互联并非一成不变的,而是可以现场可重配置的。这样做可以带来许多好处,其中最主要的就是可以根据具体机器学习模型来改变拓扑,以及改善超级计算机的可靠性。
从拓扑结构来说,不同的机器学习模型对于数据流的要求大致可以分为三类,即数据并行(每块芯片都加载整个模型,不同的芯片处理数据集中不同的数据),模型并行(模型中有些层特别大,因此每块芯片只负责这样很大的层中的一部分计算),以及流水线并行(把模型中的不同层交给不同的芯片计算),而不同的数据流就对应了不同的TPU互联拓扑。
当有了可重配置光互连之后,就可以根据具体模型数据流来调整TPU之间的互联拓扑,从而实现最优的性能,其提升可超过2倍。

使用可重配置光互连可以快速切换不同的芯片间互联拓扑,图/谷歌
另一个优势就是可靠性。在这样拥有海量芯片组成的超级计算机中,一个重要的考量就是,如果有一小部分的芯片不工作了,如何确保整体超级计算机仍然能维持较高的性能?如果使用常规的固定互联架构,那么一个芯片出故障可能会影响整个系统工作。
而在有了可重配置的光互连之后,需要做的只需要把出故障的芯片绕过,就不会影响整个系统的工作,最多会牺牲一点整体的性能。
谷歌在论文中给出了一个单芯片故障率和系统平均性能影响的曲线图,在使用可配置光互连(以及光路开关)时,假设芯片可靠率在99%的情况下,其整体系统的平均性能提升比不使用OCS可高达6倍,可见光互连开关的重要性。

系统性能与芯片可靠性曲线图——使用OCS可以大大提升系统性能,图/谷歌
为了实现数据中心级的可配置光互连,需要光路开关首先能高效扩展到超高数量的互联数(例如1000x1000),同时需要实现低开关切换延迟,低成本,以及低信号损耗。
谷歌认为现有的商用方案都不够满意,因此谷歌的做法是自研了一款光路开关芯片Palomar,并且使用该芯片实现了全球首个数据中心级的可配置光互连,而TPU v4就是搭配了这款自研光路开关芯片从架构上实现了高性能。
谷歌自研的光路开关芯片Palomar使用的是基于MEMS反射镜阵列的技术,具体原理是使用一个2D MEMS反射镜阵列,通过控制反射镜的位置来调整光路,从而实现光路的切换。
使用MEMS的光路开关芯片可以实现低损耗,低切换延迟(毫秒级别)以及低功耗。在经过一系列优化之后,光路系统的成本也控制得很低,在整个TPU v4超级计算机成本中占5%以下。

谷歌自研的Palomar MEMS光路开关芯片,图/谷歌
算法-芯片协同设计是TPU v4的灵魂
如果说可重配置光互联给TPU v4提供了良好的根基的话,那么算法-芯片协同设计就是TPU v4的灵魂。算法-芯片协同设计包括两部分,一部分是如何根据算法优化芯片,而另一方面是如何根据芯片去优化算法,在TPU v4的架构中,两者都得到了仔细考虑。
我们首先分析TPU v4如何根据算法来优化芯片。如果说2017年TPU v1发表时候,其主要解决的还是卷积神经网络CNN的话,那么在2023年来看,CNN的加速问题早已经被解决得差不多了,更多的是如何处理目前如日中天的大模型的问题。
对于谷歌来说,目前最关键的大模型就是决定了其公司主营收入的推荐系统大模型,因此TPU v4的设计也针对推荐系统大模型做了相当的优化。
在推荐系统大模型中,目前的加速瓶颈是嵌入层(embedding layer)。嵌入层的目的是将高维度稀疏特征映射到低维度高密度特征,从而该高密度低维度特征可以被神经网络进一步处理。
嵌入层的实现通常是一个查找表(look-up table),而这个查找表可以非常巨大至100GB的数量级。在一个推荐系统模型中可以有多个这样的查找表,从而让整个查找表的存储量达到TB级别。
如此巨大的查找表会需要使用分布式计算,将每一个嵌入层的查找表都分布到多块TPU v4芯片中进行计算。
谷歌在论文中提到,在进行这样的嵌入层计算时,计算是以1D向量计算为主,而非2D矩阵或者3D张量计算;
其次,计算往往是稀疏的(因为输入特征是稀疏的,因此并不是所有特征都会有高密度计算)而且分布在不同的芯片上,因此需要能对于共享存储进行优化,这样不同的芯片可以进行高效的数据交换。
为了实现对于嵌入层优化,谷歌在TPU v4中专门设计了一种专用加速模块,称为稀疏核(SparseCore,SC)。
每个SC都有自己的向量计算单元(scVPU),2.5 MB本地SRAM,以及可以访问高达128TB共享HBM的内存访问接口。
除此之外,SC还有一些专门为嵌入层操作设计的专用加速逻辑,包括排序(Sort)、规约(Reduce)、拼接(Concat)等。
我们可以看到,其实每个SC的结构都较为简单,因此在每个TPU v4中都部署了大量SC,但同时SC总体的面积开销和功耗开销都仅仅占TPU v4的5%左右。
谷歌在论文中比较了使用CPU运行嵌入层(这也是常规运行嵌入层的做法)以及使用TPU v4 SC运行嵌入层,结果表明在运行相同的推荐系统时,相对于把嵌入层在CPU上运行,把嵌入层放在TPU v4的SC上可以把整体推荐系统的运行速度提升6倍以上。
事实上,这也是领域专用设计(domain-specific design)最吸引人的地方,即使用很小的芯片面积和功耗开销,可以得到非常大的性能提升。
而谷歌在TPU v4的设计中把这样的领域专用化设计放到了对于整个公司都最关键的地方(决定谷歌整体收入的推荐系统模型的核心瓶颈嵌入层),从而撬动了非常大的收益。

TPU v4的稀疏核(SC)设计,图/谷歌
除了在芯片层面进行针对算法的优化之外,TPU v4还在分布式计算拓扑层面实现了对于算法的优化。
在前文中我们提到,TPU v4引入可重配置光互连可以针对不同的人工智能模型实现不同的TPU v4之间的互联拓扑,为此谷歌设计了一套机器学习算法来决定如何根据人工智能模型来配置光路开关来提升性能。
分析表明,对于目前最热门的大语言模型(包括GPT-3)的训练,使用机器学习算法查找到的最优TPU光互联拓扑配置可以提升1.2-2.3倍的性能。

图/谷歌
最后,谷歌还为了TPU v4专门设计了一套神经网络架构搜索(NAS)算法,可以根据TPU v4的特性来优化人工智能模型,从而确保经过优化的模型可以最高效地运行在TPU v4上,并且充分利用TPU v4的资源。
与人工优化相比,使用该NAS可以实现推荐系统高达10%的运行时间优化,这大约相当于每年节省数千万美元的成本。
TPU v4与人工智能芯片的未来
从TPU v4的设计中,我们可以看到人工智能芯片未来的一些方向,而这些方向是我们在Nvidia的GPU等其他主流人工智能芯片的设计中也看到的:
首先就是对于高效互联和规模化的支持。随着人工智能模型越来越大,对于这类模型的支持主要依赖人工智能芯片的可扩展性(即如何让多芯片可以高效并可靠地一起分工合作来加速这样的大模型),而不是一味提高单芯片的能力来支持大模型,因为模型的演进总是要比芯片的设计迭代更快。
在这个领域,不同的芯片公司会有不同的侧重,例如AMD侧重较为微观层面的使用chiplet来实现封装级别的可扩展性,Nvidia有NvLink等芯片技术来实现单机多卡之间的可扩展性和性能提升,谷歌则直接为了海量TPU互联设计了一款光路开关芯片;
但是这些公司之间的共性,即对于人工智能芯片可扩展性的支持以满足大模型的需求,却是相当一致的。从这个角度来看,未来可扩展性(例如数据互联带宽)有可能会成为与峰值算力一样的人工智能芯片主要指标,而这也让人工智能芯片设计更加跨界:即不仅仅是需要对于数字逻辑和计算机架构方面的资源,同时也需要在封装、数据互联等领域都有积累。
此外,人工智能芯片与算法之间的结合继续保持紧密关系,算法-芯片协同设计仍然将是未来人工智能芯片继续提升性能的主要手段之一。
我们目前已经看到了谷歌、Nvidia等在算法-芯片协同设计中的大量成果:包括对于新的数制(Nvidia的FP16、FP8,谷歌的BF16等)的支持,对于计算特性的支持(Nvidia对于稀疏计算的支持),以及对于模型关键算法的直接专用加速器的部署(Nvidia的transformer acclerator,谷歌的SC等)。
随着摩尔定律未来越来越接近物理极限,预计未来人工智能芯片性能进一步提升会越来越倚赖算法-芯片协同设计,而另一方面,由于有算法-芯片协同设计,我们预计未来人工智能芯片的性能仍然将保持类似摩尔定律的接近指数级提升,因此人工智能芯片仍然将会是半导体行业未来几年最为热门的方向之一,也将会成为半导体行业未来继续发展的重要引擎。 
图/谷歌
如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail
我正在尝试从googleAPI下载client_secret.json。我正在执行https://developers.google.com/gmail/api/quickstart/ruby中列出的步骤.使用此向导在GoogleDevelopersConsole中创建或选择项目并自动启用API。在左侧边栏中,选择同意屏幕。选择电子邮件地址并输入产品名称(如果尚未设置),然后单击“保存”按钮。在左侧边栏中,选择凭据并点击创建新客户端ID。选择应用程序类型已安装应用程序,已安装应用程序类型为其他,然后单击“创建客户端ID”按钮。点击新客户端ID下的下载JSON按钮。将此文件移动到您的工作
所有技术终将演变为基础设施。2022年6月11日,科创人·数智未来私董会第4期活动在线举办,本次活动由科创人、北航投资、方云智能联合举行;微软(中国)首席技术官韦青担任本期活动主讲嘉宾,携手14位企业高级决策者围绕数智未来课题进行深度探讨。科创人·数智未来私董会第3期活动回顾|《狗尾巴的故事-数智时代的第一性原理》与会嘉宾依次是:微软(中国)CTO韦青、领鹊科技创始人&CEO张志祥、食方科技创始人&CEO黄龚、中科云创创始人&CEO周北川、北航投资总经理王剑飞、中煤信息技术首席专家黄韶杰、天云数据创始人&CEO雷涛、中国农业银行科技与产品管理局信息安全与风险管理处处长何启翱、索迩科技创始人&C
文章目录前言1.AI的发展历程2.我是如何接触到人工智能的概念和产品的3.对于ChatGPT的一点看法4.AI对大学毕业生的职业发展的利与弊5.对于AI的思考和问题前言随着ChatGPT的爆火,生成式AI,大模型的人工智能被越来越多的人注意到,同时他也带来了许多问题。本文将对几方面进行探讨。1.AI的发展历程远古时期在公元前第一个千禧年,中国,印度和希腊哲学家都提出了一些推理的研究理论,比如亚里士多德(Aristotle)进行了演绎推理三段论的完整分析,欧几里得(Euclid)所著Elements是一种形式推理的模型,MuḥammadibnMūsāal-Khwārizmī,发明了代数学,即我们
目录1古彝文与古典保护2古文识别的挑战2.1西文与汉文OCR2.2古彝文识别难点3合合信息:古彝文保护新思路3.1图像矫正3.2图像增强3.3语义理解3.4工程技巧4总结1古彝文与古典保护彝文指的是云南、贵州、四川等地的彝族人使用的文字,区别于现代意义上的彝文,古彝文指的是在民间流通使用的原生态彝文,多达87046字。古彝文的起源距今至少数千年,是世界上最古老的文字之一。对古彝文字集研究有助于理解尚未被翻译成汉文、用字尚未规范化的古籍,更深层、透彻地作用于传统文化保护。古彝文字义对照图(网络资料+邵文苑供图)古籍是不可再生的宝贵资源,应当得到妥善保护。中国的古籍在历史上迭经水火兵燹等自然灾害、
我想用Ruby编写脚本(使用gdatagem、rest-clientgem或直接使用Net::HTTP)使用gmail-userid/password对我的google文档进行身份验证,然后下载私有(private)列表文件和文件。GDatadocuments指南清楚地说明了如何获取公开可见的文档,但不清楚我如何在我的脚本中验证自己的身份以访问私有(private)文档。authenticationmethodstheyspecify所有这些似乎都需要人工干预,要么使用验证码,要么使用某种形式的OAuth/OpenID重定向。有什么方法可以只使用用户名/密码组合来访问我的私有(priv
我想在google上获取特定关键字搜索的所有搜索结果。我已经看到了抓取的建议,但这似乎是个坏主意。我见过Gems(我计划使用ruby)进行抓取并使用API。我还看到了使用API的建议。有谁知道现在最好的方法吗?API不再受支持,我看到有人报告说他们取回了无法使用的数据。Gems是否有助于解决这个问题?提前致谢。 最佳答案 我也选择了抓取选项,它比向谷歌询问key和加号更快,而且您每天的搜索查询不限于100次。正如理查德指出的那样,谷歌的服务条款是一个问题。这是我做过的一个对我有用的例子——如果你想通过代理连接,它也很有用:req
一、概述在之前的一篇博文中,记录了AT24C01、AT24C02芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01/AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序本文记录分享AT24C04、AT24C08、AT24C16芯片的单片机C语言读写驱动程序。二、芯片对比介绍型号容量bit容量byte页数字节/页器件寻址位可寻址器件数WordAddress位数/字节数备注AT24C044k5123216A2A149/1WordAddress使用P0位AT24C088k1024
我正在使用apneadiving/Google-Maps-for-Rails添加googlemaps支持(感谢awesomegem)但是,我发现了一个小故障,这很可能是我的错。当有多个标记时,auto_zoom效果很好。但是,当只有一个标记时,它会放大到不漂亮的最大级别。“缩放”仅在auto_zoom为false时有效,所以这不是我想要的。因此您可以使用“maxZoom”,但现在用户无法手动放大超出该点,这不是我想要的。有解决办法吗?我的解释有道理吗?这是GoogleMapsAPI的限制吗?谢谢... 最佳答案 此行为是由于goog
我想抓取私有(private)谷歌群组的讨论列表。这是一个多页列表,稍后我可能不得不再次这样做,所以编写脚本听起来是个不错的选择。由于这是一个私有(private)群组,我需要先登录我的谷歌帐户。不幸的是,我无法使用wget或rubyNet::HTTP登录。令人惊讶的是,使用ClientLogininterface无法访问谷歌群组,所以所有的代码示例都是无用的。我的ruby脚本嵌入在帖子的末尾。身份验证查询的响应是200-OK,但响应header中没有cookie,正文包含消息“您的浏览器的cookie功能已关闭。请将其打开。”我得到了与wget相同的输出。请参阅此消息末尾的b