機器之心報導編輯:CZ、Jenny Huang、李澤南、吳攀、蔣思源
當地時間 5 月 8-11 日,英偉達在加州聖何塞舉行了 2017 年的 GPU 技術大會(GTC 2017)。機器之心作為本次大會的特邀媒體,也來到了現場。昨天,英偉達 CEO 黃仁勳在大會上正式發布了目前最先進的加速器 NVIDIA Tesla V100。之後,英偉達開發博客又更新了一篇深度解讀文章,剖析了 Tesla V100 背後的新一代架構 Volta,其在提供了更好的高性能計算支持之外,還增加了專門為深度學習所設計的 Tensor Core。機器之心在本文中對這篇博客文章進行了編譯介紹,同時還在文中加入了一些機器之心對英偉達應用深度學習研究副總裁 Bryan Catanzaro 的採訪內容。
在 2017 GPU 技術大會(GTC 2017)上,英偉達 CEO 黃仁勳正式發布了新一代處理器架構 Volta,以及使用新架構的第一款設備——適用於深度學習任務的加速卡 Tesla V100,英偉達將這塊顯卡稱為全球最先進的數據中心 GPU。
從語音識別到訓練虛擬助理進行自然交流,從探測車道線到讓汽車完全自動駕駛,數據科學家們在技術的發展過程中正一步步攀登人工智慧的新高度。而解決這些日益複雜的問題則需要日益複雜的深度學習模型,為深度學習提供強大的計算硬體是英偉達努力的目標。
圖 1. Tesla V100 加速卡內含 Volta GV100 GPU,以及 SXM2 Form Factor。
高性能計算設備(HPC)是現代科學的基礎,從預測天氣、發明新藥到尋找新能源,大型計算系統能為我們模擬和預測世界的變化。這也是英偉達在新一代 GPU 架構推出時選擇優先發布企業級計算卡的原因。黃仁勳在發布會上表示,全新的 Tesla V100 專為 HPC 和 AI 的融合而設計,同時採用了具有突破性的新技術。英偉達的新架構能否讓 GPU 再上一個臺階?讓我們隨著 Tesla V100 一探究竟。
揭秘新架構與 GPU 特性
Volta 並不是 Pascal 的升級,而是一個全新的架構!——NVIDIA 應用深度學習研究副總裁 Bryan Catanzaro。
在 Nvdia GTC 2017 第三天下午,Nvidia CUDA 軟體首席工程師 Luke Durant 與 Nvidia 首席構架師 Oliver Giroux 進行了一個名為 Inside Volta 的技術講座,解讀了 Volta 構架的設計。此後機器之心作為不到五家受邀參與 Volta 深度採訪的亞洲媒體之一,成為了第一批深入了解 Volta 與 Tesla V100 的機構。
英偉達認為,硬體的可編程性正在驅動深度學習的發展。談到 Volta 對人工智慧帶來的影響時,英偉達副總裁 Bryan Catanzaro 表示,「Volta 提供大量的 FLOP,基於 Volta,人們就可以使用需要更多 FLOP 的模型。如今很多流行的模型都需要很大的計算資源,例如卷積,我個人認為架構上將會有一定的轉向,既更多地來利用更多地利用我們已有的大量的 FLOP。當然,構架的進化也會經過一個『達爾文』過程,最終最適應的會成為終極形態」
在本次 GTC 中,我們沒有看到聯網移動端晶片的身影或為移動端人工智慧計算性能提升進行的構架設計,關於這個問題,Volta 設計團隊表示,對於可以聯網的設備,通過 CPU 結合 GPU 的混合雲進行大量計算是必然趨勢;而對於無法聯網的應用場景,SOC 是更好的選擇。
Tesla V100:人工智慧計算和 HPC 的助推器
毫無疑問,全新的英偉達 Tesla V100 加速器是世界上性能最高的並行處理器,旨在為計算量最大的 HPC 設備、人工智慧和圖形工作任務提供支持。它的核心 GV100 GPU 包含 211 億個電晶體,而晶片面積為前所未有的 815 平方毫米(Tesla GP100 為 610 平方毫米)。它採用了臺積電(TSMC)的 12nm FFN 專屬工藝打造。與其前身 GP100 GPU 及其他 Pascal 架構的顯卡相比,GV100 提供了更強的計算性能,並增加了許多新功能。它進一步減小了 GPU 編程和應用程式移植難度,也通過製程的升級提高了 GPU 資源利用率。另外,GV 100 也是一款能效極高的處理器,其在單位功耗的性能上表現卓越。圖 2 給出了 ResNet-50 深度神經網絡在 Tesla V100 上進行訓練的性能表現。
對於 12nm 製程的選擇(AMD 準備在 2018 年推出使用 7nm 製程的顯卡),英偉達的首席工程師表示他們已在功耗和性能之間做出了最佳選擇。
圖 2. Tesla V100 在 ResNet-50 深度神經網絡訓練任務中的速度比 Tesla P100 快 2.4 倍。如果每張圖像的目標延遲是 7ms,那麼 Tesla V100 使用 ResNet-50 深度神經網絡進行推理的速度比 P100 快 3.7 倍(參與測試的 V100 為原型卡)。
Tesla V100 的主要計算特徵包括:
為深度學習優化過的新型流式多處理器(SM)架構。Volta 對 GPU 核心的 SM 處理器架構進行了重要的重新設計。新的 Volta SM 架構比前代 Pascal 設計能效高 50%,在同樣的功率範圍下 FP32 和 FP64 性能有重大提升。新的 Tensor Core 是專門為深度學習設計的,為浮點運算速度帶來了 12 倍的提升。有了獨立的、並行的整型和浮點型數據通路,Volta SM 在負載上也更高效,混合了計算與地址運算。Volta 新的獨立線程調度能力使得並行線程之間的細粒度同步協同(finer-grain synchronization and cooperation)成為可能。最終,新型的 L1 Data Cache 與 Shared Memory 子系統的結合也能極大地提升性能,同時還簡化了編程。第二代 NVLink。第二代英偉達 NVLink 高速互連技術能提供更高的帶寬、更多連接,同時還改進了多 GPU 和多 GPU/CPU 系統配置的延展性。HBM2 顯存:更快、更高效。Volta 高度調整的 16GB HBM2 顯存子系統提供了 900 GB/s 的峰值顯存帶寬。來自三星的新一代 HBM2 顯存和 Volta 中的新一代顯存控制器的組合實現的顯存帶寬是 Pascal GP100 的 1.5 倍,而且在許多負載上的顯存帶寬效率更高。Volta 多處理服務。Volta 多服務處理(MPS:Multi-Process Service)是 Volta GV100 的一項新特性,能夠為 CUDA MPS 伺服器的關鍵組件提供硬體加速,從而能為共享該 GPU 的多個計算應用提供更高的性能、隔離和更好的服務質量(QoS)。Volta MPS 還將 MPS 客戶端的最大數量從 Pascal 的 16 提升到了 Volta 的 48。增強統一存儲和地址轉換服務。Volta GV100 中的 GV100 統一存儲(GV100 Unified Memory)技術包括新型訪問計數器,讓訪問網頁最頻繁的處理器能更準確的遷移存儲頁。協作組(Cooperative Groups)和新的 Cooperative Launch API。協作組是 CUDA 9 中新的編程模型,用來組織通信線程組。Volta 增加了對新型同步模式的支持。最大性能和最大效率模式。在最大性能模式下,Tesla V100 加速器將不受限制的把 TDP(熱設計功耗)水平提高到 300W,從而加速需要最快計算速度和最高數據吞吐的應用。最大效率模式下,數據中心管理員可以調整 Tesla V100 加速器的功率使用,從而用單位功耗下最優的性能進行運算。為 Volta 優化過的軟體。Caffe2、MXNet、CNTK、TensorFlow 等這樣的深度學習框架的新版本,能夠利用 Volta 的性能來獲得更快的訓練速度、更高的多節點訓練性能。GPU 加速庫(比如 cuDNN、cuBLAS 等)的 Volta 優化版本利用 Volta GV100 架構的新特性能為深度學習和高性能計算應用提供更高的性能。
GV100 GPU 硬體架構
裝備有 Volta GV100 GPU 的英偉達 Tesla V100 加速器是目前世界上速度最快的並行計算處理器。GV100 的硬體創新十分顯著,除了為 HPC 系統和應用提供遠比現在更強的計算能力(如圖 3 所示)之外,它還可以大大加快深度學習算法和框架的運行速度。
圖 3:在各種 HPC 任務中,Tesla V100 平均比 Tesla P100 快 1.5 倍。(該性能基於 Tesla V100 原型卡)
Tesla V100 可以提供業界領先的浮點和整型計算性能。峰值計算速度(基於 GPU Boost 時鐘頻率):
雙精度浮點(FP64)運算性能:7.5 TFLOP/s;單精度(FP32)運算性能:15 TFLOP/s;混合精度矩陣乘法和累加:120 Tensor TFLOP/s。
與前一代 Pascal GP100 GPU 類似,GV100 GPU 由多個圖形處理集群(Graphics Processing Cluster,GPC)、紋理處理集群(Texture Processing Cluster,TPC)、流式多處理器(Streaming Multiprocessor,SM)以及內存控制器組成。一個完整的 GV100 GPU 由 6 個 GPC、84 個 Volta SM、42 個 TPC(每個 TPC 包含了 2 個 SM)和 8 個 512 位的內存控制器(共 4096 位)。每個 SM 有 64 個 FP32 核、64 個 INT32 核、32 個 FP64 核與 8 個全新的 Tensor Core。同時,每個 SM 也包含了 4 個紋理處理單元。
圖 4:帶有 84 個 SM 單元的完整 Volta GV100。
加上 84 個 SM,一個完整的 GV100 GPU 總共有 5376 個 FP32 核、5376 個 INT32 核、2688 個 FP64 核、672 個 Tensor Core 與 336 個紋理單元。每塊內存控制器都連接了一個 768 KB 的 2 級緩存,每個 HBM2 DRAM 堆棧都由一對內存控制器控制。一個完整的 GV100 GPU 包括了總共 6144 KB 的二級緩存。圖 4 展示了一個帶有 84 個 SM 單元的完整 GV100 GPU(不同產品可以使用不同的 GV100 配置)。Tesla V100 加速器使用了 80 個 SM 單元。
表 1. Tesla V100 與過去五年曆代 Tesla 加速器的參數對比
Volta SM(流式多處理器)
為提供更高的性能而設計的架構,Volta SM 比過去的 SM 設計有更低的指令與緩存延遲,也包括加速深度學習應用的新特性。
主要特性包括:
為深度學習矩陣計算建立的新型混合精度 FP16/FP32 Tensor Core。為更高的性能、更低的延遲而增強的 L1 數據緩存。為更簡單的解碼而改進的指令集,並減少了指令延遲。更高的速度和能效。
圖 5: Volta GV100 SM
Tensor Core:深度學習專用核心
新的 Tensor Core 是 Volta GV100 最重要的特徵,有助於提高訓練神經網絡所需的性能。Tesla V100 的 Tensor Core 能夠為訓練、推理應用的提供 120 Tensor TFLOPS。相比於在 P100 FP 32 上,在 Tesla V100 上進行深度學習訓練有 12 倍的峰值 TFLOPS 提升。而在深度學習推理能力上,相比於 P100 FP16 運算,有了 6 倍的提升。Tesla V100 GPU 包含 640 個 Tensor Core:每個流式多處理器(SM)包含 8 個。
Tensor Core 非常省電,電力消耗大有可能將不再是深度學習的一大瓶頸。Bryan Catanzaro 表示:「通過底層數學計算的優化,Tensor Core 相較之前的構架要省電很多。深度學習的一個重要的限制是 energy efficiency,Tensor Core 在解決這個問題的方面相當突出。」
矩陣-矩陣乘法運算(BLAS GEMM)是神經網絡訓練和推理的核心,被用來獲得輸入數據和權重的大型矩陣的乘積。如下圖 6 所示,相比於基於 Pascal 的 GP100,Tesla V100 中的 Tensor Core 把這些運算的性能提升了至少 9 倍。
圖 6:Tesla V100 Tensor Core 和 CUDA 9 對 GEMM 運算有了 9 倍的性能提升。(在 Tesla V100 樣機上使用預發布的 CUDA 9 軟體進行的測試)
Tensor Core 和與它們關聯的數據通道進行了精心的定製,從而極大地提升了極小區域和能量成本下浮點計算的吞吐量。它也廣泛地使用了時鐘門控來儘可能節能。
每個 Tensor Core 包含一個 4x4x4 的矩陣處理陣列來完成 D=A x B + C 的運算,其中 A、B、C、D 是 4×4 的矩陣,如下圖 7 中所示。矩陣相乘的輸入 A 和 B 是 FP16 矩陣,相加矩陣 C 和 D 可能是 FP16 矩陣或 FP32 矩陣。
圖 7:Tensor Core 的 4x4x4 矩陣乘法與累加。
每個 Tensor Core 每個時鐘可執行 64 次浮點 FMA 混合精度運算(FP16 乘法與 FP32 累加),一個 SM 單元中的 8 個 Tensor Core 每個時鐘可執行共計 1024 次浮點運算。相比於使用標準 FP32 計算的 Pascal GP100 而言,單個 SM 下的每個深度學習應用的吞吐量提升了 8 倍,所以這最終使得 Volta V100 GPU 相比於 Pascal P100 GPU 的吞吐量一共提升了 12 倍。Tensor Core 在與 FP32 累加結合後的 FP16 輸入數據之上操作。FP16 的乘法得到了一個全精度結果,該結果在 FP32 和其他給定的 4x4x4 矩陣乘法點積的乘積運算之中進行累加。如圖 8 所示。
圖 8. Volta GV100 Tensor Core 流程圖
在程序執行期間,多個 Tensor Core 通過一組 warp 線程的執行而同時使用。warp 內的線程提供了 Tensor Core 來處理大型 16×16×16 矩陣運算。CUDA 將這些操作作為 Warp-Level 矩陣運算在 CUDA C++ API 中公開。這些 C++接口提供了專門化的矩陣負載,如矩陣乘法和累加,矩陣存儲操作可以有效地利用 CUDA C++程序中的 Tensor Core。
除 CUDA C++接口可直接編程 Tensor Core 外,CUDA 9 cuBLAS 和 cuDNN 庫還包含了使用 Tensor Core 開發深度學習應用和框架的新庫接口。英偉達已經和許多流行的深度學習框架(如 Caffe2 和 MXNet)合作以使用 Tensor Core 在 Volta 架構的 GPU 系統上進行深度學習研究。英偉達將繼續與其他框架開發人員合作以便在整個深度學習生態系統更廣泛地使用 Tensor Core。
增強的 L1 數據緩存和共享顯存
Volta SM 的 L1 數據緩存和共享顯存子系統的組合能顯著提高性能,同時也簡化了編程並減少了達到或接近峰值應用性能所需的時間成本。
在共享顯存塊中進行集成可確保 Volta GV100 L1 緩存具有比過去英偉達 GPU 中的 L1 高速緩存更低的延遲和更高的帶寬。L1 Volta 作為流式數據的高吞吐量導管(conduit),同時為經常復用的數據提供高帶寬和低延遲訪問,這兩個性能都是目前最好的。英偉達表示,這一特性是 Volta 獨有的,其提供比以往更強大的性能。
圖 9. 在 Volta 上,這些代碼在沒有使用共享顯存的情況下只有 7%的性能損失,而 Pascal 的性能下降了 30%。雖然共享顯存仍然是最佳選擇,但新 Volta L1 設計使程式設計師能夠以更少的編程工作而快速獲得足夠出色的性能。
表 2. 全新 GV100 與此前各代架構 GPU 的形式比較,GV100 GPU 支持全新的 Compute Capability 7.0。
獨立的線程調配
Volta 架構旨在設計為比以前的 GPU 更容易編程,令用戶能在更複雜和多樣的應用程式上高效地工作。Volta GV100 是第一款支持獨立線程調配的 GPU,其在並行線程指令中可以實現細粒度(finer-grain)的同步和協作。Volta 主要的設計目標是減少在 GPU 中運行指令所需的工作量,並在線程合作中實現更大的靈活度,這樣從而為細粒度並行算法提供更高的效率。
英偉達同時也展示了他們如何對 SIMT(單指令多線程)做出重大改進以推進 Volta 架構。32 線程內單個獨立的 CUDA 核現在只有有限的自主性;線程現在可以在一個細粒度層面上進行同步,並且仍然處於 SIMT 範式下,所以這就意味著更高的整體效率。更重要的是,獨立的線程現在可以放棄再重新安排在一起。這就意味著英偉達的 GPU 有一定數量的調度硬體(scheduling hardware)。
圖 10:Pascal 和早期的英偉達 GPU 在 SIMT warp 執行模式下的線程調配。大寫字母代表指令偽代碼中的語句。在一個 warp 中不同的分支是序列化的,這樣在分支一邊的所有語句一起執行以在另一邊語句執行前完成。在 else 語句後,warp 中的線程通常會重新映射。
圖 11:Volta(下方)獨立線程調配架構圖與 Pascal 和早期的架構(上方)相比較。Volta 會維持每個線程調配的資源,就像程序計數器(PC)和調用堆棧(S)那樣,而早期的架構以每個 warp 為單位維持。
圖 12:Volta 獨立線程調配令其可以交叉執行發散分支(divergent branches)的語句。這就允許執行細粒度並行算法,而 warp 內的線程也就能同步和通信。
圖 13:程序可以使用顯式同步來重新令 warp 中的線程收斂
圖 14:具有細粒度鎖(fine-grained locks)的雙向鍊表。在插入結點 B 到鍊表(右)前,需要獲取每一個結點鎖(左)
總結
根據目前公布的數字,Tesla V100 可以提供 15 TFLOPS 的 FP32、30 TFLOPS FP16、7.5 TFLOPS FP64 和高達 120 TFLOPS 的專用 Tensor 運算性能。由於 1455 MHz 的峰值運算速度,它相比前一代的 CUDA 理論 FLOPS 數據增長了 42%。Tesla V100 配備了 16G 的 HBM2 顯存,它的內存時鐘速度從 1.4 Gbps 提升至 1.75 Gbps,提升了 25%。
在 GTC 大會上,黃仁勳表示英偉達在研發 Tesla GV100 的過程中投入了 30 億美元的巨資,這是迄今為止英偉達投資最大的單個項目。第一塊量產型加速卡預計將在今年第三季度通過新一代超算模塊 DGX-1V 的形式進入市場,售價不菲(DGX-1V 售價 149,000 美元,內含 8 塊 Tesla V100,換算下來每塊 V100 約為 18,000 美元)。但因為其強大的計算能力,屆時必將出現不少買家。