二、微軟部署 FPGA 的實踐
2016 年 9 月,《連線》(Wired)雜志發表了一篇《微軟把未來押注在 FPGA 上》的報道 [3],講述了 Catapult 項目的前世今生。緊接著,Catapult 項目的老大 Doug Burger 在 Ignite 2016 大會上與微軟 CEO Satya Nadella 一起做了 FPGA 加速機器翻譯的演示。
這里就給大家八一八這個每秒 1 Exa-op 的數字是怎么算出來的。每塊生產環境中部署的 Stratix V FPGA 有 1.8 T ops 的計算能力,每臺服務器上插一塊 FPGA。實際使用時,每 8 臺服務器為一組,一臺服務器作為 FPGA 的控制節點。控制節點的 CPU 也可以做機器翻譯的計算,但是每個 CPU 核只能做 0.1 T ops,相比 FPGA 是聊勝于無。非控制節點上的 FPGA 通過網絡從其他 FPGA 收發數據,不需要本地 CPU 處理數據平面。
截至演示時,微軟 Azure 云有 46 萬臺服務器部署了 FPGA,Bing 有 1.5 萬臺,Exchange 服務有 9.5 萬臺,共計 57 萬臺。乘起來得到總的計算能力是 103 萬 T ops,也就是 1.03 Exa-op,相當于 10 萬塊頂級 GPU 計算卡。一塊 FPGA(加上板上內存和網絡接口等)的功耗大約是 30 W,僅增加了整個服務器功耗的十分之一。
微軟部署 FPGA 并不是一帆風順的。對于把 FPGA 部署在哪里這個問題,大致經歷了三個階段:
1.專用的 FPGA 集群,里面插滿了 FPGA
2.每臺機器一塊 FPGA,采用專用網絡連接
3.每臺機器一塊 FPGA,放在網卡和交換機之間,共享服務器網絡
第一個階段是專用集群,里面插滿了 FPGA 加速卡,就像是一個 FPGA 組成的超級計算機。下圖是最早的 BFB 實驗板,一塊 PCIe 卡上放了 6 塊 FPGA,每臺 1U 服務器上又插了 4 塊 PCIe 卡。
可以注意到該公司的名字。在半導體行業,只要批量足夠大,芯片的價格都將趨向于沙子的價格。據傳聞,正是由于該公司不肯給「沙子的價格」 ,才選擇了另一家公司。當然現在數據中心領域用兩家公司 FPGA 的都有。只要規模足夠大,對 FPGA 價格過高的擔心將是不必要的。
像超級計算機一樣的部署方式,意味著有專門的一個機柜全是上圖這種裝了 24 塊 FPGA 的服務器(下圖左)。這種方式有幾個問題:
1.不同機器的 FPGA 之間無法通信,FPGA 所能處理問題的規模受限于單臺服務器上 FPGA 的數量;
2.數據中心里的其他機器要把任務集中發到這個機柜,構成了 in-cast,網絡延遲很難做到穩定。
3.FPGA 專用機柜構成了單點故障,只要它一壞,誰都別想加速了;
4.裝 FPGA 的服務器是定制的,冷卻、運維都增加了麻煩。
一種不那么激進的方式是,在每個機柜一面部署一臺裝滿 FPGA 的服務器(上圖中)。這避免了上述問題 (2)(3),但 (1)(4) 仍然沒有解決。
第二個階段,為了保證數據中心中服務器的同構性(這也是不用 ASIC 的一個重要原因),在每臺服務器上插一塊 FPGA(上圖右),FPGA 之間通過專用網絡連接。這也是微軟在 ISCA‘14 上所發表論文采用的部署方式。
FPGA 采用 Stratix V D5,有 172K 個 ALM,2014 個 M20K 片上內存,1590 個 DSP。板上有一個 8GB DDR3-1333 內存,一個 PCIe Gen3 x8 接口,兩個 10 Gbps 網絡接口。一個機柜之間的 FPGA 采用專用網絡連接,一組 10G 網口 8 個一組連成環,另一組 10G 網口 6 個一組連成環,不使用交換機。
這樣一個 1632 臺服務器、1632 塊 FPGA 的集群,把 Bing 的搜索結果排序整體性能提高到了 2 倍(換言之,節省了一半的服務器)。如下圖所示,每 8 塊 FPGA 穿成一條鏈,中間用前面提到的 10 Gbps 專用網線來通信。這 8 塊 FPGA 各司其職,有的負責從文檔中提取特征(黃色),有的負責計算特征表達式(綠色),有的負責計算文檔的得分(紅色)。
除了加速搜索結果的排序(RaaS,Ranking as a Service),FPGA 還被用來加速從倒排索引中取出相關文檔并譯碼的過程(SaaS,Selection as a Service)。為了加快文檔數據結構的訪問,FPGA 把服務器主存里常用的 4K 內存頁面緩存在 FPGA 板上的 DDR 上。
FPGA 在 Bing 的部署取得了成功,Catapult 項目繼續在公司內擴張。微軟內部擁有最多服務器的,就是云計算 Azure 部門了。Azure 部門急需解決的問題是網絡和存儲虛擬化帶來的開銷。Azure 把虛擬機賣給客戶,需要給虛擬機的網絡提供防火墻、負載均衡、隧道、NAT 等網絡功能。由于云存儲的物理存儲跟計算節點是分離的,需要把數據從存儲節點通過網絡搬運過來,還要進行壓縮和加密。
在 1 Gbps 網絡和機械硬盤的時代,網絡和存儲虛擬化的 CPU 開銷不值一提。隨著網絡和存儲速度越來越快,網絡上了 40 Gbps,一塊 SSD 的吞吐量也能到 1 GB/s,CPU 漸漸變得力不從心了。例如 Hyper-V 虛擬交換機只能處理 25 Gbps 左右的流量,不能達到 40 Gbps 線速,當數據包較小時性能更差;AES-256 加密和 SHA-1 簽名,每個 CPU 核只能處理 100 MB/s,只是一塊 SSD 吞吐量的十分之一。
為了加速網絡功能和存儲虛擬化,微軟把 FPGA 部署在網卡和交換機之間。如下圖所示,每個 FPGA 有一個 4 GB DDR3-1333 DRAM,通過兩個 PCIe Gen3 x8 接口連接到一個 CPU socket(物理上是 PCIe Gen3 x16 接口,因為 FPGA 沒有 x16 的硬核,邏輯上當成兩個 x8 的用)。物理網卡(NIC)就是普通的 40 Gbps 網卡,僅用于宿主機與網絡之間的通信。
FPGA(SmartNIC)對每個虛擬機虛擬出一塊網卡,虛擬機通過 SR-IOV 直接訪問這塊虛擬網卡。原本在虛擬交換機里面的數據平面功能被移到了 FPGA 里面,虛擬機收發網絡數據包均不需要 CPU 參與,也不需要經過物理網卡(NIC)。這樣不僅節約了可用于出售的 CPU 資源,還提高了虛擬機的網絡性能(25 Gbps),把同數據中心虛擬機之間的網絡延遲降低了 10 倍。
這就是微軟部署 FPGA 的第三代架構,也是目前「每臺服務器一塊 FPGA」大規模部署所采用的架構。FPGA 復用主機網絡的初心是加速網絡和存儲,更深遠的影響則是把 FPGA 之間的網絡連接擴展到了整個數據中心的規模,做成真正 cloud-scale 的「超級計算機」。第二代架構里面,FPGA 之間的網絡連接局限于同一個機架以內,FPGA 之間專網互聯的方式很難擴大規模,通過 CPU 來轉發則開銷太高。
第三代架構中,FPGA 之間通過 LTL (Lightweight Transport Layer) 通信。同一機架內延遲在 3 微秒以內;8 微秒以內可達 1000 塊 FPGA;20 微秒可達同一數據中心的所有 FPGA。第二代架構盡管 8 臺機器以內的延遲更低,但只能通過網絡訪問 48 塊 FPGA。為了支持大范圍的 FPGA 間通信,第三代架構中的 LTL 還支持 PFC 流控協議和 DCQCN 擁塞控制協議。
通過高帶寬、低延遲的網絡互聯的 FPGA 構成了介于網絡交換層和傳統服務器軟件之間的數據中心加速平面。除了每臺提供云服務的服務器都需要的網絡和存儲虛擬化加速,FPGA 上的剩余資源還可以用來加速 Bing 搜索、深度神經網絡(DNN)等計算任務。
對很多類型的應用,隨著分布式 FPGA 加速器的規模擴大,其性能提升是超線性的。例如 CNN inference,當只用一塊 FPGA 的時候,由于片上內存不足以放下整個模型,需要不斷訪問 DRAM 中的模型權重,性能瓶頸在 DRAM;如果 FPGA 的數量足夠多,每塊 FPGA 負責模型中的一層或者一層中的若干個特征,使得模型權重完全載入片上內存,就消除了 DRAM 的性能瓶頸,完全發揮出 FPGA 計算單元的性能。當然,拆得過細也會導致通信開銷的增加。把任務拆分到分布式 FPGA 集群的關鍵在于平衡計算和通信。
在 MICRO‘16 會議上,微軟提出了 Hardware as a Service (HaaS) 的概念,即把硬件作為一種可調度的云服務,使得 FPGA 服務的集中調度、管理和大規模部署成為可能。
從第一代裝滿 FPGA 的專用服務器集群,到第二代通過專網連接的 FPGA 加速卡集群,到目前復用數據中心網絡的大規模 FPGA 云,三個思想指導我們的路線:
1.硬件和軟件不是相互取代的關系,而是合作的關系;
2.必須具備靈活性,即用軟件定義的能力;
3.必須具備可擴放性(scalability)。
評論
查看更多