作者 | ZeR0
編輯 | 漠影
亞馬遜雲科技(AWS)造芯已有足足八年。
從2013年推出首顆Nitro1晶片至今,這家最先涉足自研晶片的雲廠商,已坐擁網路晶片、伺服器晶片、人工智慧機器學習自研晶片三條產品線。
4代網路晶片Nitro、3代伺服器晶片Graviton、1代AI推理晶片、1代AI訓練晶片,這是AWS迄今公佈的雲計算底座自研晶片版圖。
值得注意的是,AWS絕非“PPT造芯”,而是透過雲實例將晶片的價值快速導向客戶。今年,AWS釋出了C7g、Trn1等一系列新例項,並推出Nitro的SSD硬碟。
“自研晶片是需要經驗積累的,並不是你花錢就能買來的,也並不是你著急很快就能實現。”在2021 re:Invent全球大會媒體溝通會上,亞馬遜雲科技大中華區產品部總經理顧凡談到AWS在重構自研晶片中的最大優勢——深刻理解雲上所有客戶的工作負載,去逆向工作,設計晶片。
對於AWS的造芯歷程以及背後邏輯,亞馬遜雲科技大中華區產品部計算與儲存總監周舸進行了詳細地解讀。
一、自研CPU:以客戶需求為起點,兩大技術思路提升效能
AWS從自研晶片出發做雲計算的創新,要從2006年釋出第一個Amazon EC2 Instance說起,這是一段由十人團隊開始的Amazon EC2旅程。
隨著客戶對Amazon EC2提出更多要求,AWS持續地增加了很多機型,包括給SAP用的超過24TB最大記憶體的例項、專為轉碼業務提供的VT1、基於Arm的蘋果最新M1晶片提供的新例項等。
這些例項多樣化創新的不斷深入,令AWS團隊意識到,必須專注到晶片研發的本身,從晶片的創新開始。於是從2013年至今,AWS不斷基於自研晶片推出新的例項,以提供更高性價比。
2019年,AWS釋出第二代伺服器晶片Graviton,其例項上市後,客戶把更多不同的應用方式部署到Graviton上,跨越的範圍也進一步擴充套件,從當初的Cache到Web一直延伸到資料分析,乃至機器學習和高效能計算的工作負載。
為了幫客戶更好地使用新例項,AWS將更多的管理服務和Graviton做深入整合,使得客戶能快速用起來。結果,很多客戶只用一兩天時間,就能完成從x86到Arm的轉移。
在今年的re:Invent大會上,AWS釋出了4個基於Graviton2的新例項,包括1TB記憶體的X2gd、由Graviton2和英偉達GPU提供支援的G5g等。Is第四代的例項中有Is4gen和Im4gn,也採用的是Graviton2處理器。
Graviton2有300億個電晶體,新一代Graviton3又增加了200億,共擁有500億個電晶體。
C7g是第一個針對Graviton3的例項,其突破有多處重點,包括效能較上一代提升超25%,浮點運算能力提升超過兩倍。在記憶體上,C7g也是雲上第一個支援DDR5的新的計算例項。
亞馬遜雲科技大中華區產品部計算與儲存總監周舸也分享了Graviton的技術創新,相同Arm微架構不代表能做出相同的CPU,晶片設計時必須有自己的思考,AWS的原則是,從工作負載去看,從客戶真正實際使用情況,去找到設計的起點。
在過去的20年裡面,提升CPU效能最容易的兩個方向,一是提高頻率,二是增加核心數量。
大多數時候,提高頻率很容易讓效能得到提升,但問題是,以現有半導體的功率和能力,提高頻率意味著會提高很多頻率、熱量,需要搭配很大的電源及散熱配置。
在像雲這樣的超大規模資料中心,這將帶來大量的耗電、能耗,降低了雲的效率,並對散熱效率提出更高要求,最終致使客戶的使用成本上升。“所以這是我們非常謹慎的在選擇頻率提升的時候的一個主要原因。”周舸說。
如果不做頻率的提升,那還有別的什麼選項呢?
AWS的答案是,希望讓核心的寬度得以增加,即使用指令並行的方式,希望其核心在同一個時鐘週期中能夠執行更多的指令、完成更多的任務。
比如從一個時間週期執行5個指令提升到執行8個指令,所以同一個時間裡面能做更多事,這也能給最後的效能帶來很大變化。
使用指令並行時,如果應用程式的編譯能夠發揮出指令並行的優勢,效果會非常明顯。Nginx和Groovy差不多提升了60%,甚至Redshift也可以提升超過25%。
在同一個週期裡面,AWS讓它有機會執行更多的指令,也讓同一個指令執行時能夠執行更多的資料,它就會更快地完成影片、影象等處理、轉碼以及一些機器學習和高效能計算的過程。
結果可見,x264、x265影片編碼效能提升50%左右,AES-256加密效能提升了61%。這都是透過指令並行和同一個指令裡面載入更多的資料量的處理能力來實現的,而沒有靠頻率提升。
增加核數是提升效能的另一個快而有效的方法。
從第一代Graviton到第二代,AWS增加了不少核數,效果還不錯。到第三代時,AWS團隊研究了真正在Graviton2上執行的客戶工作負載,發現其中大量的工作負載裡是大資料的、微服務架構的等等,還有些高效能計算服務,這些服務對於記憶體頻寬和延時敏感度非常高。
因此,AWS團隊做出判斷:在記憶體下功夫,會比增加核數的效果更快。
新的選擇題出現:用餘下電晶體去增加更多核,還是去增加CPU的記憶體頻寬和降低延遲?
最終,AWS團隊選擇了記憶體。相對於Graviton2以及英特爾的Tool平臺,其記憶體頻寬提升了50%,這在很多應用上的效果非常直接。
一些早期用過的客戶分享了Graviton3給他們帶來的幫助。如Twitter表示其效能提升20%~80%,甚至在降低尾延遲方面可以降低至少35%,這對記憶體延遲非常敏感;F1方程式在做流體模擬時用的是Graviton2,已經比英特爾的平臺快很多,這次它用C7g又可以提升40%;Epic《堡壘之夜》的遊戲效能體驗也大幅提升。
還有一個重要指標是讓功耗降低60%。這將維持更高能效比,且客戶不會付出很高的成本代價。
Graviton的大量使用,已經衍生到了非常多的工作負載中。如SAP HANA Cloud使用Graviton,去幫助企業級的客戶提升運營效率、提高效能。
同時,今年AWS在re:Invent上面也宣佈了其連續第四年獲得了HPC最佳雲平臺的大獎,Graviton還在11月底獲得中國計算機學會高效能計算委員會頒發的產品創新獎。
C7g例項透過支援BFloat16,使得Graviton3的機器學習推理效能幾乎比上一代提升快4倍。
二、自研AI晶片:最佳化記憶體和網路,加速適配機器學習需求
在提升伺服器晶片AI算力的同時,AWS正持續最佳化其AI晶片及相關例項的效能。
面對AI訓練和推理,AWS有不同的例項。除了其P4d、inf1例項用在推理,通用CPU的推理使用也越來越多,包括C6i和C6g;在訓練方面,AWS推出了具備EC2超級叢集能力的P4d和基於英特爾AI晶片Habana驅動的DL1。
2019年,AWS釋出基於其自研雲端AI推理晶片Inferentia的Amazon EC2 Inf1例項,如今該例項已經被很多中國客戶用於做推理。
今年剛剛推出的Trn1,是基於AWS自研雲端訓練晶片Trainium的例項。近年機器學習發展飛速,其配套的各種專業加速晶片隨之發展迅猛。每年機器學習專用晶片的演進提升速度都超翻倍,比通用CPU快得多。
可是挑戰是,機器學習這個模型的複雜度是呈10倍地成長,光靠GPU、加速晶片本身的加速,已經不足以跟得上這個速度。
因此要讓機器學習訓練能力大幅提升,關鍵是並行訓練。這意味著不僅要提升專用晶片本身的效能,還要解決記憶體和網路兩大難點,構建更適合這些晶片發揮的網路環境和它配套的所有服務。
記憶體方面,從P3dn開始,AWS的記憶體一直在增加。到今年Trn1記憶體已是512G。
網路方面,AWS幾年前就推出了100G的網路,到p4d時去年做了400G的網路,全新發布的Trn1首次將頻寬增至800G,Trn1n更是可以到1600G,基於其EFA,AWS可以讓機器學習的裝置組在一個架構中,提高分散式高效能計算和機器學習工作負載的吞吐量和可擴充套件性。
從效果上來看,一個典型大模型GPT-3需要兩週的訓練週期,用P3dn需要600個例項,P4d已經降至128個例項,Trn1n繼續下降到96個例項。例項數大幅減少後,成本會明顯節約。
值得注意的是,P3dn跑訓練時,49%的開銷花在了例項之間的通訊。P4d把網路效能提升後,還剩14%的開銷。到Trn1n,只有7%的開銷會用到網路通訊上面。
這帶來的好處是,AWS可用更大的叢集、更多的卡同時去訓練,真正明顯縮短訓練時間。P4d最多可用4000個卡同時訓練,Trn1n則將這個指標提升到了1萬張,這也是一個巨大的進步。
如今,每天有超過6000萬個全新例項在Amazon EC2實上運轉,這是2019年的兩倍,而這一切都來自於網路本身的創新。
三、自研SSD:統一監控執行指標,降低bug風險
Nitro晶片是AWS網路創新的起點,前文談及的從100G、400G、800G到1600G都離不開Nitro。
這個已經推出四代的網路晶片幫助AWS解決了很多問題,包括提供了統一的安全性平臺,無論使用什麼樣的CPU計算平臺,都可以獲得一致的安全性、一致的VPC接入能力、一致的API的統一性等等。
Nitro也可以幫助提高儲存的效能。
第一塊硬碟在1956年時相當巨大,後來逐漸發展成像一個唱機大小的磁碟,資料中心中很多大資料都儲存在這樣的磁盤裡面。隨著應用的發展,資料中心對IO吞吐的需求越來越高,擅長於此的SSD被越來越多地採用到儲存裝置中。
SSD用半導體存資料,其快閃記憶體轉換層(FTL)會控制將資料從邏輯地址到物理地址的轉換。這裡特別容易發生兩件事:一是垃圾回收,擦寫時要將相應空間釋放出來;二是磨損平衡,控制每個資料塊使用頻率差不多,能被較均衡地磨損掉。
過去,AWS使用的大量SSD硬碟來自很多供應商,各家FTL控制機制不同,甚至每種盤的FTL都可能不一樣。如果FTL中有bug要修復,只能等到原廠來做這個事,時間就會很不可控,連帶著AWS對客戶提供服務保障會變得更困難。
此外,不同FTL的有些功能實現邏輯不一致,可能會在不同的時間啟動垃圾回收、碎片回收、磨損均衡等功能,一旦突然啟動了這個功能,客戶正在使用這個盤時,去請求的工作就會被中斷掉,這對客戶的使用會造成非常大的干擾。
同一個應用,當使用不同盤時,效能是不一樣的。因此AWS用Nitro SSD,透過統一的FTL來解決這些問題,自己解決bug,避免客戶被幹擾。
AWS第一代Nitro SSD在2017年就做出來了,目前其整個雲體系部署了超過50萬個Nitro SSD,第二代Nitro SSD在今年的re:Invent大會上剛剛釋出。基於英特爾平臺的I4i以及基於Graviton2的Im4gn/Is4gen機型都用到新的Nitro SSD。
Nitro SSD帶來直觀的效能提升,相比上一代I3例項,新例項I/O延遲降低了60%,延遲可變性降低了75%。
EBS儲存服務也使用Nitro SSD來提升效能。比如今年正式投入市場的io2 Block Express就使用了Nitro SSD,最終獲得256k IOPS及非常穩定的毫秒級延時。
從上圖可見,其跑PostgreSQL時效能可提升2.4倍以上,甚至在SQL上效能更好。據其客戶分享,如果用R5B的Instance加上io2,是在雲上面跑SQLServer最合適的選擇,效能提升了5倍。
2006年,AWS釋出第一個雲服務Amazon S3物件儲存,這也是AWS儲存的起點。
如今越來越多的工作負載開始移到雲上,需要Amazon S3支援。今年AWS又推了兩個新的儲存層:一是把用於歸檔資料的Glacier做了一個可及時索引的分層,既能像熱資料般快速索引呼叫,又能像歸檔儲存一樣長期保持超低成本。
AWS S3智慧分層也覆蓋到新的層,當前提供8個儲存層,可滿足各種儲存需求。S3中裝有10^14個物件,相當於全球每個人可攤1.3萬個物件,宇宙中有2萬億星星,每個星星可攤5個物件。
在如此大的規模中,如何讓客戶保持那麼高的可用性和一致的效能?將如此多的物件完全分佈在數百萬的硬碟上,正是Amazon S3的機制,使其從第一天開始就能提供非常高的穩定性、可靠性和效能。
結語:一切從晶片創新開始
從CPU到加速晶片再到儲存,這些AWS基礎底層技術的進化都是從晶片創新開始的。基於這樣的創新底座,AWS發展到如今的規模,仍能做到高效、安全、持續的創新。
在這些計算、儲存、資料相關的服務打破各種創新邊界的同時,新的約束正亟待突破。這些約束在於很多的物理地域、法規中,比如資料要存在本地的法規要求,以及各種距離產生延時、網路頻寬、連線穩定性等等。
AWS也在透過一系列產品佈局解決這些問題。比如與AWS WaveLength可服務超低延時的5G邊緣應用,Outposts將AWS的能力擴充套件至客戶自己的資料中心;Cloud WAN使客戶透過中央控制面板更輕鬆地將地面複雜網路連線到雲;Snowball裝置可實現一週遷移數TB資料;Ground Station衛星通訊運營服務更是衝出地球,覆蓋到衛星通訊與資料處理……
今天,AWS在有25個區域,覆蓋全球六大洲,提供了81個可用區,接下來還會在提供9個新的服務區,同時提供有30個Local Zones本地區域。基於晶片創新的基石,AWS正透過在雲基礎設施上持續推陳出新,幫助雲上使用者探索更遠的邊界。