面向深度神經(jīng)網(wǎng)絡的特定領域架構(gòu)

隨著AI對算力的需求不斷增長膀斋,以TPU為代表的面向DNN的特定領域架構(gòu)為DNN計算提供了幾十倍的性能提升以及能效優(yōu)化罢维。本文基于谷歌真實業(yè)務場景數(shù)據(jù)咒锻,介紹了TPU相對CPU/GPU的實際性能豁翎、能效指標蝴猪。原文: A Domain-Specific Architecture for Deep Neural Networks

摩爾定律的終結(jié)使人們意識到特定領域架構(gòu)才是計算的未來漓摩。谷歌的張量處理單元(TPU)就是一個開創(chuàng)性的例子裙士,自從2015年首次部署以來,已經(jīng)為超過10億人提供了服務管毙。TPU運行深度神經(jīng)網(wǎng)絡(DNN)的速度比同時代CPU和GPU要快15到30倍腿椎,能效比同類技術(shù)的CPU和GPU高30到80倍。

所有指數(shù)定律都有終結(jié)的時候[26]夭咬。

1965年啃炸,Gordon Moore預測芯片的晶體管數(shù)量將每一兩年翻一番。盡管Communications雜志2017年1月的封面報道認為:"關(guān)于摩爾定律死亡的報道被大大夸大了"卓舵,但摩爾定律確實正在終結(jié)南用。2014年推出的DRAM芯片包含80億個晶體管,而160億個晶體管的DRAM芯片要到2019年才量產(chǎn)掏湾,但摩爾定律預測DRAM芯片的規(guī)模應該會擴大4倍裹虫。2010年的英特爾至強E5微處理器有23億個晶體管,而2016年的至強E5有72億個晶體管融击,與摩爾定律相差2.5倍筑公。半導體技術(shù)仍然在繼續(xù)演進,但比過去慢很多尊浪。

另一個沒那么出名但同樣重要的觀察是Dennard Scaling匣屡。Robert Dennard在1974年發(fā)現(xiàn),當晶體管變小時拇涤,功率密度是不變的耸采。如果晶體管的線性尺寸縮小2倍,那就可以提供4倍的晶體管數(shù)量工育。如果電流和電壓也都縮小2倍,那么功率就會下降4倍搓彻,從而在相同頻率下得到相同的功率如绸。Dennard Scaling在首次被觀察到30年后就結(jié)束了,不是因為晶體管沒有繼續(xù)縮小旭贬,而是因為電流和電壓無法在保證可靠的情況下不斷下降怔接。

計算機架構(gòu)師們利用摩爾定律和Dennard Scaling通過增加資源、采用復雜的處理器設計和內(nèi)存層次結(jié)構(gòu)稀轨,提高指令的并行性扼脐,從而在程序員不知情的情況下提升了性能。不幸的是,架構(gòu)師們最終耗盡了可以有效利用的指令級并行性瓦侮。2004年艰赞,Dennard Scaling的結(jié)束和缺乏更多(有效的)指令級并行性,迫使業(yè)界從單核處理器芯片轉(zhuǎn)向多核處理器肚吏。

重要見解

  • 雖然TPU是特定應用集成電路方妖,但通過支持基于TensorFlow框架編程的神經(jīng)網(wǎng)絡,用以驅(qū)動谷歌數(shù)據(jù)中心的許多重要應用罚攀,包括圖像識別党觅、語言翻譯、搜索和游戲斋泄。
  • 通過利用專門用于神經(jīng)網(wǎng)絡的芯片資源杯瞻,TPU在全球超過10億人日常使用的實際數(shù)據(jù)中心工作負載上比通用計算機提高了30-80倍的性能。
  • 神經(jīng)網(wǎng)絡推理階段通常需要服從嚴格的響應時間限制炫掐,這降低了通用計算機技術(shù)的有效性魁莉,這些計算機通常運行速度較快,但在某些情況下性能不佳卒废。

Gene Amdahl在1967年提出的一個觀點現(xiàn)在來看仍然正確沛厨,這一觀點說明增加處理器數(shù)量帶來的收益會逐漸遞減。Amdahl定律說摔认,并行化的理論速度提升受到任務順序部分的限制逆皮,如果任務的1/8是串行的,即使其余部分很容易并行参袱,而且架構(gòu)師增加能夠增加100個處理器电谣,其速度提升最多是原來性能的8倍。

圖1顯示了過去40年里這三個定律對處理器性能的影響抹蚀。按照目前的速度剿牺,標準處理器基準性能在2038年前不會翻倍。

圖1. 按照Hennessy和Patterson[17]的說法环壤,我們繪制了過去40年32位和64位處理器內(nèi)核每年最高SPECCPUint性能晒来;面向吞吐量的SPECCPUint_rate也反映了類似的情況,并在幾年后逐漸平穩(wěn)郑现。

由于晶體管技術(shù)沒有多大進步(反映了摩爾定律的終結(jié))湃崩,每平方毫米芯片面積的峰值功率在增加(由于Dennard Scaling的終結(jié)),但每芯片功率預算沒有增加(由于電遷移和機械及熱限制)接箫,而且芯片設計師已經(jīng)轉(zhuǎn)向多核(受Amdahl定律的限制)攒读,架構(gòu)師們普遍認為在性能-成本-能耗方面進行重大改進的唯一途徑是特定領域架構(gòu)[17]

云上大型數(shù)據(jù)集和為其提供動力的眾多計算機之間的協(xié)作使機器學習取得了顯著進步辛友,特別是在DNN方面薄扁。與其他領域不同,DNN具有廣泛的適用性。DNN的突破包括將語音識別的單詞錯誤率相對傳統(tǒng)方法降低了30%邓梅,這是20年來最大的進步[11]; 將2011年以來進行的圖像識別比賽的錯誤率從26%降低到3.5%[16][22][34]; 在圍棋中擊敗人類冠軍[32]; 提高搜索排名; 等等脱盲。雖然DNN架構(gòu)只能適用于某個較小的領域,但仍然有許多應用震放。

神經(jīng)網(wǎng)絡以類似大腦的功能為目標宾毒,基于簡單的人工神經(jīng)元: 基于非線性函數(shù)(例如max(0, value))及其輸入的加權(quán)和(weighted sum of the inputs)。這些人工神經(jīng)元按層組織殿遂,一個層的輸出成為下一層的輸入诈铛,DNN的"深度"部分就來自于多層的處理。因為云上大型數(shù)據(jù)集允許通過使用額外的更大的層來捕捉更高層次的模式或概念來建立更精確的模型墨礁,而GPU能夠提供足夠的算力來開發(fā)這些模型幢竹。

DNN的兩個階段被稱為訓練(或?qū)W習)和推理(或預測),類似于開發(fā)和生產(chǎn)恩静。訓練DNN一般需要幾天時間焕毫,但訓練好的DNN可以在幾毫秒內(nèi)完成推理或預測。開發(fā)者選擇層數(shù)和DNN類型(見"深度神經(jīng)網(wǎng)絡的類型")驶乾,訓練決定權(quán)重邑飒。幾乎所有訓練都是以浮點方式進行的,這也是GPU在訓練中如此受歡迎的原因之一级乐。

深度神經(jīng)網(wǎng)絡的類型

目前有三種DNN在谷歌數(shù)據(jù)中心很受歡迎:

  • 多層感知器(MLP, Multi-layer perceptron) 疙咸。對于多層感知器,每個新層都是一組由先前所有輸出(完全連接)的加權(quán)和組成的非線性函數(shù);
  • 卷積神經(jīng)網(wǎng)絡(CNN, Convolutional neural network) 风科。在卷積神經(jīng)網(wǎng)絡中撒轮,后面的每個層是一組來自前一層輸出的空間上鄰近的子集的加權(quán)和的非線性函數(shù),權(quán)重在空間上重復使用; 以及
  • 循環(huán)神經(jīng)網(wǎng)絡(RNN), Recurrent neural network) 贼穆。對于RNN题山,每個后續(xù)層是前一層狀態(tài)的加權(quán)和的非線性函數(shù)的集合。最流行的RNN是長短期記憶(LSTM, long short-term memory)故痊,LSTM的藝術(shù)在于決定要忘記什么顶瞳,以及把什么作為狀態(tài)傳遞到下一層。權(quán)重在不同步驟中被重復使用愕秫。

一個被稱為"量化(quantization)"的步驟將浮點數(shù)轉(zhuǎn)化為足以用于推理的窄整數(shù)(通常只有8位)浊仆。與IEEE 754的16位浮點乘法相比,8位整數(shù)乘法所需能耗和芯片面積可減少6倍豫领,而整數(shù)加法的優(yōu)勢是能耗減少13倍,面積減少38倍[10]舔琅。

表1針對三種類型的DNN分別例舉了兩個例子等恐,代表了2016年谷歌數(shù)據(jù)中心95%的DNN推理工作量,我們將其作為基準。這些DNN通常是用TensorFlow編寫的[1]课蔬,代碼很短囱稽,只有100到1500行。這些例子代表了在主機服務器上運行的較大應用程序的小組件二跋,這些應用程序可能是數(shù)千到數(shù)百萬行的C++代碼战惊,通常是面向最終用戶的,從而需要嚴格的響應時間限制扎即。

表1. 截至2016年7月吞获,6個DNN應用(每種DNN類型2個應用)代表了TPU 95%的工作量。列是DNN名稱; 代碼行數(shù); DNN類型和層數(shù); FC是全連接; Conv是卷積; Vector是二進制運算; Pool是pooling谚鄙,在TPU上做非線性裁剪; 非線性函數(shù); 權(quán)重數(shù); 運算強度; 批量大小; 以及截至2016年7月的TPU應用普及度各拷。多層感知器(MLP)是RankBrain[9]; 長短時記憶(LSTM)是GNM Translate的一個子集[37]; 卷積神經(jīng)網(wǎng)絡(CNN)是Inception和DeepMind AlphaGo[19][32]。ReLU代表Rectified Linear Unit闷营,是函數(shù)max(0, value)烤黍。

如表1所示,每個模型需要500萬到1億權(quán)重傻盟,需要消耗大量時間和資源來訪問(參見"能耗比例")速蕊。為了分攤訪問成本,推理或訓練期間娘赴,通過在獨立示例之間重用相同的權(quán)重從而提高性能规哲。

能耗比例(Energy Proportionality)
熱設計功率(TDP, Thermal design power)影響到電源供應成本,數(shù)據(jù)中心必須在硬件滿功率運行時才能提供足夠的電力和制冷筝闹。然而由于一天中的工作負荷并不相同媳叨,電力成本是基于平均消耗的。Barroso和H?lzle[4]發(fā)現(xiàn)服務器只有在不到10%的時間里是100%繁忙的关顷,因此提出了能耗比例糊秆,認為服務器耗電量應與工作量成正比。圖4中對能耗的估計基于谷歌數(shù)據(jù)中心TDP的一部分议双。


由于工作負載利用率不同痘番,我們測量了運行生產(chǎn)程序CNN0的三臺服務器的性能和功率,然后基于服務器芯片數(shù)量將其歸一化平痰。
上圖顯示汞舱,TPU功率最低,每芯片40W宗雇,但能耗比例很差(谷歌TPU設計時間較短昂芜,無法納入許多節(jié)能功能)。Haswell CPU在2016年有最好的能耗比例赔蒲。在TPU-Haswell組合系統(tǒng)中泌神,CPU的工作量減少了良漱,因此CPU功率也減少了。因此欢际,Haswell服務器加上四個低功耗TPU使用不到20%的額外功率母市,但因為有四個TPU和兩個CPU,運行CNN0比單獨的Haswell服務器快80倍损趋。

TPU的起源患久、架構(gòu)和實現(xiàn)

早在2006年開始,谷歌就考慮在其數(shù)據(jù)中心部署GPU浑槽、現(xiàn)場可編程門陣列(FPGA, , field programmable gate array)或特定應用集成電路(ASIC, application-specific integrated circuit)蒋失。結(jié)論是,少數(shù)可以在特殊硬件上運行的應用可以利用谷歌大型數(shù)據(jù)中心的過剩容量免費實現(xiàn)括荡,而且很難在此基礎上有所改進高镐。這種情況在2013年發(fā)生了變化,當時有一個預測畸冲,即谷歌用戶每天使用3分鐘基于語音識別DNN的語音搜索嫉髓,使谷歌數(shù)據(jù)中心的計算需求增加了一倍,因此使用傳統(tǒng)CPU將會非常昂貴邑闲。于是谷歌啟動了一個高優(yōu)先級項目算行,快速生產(chǎn)用于推理的定制芯片,并購買現(xiàn)成的GPU用于訓練苫耸,其目標是將性價比提高10倍州邢。由于這一任務,只花了15個月的時間就完成了TPU的設計褪子、驗證量淌、制造和部署。

為了降低延遲部署的風險嫌褪,谷歌工程師將TPU設計成I/O總線上的協(xié)處理器呀枢,而沒有與CPU緊密集成,使其能夠像GPU一樣插入現(xiàn)有服務器中笼痛。此外裙秋,為了簡化硬件設計和調(diào)試,主機服務器向TPU發(fā)送指令供其執(zhí)行缨伊,而不是自己獲取摘刑。因此,TPU在概念上更接近浮點單元(FPU, floating-point unit)協(xié)處理器刻坊,而不是GPU枷恕。

谷歌工程師從系統(tǒng)角度優(yōu)化了設計。為了減少與主機CPU的互動谭胚,TPU運行整個推理模型徐块,但不止支持2013年的DNN隶校,還提供了匹配2015年及以后的DNN的靈活性。

圖2是TPU的框圖蛹锰。TPU指令通過PCIe Gen3 x16總線從主機發(fā)送至指令緩沖區(qū),內(nèi)部塊通常由256字節(jié)寬的路徑連接在一起绰疤。從右上角開始铜犬,矩陣乘法單元是TPU的核心,有256×256個MAC轻庆,可以對有符號或無符號整數(shù)進行8位乘法和加法癣猾。16位的乘積被收集在矩陣單元下面的4M字節(jié)32位累加器中,4M代表4,096個256元素的32位累加器余爆。矩陣單元每周期產(chǎn)生一個256元素的部分和纷宇。

圖2. TPU框圖和平面布置圖。主要計算部分是黃色的矩陣乘法單元蛾方,它的輸入是藍色的帶權(quán)重FIFO和藍色的統(tǒng)一緩沖器像捶,輸出是藍色的累加器。黃色的激活單元執(zhí)行非線性功能桩砰。右邊的TPU芯片平面圖顯示藍色存儲器占35%拓春,黃色計算單元占35%,綠色I/O占10%亚隅,紅色控制只占芯片的2%硼莽。在CPU或GPU中,控制部分要大得多(而且更難設計)煮纵。

矩陣單元權(quán)重通過片上"權(quán)重FIFO"分階段進行懂鸵,該FIFO從我們稱之為"權(quán)重存儲器"的片外8GB字節(jié)DRAM讀取。對于推理行疏,權(quán)重是只讀的匆光,8GB字節(jié)支持許多同時活躍的模型。權(quán)重FIFO的深度為4層隘擎,中間結(jié)果被保存在24M字節(jié)的片上"統(tǒng)一緩沖區(qū)"中殴穴,可以作為矩陣單元的輸入』踉幔可編程DMA控制器將數(shù)據(jù)傳入或傳出CPU主機存儲器和統(tǒng)一緩沖區(qū)采幌。為了能夠在大規(guī)模可靠部署震桶,內(nèi)外部存儲器內(nèi)置了硬件錯誤檢測和糾正功能休傍。

TPU微架構(gòu)背后的理念是讓矩陣單元保持忙碌。為了達到這個目的蹲姐,讀取權(quán)重的指令遵循解耦訪問/執(zhí)行的理念[33]磨取,因此可以在發(fā)送地址后以及從權(quán)重存儲器獲取權(quán)重前完成人柿。如果沒有活躍輸入或權(quán)重數(shù)據(jù)沒有準備好,矩陣單元將暫停執(zhí)行忙厌。

由于讀取大型靜態(tài)隨機存取存儲器(SRAM, static random-access memory)比計算的能耗更大凫岖,矩陣單元通過"收縮執(zhí)行(systolic execution)",即通過減少統(tǒng)一緩沖區(qū)的讀寫來節(jié)省能耗[23]逢净,因此依賴不同來源的數(shù)據(jù)以固定時間間隔到達陣列單元哥放,并將其合并。體現(xiàn)為給定65,536個元素的向量矩陣乘法操作以對角線波陣的形式在矩陣中移動爹土。權(quán)重被預先加載甥雕,并隨著新區(qū)塊的第一個數(shù)據(jù)的推進波生效≌鸵穑控制和數(shù)據(jù)是流水線式的社露,這給程序員一種錯覺,即256個輸入被一次性讀取琼娘,并立即更新256個累加器中的一個位置峭弟。從正確性的角度來看,軟件不知道矩陣單元的收縮性轨奄,但為了性能孟害,必須考慮單元的延遲。

TPU軟件堆棧必須與那些為CPU和GPU開發(fā)的軟件兼容挪拟,以便應用程序可以快速移植到TPU上挨务。在TPU上運行的那部分應用程序通常是用TensorFlow編寫的,并被編譯成可以在GPU或TPU上運行的API[24]玉组。

CPU, GPU, TPU平臺

大多數(shù)架構(gòu)研究論文都基于模擬運行小型谎柄、容易移植的基準測試,預測可能的性能惯雳。本文不是這樣朝巫,而是對2015年以來在數(shù)據(jù)中心運行的真實大型生產(chǎn)工作負載的機器進行回顧性評估,其中一些機器由超過10億人常規(guī)使用石景。如表1所示劈猿,這6個應用代表了2016年TPU數(shù)據(jù)中心95%的使用量。

由于我們要測量的是生產(chǎn)工作負載潮孽,所以比較的基準平臺也必須可以部署在谷歌數(shù)據(jù)中心揪荣,和生產(chǎn)工作負載運行環(huán)境一致。谷歌數(shù)據(jù)中心的大量服務器和大規(guī)模應用的可靠性要求意味著機器必須至少能對內(nèi)存錯誤做出檢查往史。由于Nvidia Maxwell GPU和最近的Pascal P40 GPU不檢查內(nèi)部內(nèi)存錯誤仗颈,因此沒法滿足谷歌大規(guī)模部署的嚴格可靠性要求。

表2顯示了部署在谷歌數(shù)據(jù)中心的服務器椎例,用于與TPU進行比較挨决。傳統(tǒng)CPU服務器的代表是英特爾的18核雙插槽Haswell處理器请祖,這個平臺也是GPU或TPU的主機服務器,谷歌工程師在服務器中使用四個TPU芯片脖祈。

表2. 基準服務器采用Haswell CPU毕源、K80 GPU和TPU乒疏。Haswell有18個核心陪蜻,K80有13個處理器仿村,GPU和TPU使用Haswell服務器作為主機。芯片工藝單位是nm或舞。TDP代表熱設計功率; TOPS/s是10^12次操作/秒; 內(nèi)存帶寬是GB/s。TPU芯片的大小不到Haswell芯片的一半蒙幻。
表3. 2015年至2017年映凳,Nvidia GPU發(fā)布與云計算部署之間的差距[5][6]。GPU的世代是Kepler邮破、Maxwell诈豌、Pascal和Volta。

一些計算機架構(gòu)師對于從公布產(chǎn)品直到芯片抒和、板卡和軟件都準備好并能可靠服務于數(shù)據(jù)中心客戶所需要的時間沒有概念矫渔。表3指出,從2014年到2017年摧莽,商業(yè)云公司部署GPU的時間差是5到25個月庙洼。因此,與2015年的TPU相比镊辕,對應的GPU顯然是Nvidia K80油够,它采用相同的半導體工藝,并在TPU部署前六個月發(fā)布征懈。

每塊K80卡包含兩個芯片石咬,并在內(nèi)部存儲器和DRAM上內(nèi)置了錯誤檢測和糾正功能。每臺服務器最多可以安裝8個K80芯片卖哎,這就是我們的基準配置鬼悠。CPU和GPU都使用大型芯片封裝,大約為600mm^2亏娜,是Core i7的三倍焕窝。

性能: Roofline模型, 響應時間, 吞吐量

為了說明上述6個應用在3類處理器上的性能,我們采用了高性能計算(HPC, high-performance computing)中的Roofline性能模型[36]照藻。雖然不是完美的視覺模型袜啃,但可以洞察到性能瓶頸的原因。該模型背后的假設是幸缕,應用不適合在片上緩存群发,所以要么計算受限晰韵,要么內(nèi)存帶寬受限。對于HPC來說熟妓,Y軸是每秒浮點運算的性能雪猪,因此峰值計算率構(gòu)成了屋頂?shù)钠教共糠帧軸是計算強度(operational intensity)起愈,以每個浮點操作訪問的DRAM字節(jié)來衡量只恨。由于(FLOPS/s)/(FLOPS/Byte)=Bytes/s,因此內(nèi)存帶寬的單位是字節(jié)/秒抬虽,從而構(gòu)成屋頂?shù)男泵娌糠止倜佟H绻麤]有足夠的計算強度,程序就會受到內(nèi)存帶寬的限制阐污,停留在屋頂?shù)男泵娌糠帧?/p>

應用實際的每秒操作數(shù)與其上限之間的差距顯示了在不觸及計算強度的情況下進一步調(diào)整性能的潛在好處休涤,增加計算強度的優(yōu)化(如緩存模塊化)可能會實現(xiàn)更好的性能。

為了將Roofline模型應用于TPU笛辟,當DNN應用被量化時功氨,首先用整數(shù)運算取代浮點運算。由于權(quán)重通常不適用于DNN應用的片上存儲器手幢,第二個變化是重新定義計算強度為每字節(jié)讀取權(quán)重的整數(shù)乘積操作捷凄,如表1所示。

圖3顯示了TPU围来、CPU和GPU在對數(shù)尺度上的單芯片Roofline模型跺涤。TPU的屋頂有很長的傾斜部分,計算強度意味著性能受限于內(nèi)存帶寬监透,而不是峰值計算量钦铁。6個應用中有5個無法觸及上線,MLP和LSTM受內(nèi)存限制才漆,而CNN受計算限制牛曹。

圖3. TPU、CPU和GPU的Roofline合并成一個對數(shù)圖醇滥。星形代表TPU黎比,三角形代表K80,圓形代表Haswell鸳玩。所有TPU的星星都處于或高于其他兩個Roofline阅虫。

與圖3的TPU相比,6個DNN應用普遍低于其在Haswell和K80的上限不跟,原因是由于響應時間颓帝。這些DNN應用中有許多是面向終端用戶服務的,研究人員已經(jīng)證明,即使是響應時間的小幅增加也會導致客戶減少使用服務购城。雖然訓練可能沒有嚴格的響應時間限制吕座,但推理通常會有,或者說推理更傾向于延遲而不是吞吐量[28]吴趴。

例如,按照應用開發(fā)者的要求侮攀,MLP0的P99響應時間限制為7ms锣枝。(每秒的推理和7ms的延遲包含服務器主機和加速器的執(zhí)行時間)。如果放寬響應時間限制兰英,Haswell和K80的運行速度分別只有MLP0可實現(xiàn)的最高吞吐量的42%和37%撇叁。這些限制也影響到了TPU,但在80%的情況下畦贸,其運行速度更接近TPU的最大MLP0吞吐量税朴。與CPU和GPU相比,單線程TPU沒有任何復雜的微架構(gòu)特性家制,這些特性消耗晶體管和能量來改善平均情況,但不是99%的情況泡一。也就是說颤殴,沒有緩存、分支預測鼻忠、失序執(zhí)行涵但、多處理、投機預取帖蔓、地址凝聚矮瘟、多線程、上下文切換等等塑娇。極簡主義是特定領域處理器的一大美德澈侠。

表4顯示了每個芯片的相對推理性能的底線,包括兩個加速器與CPU的主機服務器開銷埋酬,顯示了6個DNN應用的相對性能加權(quán)平均值哨啃,表明K80芯片的速度是Haswell芯片的1.9倍,而TPU芯片的速度是其29.2倍写妥,因此TPU芯片的速度是GPU芯片的15.3倍拳球。

表4. K80 GPU芯片和TPU芯片相對于CPU的DNN工作負載性能。加權(quán)平均值基于表1中6個應用的實際組合珍特。
性能開銷(Cost-Performance), TCO, 每瓦性能(Performance/Watt)

當購買大量計算機時祝峻,性能開銷勝過性能。數(shù)據(jù)中心的最佳成本指標是總擁有成本(TCO, total cost of ownership)。如谷歌這樣的組織為成千上萬的芯片支付的實際價格取決于相關(guān)公司之間的談判莱找,由于商業(yè)機密的原因酬姆,我們無法公布這類價格信息或可能用于推導這類信息的數(shù)據(jù)。然而宋距,功率與總擁有成本相關(guān)轴踱,而且我們可以公布每臺服務器的功率,所以我們在這里使用每瓦性能(performance/Watt)作為性能/TCO的代表谚赎。我們在本節(jié)中比較了整個服務器淫僻,而不是單個芯片。

圖4顯示了K80 GPU和TPU相對于Haswell CPU的平均每瓦性能壶唤。我們提出了兩種不同的每瓦性能計算方法雳灵。第一種"總量",在計算GPU和TPU的每瓦性能時包含主機CPU服務器消耗的功率闸盔。第二種"增量"悯辙,從GPU和TPU中減去主機CPU服務器的功率。

圖4. GPU(藍色)迎吵、TPU(紅色)與CPU的相對每瓦性能躲撰,以及TPU與GPU(橙色)的相對每瓦性能(TDP)。TPU′是使用K80的GDDR5內(nèi)存的改進型TPU击费。綠色條顯示了改進后的TPU與CPU的每瓦性能比率拢蛋,淡紫色條顯示了與GPU的比率∧韫總量包含主機服務器功率谆棱,增量不包含主機功率。

就每瓦總性能而言圆仔,K80服務器是Haswell的2.1倍垃瞧。就每瓦增量性能而言,如果忽略Haswell服務器的功率坪郭,K80服務器是Haswell的2.9倍个从。TPU服務器的每瓦總性能比Haswell高34倍,使得TPU服務器的每瓦性能是K80服務器的16倍歪沃。TPU的相對每瓦增量性能(谷歌定制ASIC的理由)是83倍信姓,從而使TPU的每瓦性能達到GPU的29倍。

另一種TPU替代方案的評估

與FPU一樣绸罗,TPU協(xié)處理器也比較容易評估意推,所以我們?yōu)?個應用建立了性能模型,模型結(jié)果與硬件性能計數(shù)器之間的差異平均不到10%珊蟀。

如果我們有超過15個月的時間菊值,就可以用同樣的工藝技術(shù)來設計一款新芯片TPU'外驱,我們用性能模型來評估這款理論上的芯片。更積極的邏輯合成和模塊設計仍然可以將時鐘頻率提高50%腻窒。就像K80那樣為GDDR5內(nèi)存設計一個接口電路昵宇,可以將加權(quán)內(nèi)存帶寬提高5倍以上,將其roofline最高點從1350降到250儿子。

將時鐘速度提高到1050MHz瓦哎,但不改善內(nèi)存,這樣影響不會太大柔逼。而如果我們將時鐘速度保持在700MHz蒋譬,但使用GDDR5(雙數(shù)據(jù)率5型同步圖形隨機存取存儲器)作為加權(quán)存儲器,加權(quán)平均值就會跳到3.9愉适。做到這兩點并不改變平均值犯助,所以理論上的TPU'只是擁有更快的內(nèi)存。

僅僅用K80一樣的GDDR5內(nèi)存替換DDR3加權(quán)內(nèi)存维咸,需要將內(nèi)存通道的數(shù)量增加一倍剂买,達到四個,這一改進將使芯片尺寸擴大約10%癌蓖。因為每臺服務器有四個TPU瞬哼,GDDR5還將使TPU系統(tǒng)的功率預算從861W增加到大約900W。

圖4報告了TPU的每芯片的每瓦相對總性能租副,比Haswell躍升86倍坐慰,比K80躍升41倍。增量指標相對Haswell達到驚人的196倍附井,相對K80高達68倍。

討論

本節(jié)遵循Hennessy和Patterson的謬誤-易犯錯誤-反駁(fallacy-and-pitfall-with-rebuttal)模式[17]:

謬誤(Fallacy)两残。數(shù)據(jù)中心的DNN推理應用重視吞吐量和響應時間永毅。 我們感到驚訝的是,由于有人在2014年提出人弓,批量大小足以使得TPU達到峰值性能(或者對延遲要求不那么嚴格)沼死,因此谷歌TPU開發(fā)人員對響應時間有著強烈的要求。其中一個驅(qū)動應用是離線圖像處理崔赌,谷歌開發(fā)人員的直覺是意蛀,如果交互業(yè)務也想要TPU,大多數(shù)人只會積累更大的批處理健芭。即使到2014年某個關(guān)心響應時間的應用(LSTM1)的谷歌開發(fā)人員也說县钥,限制是10ms,但在實際移植到TPU時縮減到了7ms慈迈。許多這樣的服務對TPU的意外需求若贮,加上對快速響應時間的影響和偏好,改變了平衡,應用開發(fā)者往往選擇減少延遲谴麦,而不是等待積累更大的批次蠢沿。幸運的是,TPU有一個簡單匾效、可重復的執(zhí)行模型舷蟀,以幫助滿足交互業(yè)務的響應時間目標,以及高峰值吞吐量面哼,即使是相對較小的批次規(guī)模野宜,也能帶來比當代CPU和GPU更高的性能。

謬誤(Fallacy)精绎。K80 GPU架構(gòu)非常適合DNN推理速缨。 我們看到5個具體原因,即TPU在性能代乃、能耗和成本方面都比K80 GPU更有優(yōu)勢旬牲。首先,TPU只有一個處理器搁吓,而K80有13個原茅,用單線程更容易達到嚴格的延遲目標。其次堕仔,TPU有非常大的二維乘法單元擂橘,而GPU有13個較小的一維乘法單元。DNN的矩陣乘法強度適合排列在二維陣列中的算術(shù)邏輯單元摩骨。第三通贞,二維數(shù)組還能實現(xiàn)系統(tǒng)化,通過避免寄存器訪問來提高能源效率恼五。第四昌罩,TPU的量化應用使用K80上不支持的8位整數(shù),而不是GPU的32位浮點數(shù)灾馒。較小的數(shù)據(jù)不僅提高了計算的能源效率茎用,而且使加權(quán)FIFO的有效容量和加權(quán)存儲器的有效帶寬翻了兩番。(這些應用經(jīng)過訓練睬罗,盡管只使用8位轨功,卻能提供與浮點數(shù)相同的精度)。第五容达,TPU省略了GPU需要但DNN不使用的功能古涧,因此縮小了芯片面積,節(jié)省了能源花盐,并為其他升級留出了空間蒿褂。TPU芯片的尺寸幾乎是K80的一半圆米,通常以三分之一的功率運行,但包含3.5倍內(nèi)存啄栓。這五個因素解釋了TPU在能源和性能方面30倍的優(yōu)勢娄帖。

易犯錯誤(Pitfall)。在設計特定領域架構(gòu)時昙楚,忽視架構(gòu)歷史近速。 那些在通用計算中沒有成功的想法可能是特定領域架構(gòu)的理想選擇。對于TPU來說堪旧,有三個重要的架構(gòu)特征可以追溯到20世紀80年代初: 收縮陣列(systolic arrays)[23]削葱、解耦訪問/執(zhí)行[33]和復雜指令集[29]。第一個特征減少了大型矩陣乘法單元的面積和功率; 第二個特征在矩陣乘法單元的操作中同時獲取權(quán)重; 第三個特征更好利用了PCIe總線的有限帶寬來傳遞指令淳梦。因此析砸,具有歷史意識、特定領域的架構(gòu)師可以擁有競爭優(yōu)勢爆袍。

謬誤(Fallacy)首繁。如果谷歌更有效的使用CPU,那么CPU的結(jié)果將與TPU相當陨囊。 我們最初在CPU上只有一個DNN的8位結(jié)果弦疮,這是因為需要做大量工作來有效使用高級向量擴展(AVX2)的整數(shù)支持,這樣做大約能獲得3.5倍好處蜘醋。以浮點方式呈現(xiàn)所有的CPU結(jié)果胁塞,而不是讓一個例外情況有自己的頂線,這樣比較不容易混淆(而且需要更少的空間)压语。如果所有DNN都有類似的加速啸罢,每瓦性能將從41-83倍下降到12-24倍。

謬誤(Fallacy)胎食。如果谷歌能使用適當?shù)妮^新版本扰才,GPU的結(jié)果將與TPU相匹配。 表3顯示了GPU的發(fā)布和可以在云端被客戶使用之間的時間差異斥季。較新的TPU可以與較新GPU公平比較训桶,而且累驮,只要增加10W酣倾,我們就可以通過使用K80的GDDR5內(nèi)存將28納米、0.7GHz谤专、40W的TPU的性能提高兩倍躁锡。將TPU轉(zhuǎn)移到16納米工藝將進一步提高其每瓦性能。16納米的Nvidia Pascal P40 GPU的峰值性能是原來TPU的一半置侍,但250W的功率卻比原來多出許多倍[15]映之。如前所述拦焚,缺乏錯誤檢查意味著谷歌無法在其數(shù)據(jù)中心部署P40,因此無法在其上運行生產(chǎn)工作負載以確定其實際相對性能杠输。

相關(guān)工作

兩篇調(diào)查文章證實定制DNN ASIC至少可以追溯到20世紀90年代初[3][18]赎败。正如2016年Communications雜志所介紹的,支持四種DNN體系架構(gòu)的DianNao家族通過對DNN應用中的內(nèi)存訪問模式提供高效的體系架構(gòu)支持蠢甲,最大限度的減少了片上和外部DRAM的內(nèi)存訪問[7][21]僵刮。原生DianNao使用64個16位整數(shù)乘法累加單元。

谷歌去年5月推出的TPU 3.0鹦牛,比2.0強大8倍搞糕,性能高達100 petaflops。

DNN的特定領域架構(gòu)仍然是計算機架構(gòu)師的熱門話題曼追,其中一個主要焦點在于稀疏矩陣架構(gòu)窍仰,出現(xiàn)于2015年首次部署TPU之后。高效推理引擎基于第一道程序礼殊,通過獨立步驟過濾掉非常小的值驹吮,將權(quán)重數(shù)量減少大約10[13]倍,然后使用Huffman編碼進一步縮小數(shù)據(jù)膏燕,以提高推理性能[14]钥屈。Cnvlutin[1]通過避免激活輸入為零時的乘法(大概有44%的乘法是這種類型,其原因可能部分由于調(diào)整線性單元坝辫、ReLU篷就、非線性函數(shù),將負值轉(zhuǎn)化為零)近忙,平均提高1.4倍性能竭业。Eyeriss是新型低功耗數(shù)據(jù)流架構(gòu),通過運行長度編碼數(shù)據(jù)利用零值及舍,以減少內(nèi)存占用未辆,并通過避免輸入為零時的計算來節(jié)省能源[8]。Minerva是一個跨越算法锯玛、架構(gòu)和電路學科的代碼設計系統(tǒng)咐柜,通過部分修剪具有小值的激活數(shù)據(jù)和部分量化數(shù)據(jù)實現(xiàn)8倍功率的降低。2017提出的SCNN[27]是一個用于稀疏和壓縮卷積神經(jīng)網(wǎng)絡(CNN)的加速器攘残。權(quán)重和激活函數(shù)都被壓縮在DRAM和內(nèi)部緩沖區(qū)中拙友,從而減少數(shù)據(jù)傳輸所需的時間和能耗,并允許芯片存儲更大的模型歼郭。

2016年以來的另一個趨勢是用于訓練的特定領域架構(gòu)遗契。例如,ScaleDeep[35]是針對DNN訓練和推理而設計的高性能服務器病曾,包含成千上萬的處理器牍蜂。每個芯片包含重度計算模塊和重度存儲模塊漾根,比例為3:1,性能比GPU高出6倍到28倍鲫竞,以16位或32位浮點運算進行計算辐怕。芯片通過高性能互連拓撲結(jié)構(gòu)連接,與DNN的通信模式類似从绘。像SCNN一樣秘蛇,這種拓撲結(jié)構(gòu)完全是在CNN上評估的。2016年顶考,CNN在谷歌數(shù)據(jù)中心的TPU工作負荷中僅占5%赁还。計算機架構(gòu)師們期待著在其他類型的DNN上評估ScaleDeep,并期待出現(xiàn)硬件實現(xiàn)驹沿。

DNN似乎是FPGA作為數(shù)據(jù)中心計算平臺的一個很好的用例艘策,一個實際倍部署的例子是Catapult[30]。雖然Catapult在2014年公開發(fā)布渊季,但它和最新的TPU產(chǎn)品是同一代的朋蔫,2015年微軟在數(shù)據(jù)中心部署了28nm Stratix V FPGA。Catapult運行CNN的速度比服務器快2.3倍却汉。也許Catapult和TPU之間最重要的區(qū)別是驯妄,為了達到最佳性能,用戶必須用低級硬設計語言Verilog編寫長程序合砂,而不是用高級的TensorFlow框架編寫短程序青扔。也就是說,TPU軟件相對FPGA固件提供了更好的"可編程性"翩伪。

結(jié)論

盡管I/O總線和相對有限的內(nèi)存帶寬限制了TPU的利用率(6個DNN應用中有4個是內(nèi)存受限的)微猖,但正如Roofline性能模型所證明的那樣,某些計算的能力提升相對還是比較大的缘屹,比如每周期可以完成65,536次乘法凛剥。這一結(jié)果表明Amdahl定律的一個推論: 大量廉價資源的低利用率仍然可以提供高性價比的性能。

我們知道推理應用往往是面向終端用戶的應用的一部分轻姿,因此對響應時間有很高的要求犁珠,所以DNN架構(gòu)需要在99%的情況下表現(xiàn)出良好的延遲特性。

TPU芯片利用其在MAC和片上存儲器方面的優(yōu)勢互亮,運行面向特定領域的TensorFlow框架編寫的短程序的速度比K80 GPU芯片快15倍犁享,從而使每瓦性能優(yōu)勢提升29倍,從而優(yōu)化了性能/總擁有成本胳挎。與Haswell CPU芯片相比饼疙,相應提升了29和83倍溺森。

五個架構(gòu)因素可以解釋這種能效差距:

單一處理器慕爬。 TPU只有一個處理器窑眯,而K80有13個,CPU有18個医窿。單線程使系統(tǒng)更容易保證固定的延遲限制磅甩。

大型二維乘法單元。 TPU有一個非常大的二維乘法單元姥卢,而CPU和GPU分別有18和13個較小的一維乘法單元卷要,二維乘法硬件單元更適合于計算矩陣乘法。

壓縮數(shù)組独榴。 對二維組織進行陣列收縮僧叉,以減少寄存器訪問和能量消耗。

8位整數(shù)棺榔。 TPU應用使用8位整數(shù)運算而不是32位浮點運算瓶堕,以提高計算和內(nèi)存的效率。

放棄額外功能症歇。 TPU放棄了CPU和GPU需要而DNN不需要的功能郎笆,使TPU成本更低,同時節(jié)省能源忘晤,并允許晶體管被重新用于特定領域的片上存儲器宛蚓。

雖然CPU和GPU在未來肯定會以更快的速度運行推理,但重新設計的TPU通過使用2015年左右的GPU內(nèi)存將性能提升了三倍设塔,并將每瓦性能優(yōu)勢提升到K80的70倍以及Haswell的200倍凄吏。

至少在過去十年里,計算機架構(gòu)研究人員一直在發(fā)表基于模擬的創(chuàng)新成果闰蛔,使用有限基準竞思,并聲稱基于通用處理器的改進幅度不超過10%,而我們現(xiàn)在可以說钞护,部署在真實硬件中的特定領域架構(gòu)的改進幅度超過了10倍[17]盖喷。

商業(yè)產(chǎn)品之間的數(shù)量級差異在計算機架構(gòu)中比較罕見,甚至可能導致TPU成為該領域未來工作的原型难咕。我們預計课梳,今后很多人都會構(gòu)建類似的架構(gòu),并將標準提得更高余佃。

致謝

感謝TPU團隊所有成員在項目中的貢獻[20]暮刃。設計、驗證和實現(xiàn)類似TPU這樣的系統(tǒng)硬件和軟件爆土,并制造椭懊、部署和大規(guī)模應用,需要很多人共同努力步势,正如我們在谷歌看到的那樣氧猬。

參考文獻
  1. Abadi, M. et al. Tensorflow: Large-scale machine learning on heterogeneous distributed systems. arXiv preprint, 2016; https://arxiv.org/abs/1603.04467
  2. Albericio, J., Judd, P., Hetherington, T., Aamodt, T., Jerger, N.E., and Moshovos, A. 2016 Cnvlutin: Ineffectual-neuron-free deep neural network computing. In Proceedings of the 43rd ACM/IEEE International Symposium on Computer Architecture (Seoul, Korea), IEEE Press, 2016.
  3. Asanovic′, K. Programmable neurocomputing. In The Handbook of Brain Theory and Neural Networks, Second Edition, M.A. Arbib, Ed. MIT Press, Cambridge, MA, Nov. 2002; https://people.eecs.berkeley.edu/~krste/papers/neurocomputing.pdf
  4. Barroso, L.A. and H?lzle, U. The case for energyproportional computing. IEEE Computer 40, 12 (Dec. 2007), 33–37.
  5. Barr, J. New G2 Instance Type for Amazon EC2: Up to 16 GPUs. Amazon blog, Sept. 29, 2016; https://aws.amazon.com/about-aws/whats-new/2015/04/introducing-a-new-g2-instance-size-the-g28xlarge/
  6. Barr, J. New Next-Generation GPU-Powered EC2 Instances (G3). Amazon blog, July 13, 2017; https://aws.amazon.com/blogs/aws/new-next-generationgpu-powered-ec2-instances-g3/
  7. Chen, Y., Chen, T., Xu, Z., Sun, N., and Teman, O. DianNao Family: Energy-efficient hardware accelerators for machine learning. Commun. ACM 59, 11 (Nov. 2016), 105–112.
  8. Chen, Y.H., Emer, J., and Sze, V. Eyeriss: A spatial architecture for energy-efficient dataflow for convolutional neural networks. In Proceedings of the 43rd ACM/IEEE International Symposium on Computer Architecture (Seoul, Korea), IEEE Press, 2016.
  9. Clark, J. Google turning its lucrative Web search over to AI machines. Bloomberg Technology (Oct. 26, 2015).
  10. Dally, W. High-performance hardware for machine learning. Invited talk at Cadence ENN Summit (Santa Clara, CA, Feb. 9, 2016); https://ip.cadence.com/uploads/presentations/1000AM_Dally_Cadence_ENN.pdf
  11. Dean, J. Large-Scale Deep Learning with TensorFlow for Building Intelligent Systems. ACM webinar, July 7, 2016; https://www.youtube.com/watch?v=vzoe2G5g-w4
  12. Hammerstrom, D. A VLSI architecture for high-performance, low-cost, on-chip learning. In Proceedings of the International Joint Conference on Neural Networks (San Diego, CA, June 17–21). IEEE Press, 1990.
  13. Han, S., Pool, J., Tran, J., and Dally, W. Learning both weights and connections for efficient neural networks. In Proceedings of Advances in Neural Information Processing Systems (Montreal Canada, Dec.) MIT Press, Cambridge, MA, 2015.
  14. Han, S., Liu, X., Mao, H., Pu, J., Pedram, A., Horowitz, M.A., and Dally, W.J. EIE: Efficient Inference Engine on compressed deep neural network. In Proceedings of the 43rd ACM/IEEE International Symposium on Computer Architecture (Seoul, Korea). IEEE Press, 2016.
  15. Huang, J. AI Drives the Rise of Accelerated Computing in Data Centers. Nvidia blog, Apr. 2017; https://blogs.nvidia.com/blog/2017/04/10/ai-drives-riseaccelerated-computing-datacenter/
  16. He, K., Zhang, X., Ren, S., and Sun, J. Identity mappings in deep residual networks. arXiv preprint, Mar. 16, 2016; https://arxiv.org/abs/1603.05027
  17. Hennessy, J.L. and Patterson, D.A. Computer Architecture: A Quantitative Approach, Sixth Edition. Elsevier, New York, 2018.
  18. Ienne, P., Cornu, T., and Kuhn, G. Special-purpose digital hardware for neural networks: An architectural survey. Journal of VLSI Signal Processing Systems for Signal, Image and Video Technology 13, 1 (1996), 5–25.
  19. Jouppi, N. Google Supercharges Machine Learning Tasks with TPU Custom Chip. Google platform blog, May 18, 2016; https://cloudplatform.googleblog.com/2016/05/Google-supercharges-machinelearning-tasks-with-custom-chip.html
  20. Jouppi, N. et al, In-datacenter performance of a tensor processing unit. In Proceedings of the 44th International Symposium on Computer Architecture (Toronto, Canada, June 24–28). ACM Press, New York, 2017, 1–12.
  21. Keutzer, K. If I could only design one circuit ... Commun. ACM 59, 11 (Nov. 2016), 104.
  22. Krizhevsky, A., Sutskever, I., and Hinton, G. Imagenet classification with deep convolutional neural networks. In Proceedings of Advances in Neural Information Processing Systems (Lake Tahoe, NV). MIT Press, Cambridge, MA, 2012.
  23. Kung, H.T. and Leiserson, C.E. Algorithms for VLSI processor arrays. Chapter in Introduction to VLSI systems by C. Mead and L. Conway. Addison-Wesley, Reading, MA, 1980, 271–292.
  24. Lange, K.D. Identifying shades of green: The SPECpower benchmarks. IEEE Computer 42, 3 (Mar. 2009), 95–97.
  25. Larabel, M. Google Looks to Open Up StreamExecutor to Make GPGPU Programming Easier. Phoronix, Mar. 10, 2016; https://www.phoronix.com/scan.php?page=news_item&px=Google-StreamExec-Parallel
  26. Metz, C. Microsoft bets its future on a reprogrammable computer chip. Wired (Sept. 25, 2016); https://www.wired.com/2016/09/microsoftbets-future-chip-reprogram-fly/
  27. Moore, G.E. No exponential is forever: But ‘forever’ can be delayed! In Proceedings of the International SolidState Circuits Conference (San Francisco, CA, Feb. 13). IEEE Press, 2003.
  28. Parashar, A., Rhu, M., Mukkara, A., Puglielli, A., Venkatesan, R., Khailany, B., Emer, J., Keckler, S.W., and Dally, W.J. SCNN: An accelerator for compressedsparse convolutional neural networks. In Proceedings of the 44th Annual International Symposium on Computer Architecture (Toronto, ON, Canada, June 24–28). IEEE Press, 2017, 27–40.
  29. Patterson, D.A. Latency lags bandwidth. Commun. ACM 47, 10 (Oct. 2004), 71–75.
  30. Patterson, D.A. and Ditzel, D.R. The case for the reduced instruction set computer. SIGARCH Computer Architecture News 8, 6 (Sept. 1980), 25–33.
  31. Putnam, A. et al. A reconfigurable fabric for accelerating large-scale datacenter services. Commun. ACM 59, 11 (Nov. 2016), 114–122.
  32. Reagen, B., Whatmough, P., Adolf, R., Rama, S., Lee, H., Lee, S.K., Hernández-Lobato, J.M., Wei, G.Y., and Brooks, D. Minerva: Enabling low-power, highly accurate deep neural network accelerators. In Proceedings of the 43rd ACM/IEEE International Symposium on Computer Architecture (Seoul, Korea), IEEE Press 2016.
  33. Silver, D. et al. Mastering the game of Go with deep neural networks and tree search. Nature 529, 7587 (Sept. 20, 2016).
  34. Smith, J.E. Decoupled access/execute computer architectures. In Proceedings of the 11th Annual International Symposium on Computer Architecture (Austin, TX, Apr. 26–29). IEEE Computer Society Press, 1982.
  35. Szegedy, C. et al. Going deeper with convolutions. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (Boston, MA, June 7–12). IEEE Computer Society Press, 2015.
  36. Venkataramani, S. et al. ScaleDeep: A scalable compute architecture for learning and evaluating deep networks. In Proceedings of the 44th Annual International Symposium on Computer Architecture (Toronto, ON, Canada, June 24–28). ACM Press, New York, 2017, 13–26.
  37. Williams, S., Waterman, A., and Patterson, D. Roofline: An insightful visual performance model for multi-core architectures. Commun. ACM 52, 4 (Apr. 2009), 65–76.
  38. Wu, Y. et al. Google’s neural machine translation system: Bridging the gap between human and machine translation. arXiv preprint, Sept. 26, 2016; arXiv:1609.08144
作者

Norman P. Jouppi (jouppi@google.com) 谷歌杰出硬件工程師
Cliff Young (cliffy@google.com) 谷歌大腦團隊成員
Nishant Patil (nishantpatil@google.com) 谷歌技術(shù)主管
David Patterson (pattrsn@cs.berkeley.edu) 加州大學伯克利分校電子工程與計算機科學學院Pardee榮譽教授背犯,谷歌杰出工程師

你好,我是俞凡盅抚,在Motorola做過研發(fā)漠魏,現(xiàn)在在Mavenir做技術(shù)工作,對通信妄均、網(wǎng)絡柱锹、后端架構(gòu)、云原生丰包、DevOps禁熏、CICD割捅、區(qū)塊鏈惧互、AI等技術(shù)始終保持著濃厚的興趣缆瓣,平時喜歡閱讀慌随、思考战秋,相信持續(xù)學習熬尺、終身成長轻猖,歡迎一起交流學習鲜结。
微信公眾號:DeepNoMind

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘸爽,一起剝皮案震驚了整個濱河市您访,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剪决,老刑警劉巖灵汪,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柑潦,居然都是意外死亡享言,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門渗鬼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來览露,“玉大人,你說我怎么就攤上這事譬胎〔钆#” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵堰乔,是天一觀的道長偏化。 經(jīng)常有香客問我,道長镐侯,這世上最難降的妖魔是什么侦讨? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上韵卤,老公的妹妹穿的比我還像新娘骗污。我一直安慰自己,他們只是感情好怜俐,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著邓尤,像睡著了一般拍鲤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汞扎,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天季稳,我揣著相機與錄音,去河邊找鬼澈魄。 笑死景鼠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的痹扇。 我是一名探鬼主播铛漓,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鲫构!你這毒婦竟也來了浓恶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤结笨,失蹤者是張志新(化名)和其女友劉穎包晰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炕吸,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡伐憾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赫模。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片树肃。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瀑罗,靈堂內(nèi)的尸體忽然破棺而出扫外,到底是詐尸還是另有隱情,我是刑警寧澤廓脆,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布筛谚,位于F島的核電站,受9級特大地震影響停忿,放射性物質(zhì)發(fā)生泄漏驾讲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吮铭。 院中可真熱鬧时迫,春花似錦、人聲如沸谓晌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纸肉。三九已至溺欧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柏肪,已是汗流浹背姐刁。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烦味,地道東北人聂使。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像谬俄,于是被迫代替她去往敵國和親柏靶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容