英特爾與 Facebook 合作採用第三代英特爾® 至強® 可擴充套件處理器和支援 BFloat16 加速的英特爾® 深度學習加速技術,提高 PyTorch 效能

示說網發表於2020-11-12

英特爾與 Facebook 曾聯手合作,在多卡訓練工作負載中驗證了 BFloat16 (BF16) 的優勢:在不修改訓練超引數的情況下,BFloat16 與單精度 32 位浮點數 (FP32) 得到了相同的準確率。現在,英特爾釋出了第三代英特爾® 至強® 可擴充套件處理器(代號 Cooper Lake),該處理器整合了支援 BF16 的英特爾® 深度學習加速技術(英特爾® DL Boost),可大幅提升訓練和推理能力,並且也支援去年推出的英特爾® 深度學習 INT8 加速技術。

英特爾和 Facebook 不斷在提高 PyTorch 效能方面展開合作。此次雙方聯手採用支援 BF16 加速技術的第三代英特爾® 至強® 可擴充套件處理器來訓練模型,效能較 FP32 提升了高達 1.64 倍。此次合作提高了 CPU 訓練速度和推理效能,有利於 PyTorch 社群發展。

在本文中,我們將詳細介紹第三代英特爾® 至強® 可擴充套件處理器整合英特爾® 深度學習加速技術支援的 BF16 加速,以及英特爾與 Facebook 如何通過協作,將該功能的優勢引入 PyTorch 社群。

硬體升級

如今,大多數機器學習應用都使用單精度 32 位浮點數 (FP32) 來處理訓練和推理工作負載。許多使用深度學習的人已經發現降低數值精度在訓練 [BF16] 和推理 [INT8] 方面的作用很大。使用 16 位乘法器與 32 位累加器進行訓練和推理對準確率影響很小,甚至沒有影響;而採用 8 位乘法器與 32 位累加器處理某些推理工作負載時,準確率或有影響,或者影響極小。所以,這種方法在 DLRM 等工作負載中被廣泛採用。

降低精度可從兩方面提高效能:1) 增加乘積累加 (MAC) 吞吐量會提升受算力限制的運算量,2) 從 32 位到 16 位減少了資料量,提高了資料記憶體各層間傳輸速度,最終提升受記憶體頻寬限制的運算量。

英特爾在第三代英特爾® 至強® 可擴充套件處理器中引入原生 BF16 支援——BF16→FP32 融合乘加 (FMA)(如圖 1 所示)、FP32→BF16 轉換和英特爾® 高階向量擴充套件 512(英特爾® AVX-512)指令,與 FP32 FMA 相比,理論上會使計算吞吐量翻倍。此外,第三代英特爾® 至強® 可擴充套件處理器還為上一代產品中推出的 INT8 FMA 提供原生支援,與 FP32 FMA 相比,理論上會使計算吞吐量提高四倍。

圖 1:在每個 FMA 單元核心的時鐘週期中,英特爾® AVX-512 VDPBF16PS 指令將 32 個 BF16 值對相乘並累加到 16 個 fp32 值。

 

多平臺支援

主流 OEM 系統提供商有望提供主要採用 4 路和 8 路配置的第三代英特爾® 至強® 可擴充套件處理器,以平衡成本和效能。4 路或 8 路系統的大記憶體容量使您可以在主記憶體中存放大型嵌入表(例如在稀疏神經網路中),由此加快訓練速度。英特爾® 深度學習加速技術 BF16 指令會使訓練和支援模型的效能提升。根據模型和準確率要求,推理工作負載也能從英特爾® 深度學習加速技術支援的 BF16 或 INT8 加速中受益。

軟體升級

英特爾與 Facebook 積極合作,採用先進的全新硬體來提高 BF16 加速在 CPU 上的效能,並提供簡單的程式設計介面來實現 BF16 加速。PyTorch 為使用者提供簡單的 API,便於他們在深度學習中使用 BF16 資料型別,並以此替代 FP32 模型。機器學習使用者通常會先設計和訓練採用 FP32 資料型別的深度神經網路 (DNN),然後再將模型轉換成低精度資料型別,從而提高效能。與通常需要進行損失縮放調整才能達到與 FP32 相當的訓練準確率的 FP16 不同,BF16 無需調整即可工作。使用者只需要將模型輸入資料轉換為 BF16,就可以把現有 FP32 模型用 BF16 進行訓練。1.3+ 版本 PyTorch 會在模型的所有運算元中自動傳播 BF16 資料型別。

PyTorch ATen 由一些基礎標量或向量運算元實現,這些基礎運算元與模板運算元的資料型別相關。針對大多數運算元,英特爾增加了對 BF16 的支援,並過載了這些基礎運算元。以 BF16 ReLU 為例,它就是建立在最小和最大 BF16 運算元基礎上的。對於存在內部簡化的運算元要特別注意,因為這些運算元需要累積到更高精度 (FP32) 以保證模型準確率。

英特爾使用 oneAPI 深度神經網路庫(oneDNN,以前也稱為英特爾® MKL-DNN 庫)進一步優化卷積、矩陣乘法、批歸一化、ReLU、池化等常用的 torch.nn 運算。1.5+ 版本 PyTorch 包含已進行 BF16 加速優化的 oneDNN,可使用第三代英特爾® 至強® 可擴充套件處理器的原生 BF16 指令處理常用運算。如圖 1 所示,在每個 FMA 單元核心時鐘週期內,英特爾® AVX-512 VDPBF16PS 指令將 32 個 BF16 值對相乘,並累加到 16 個 FP32 值。VCVTNE2PS2BF16 指令將 32 個 FP32 值轉換為 32 個 BF16 值。對於 oneDNN 庫未涵蓋的運算,使用 BF16 同樣可使那些受記憶體限制的層受益。對於 oneDNN 不支援的 BF16 運算,BF16 將用於資料傳輸並使用 FP32 FMA 指令模擬 BF16 計算。這些優化會盡可能減少資料傳輸,確保 SIMD 指令、執行單元、暫存器和記憶體快取分層架構得到高效運用。

與 FP32 FMA 相比,第三代英特爾® 至強® 可擴充套件處理器整合的 BF16→FP32 轉換 FMA 指令,理論上會使吞吐量翻一番;而僅採用 BF16 格式就能將記憶體訪問效能提升多達 2 倍。oneDNN 庫為 BF16 卷積和 GEMM 運算(以及融合啟用函式的運算)提供一種高度優化的實現。在訓練期間,權重副本是儲存在 FP32 中的,以方便權重更新。因此,模型執行還需要處理 FP32 資料型別。

Facebook 人工智慧研究院 (FAIR) 實驗室已經發布了深度學習推薦模型 (DLRM)。團隊優化了 DLRM 所有元件的效能,包括多層感知器 (MLP) 層、反饋元件和嵌入元件。在高度優化的 DLRM FP32 訓練模型的基礎上,BF16 利用 FP32 可為優化器帶來超過 1.4 倍的端到端效能提升和高達 2.85 倍的 INT8 推理效能提升。

結果

表 1 顯示的是採用 BF16 後 ResNet-50 網路在 4 路第三代英特爾® 至強® 可擴充套件處理器上執行時效能提升 1.64 倍、ResNeXt-101 32x4d 網路效能提升 1.60 倍;DLRM 在單路第三代至強® 可擴充套件處理器上執行時,效能提升 1.4 倍。這些結果利用了原生整合 oneDNN 的 PyTorch。

 

 訓練

每個例項的核心數

例項數

BF16(樣本/秒)

FP32(樣本/秒)

提速比率

DLRM

28

1

99321

71061

1.40

ResNet-50

28

4

399

243

1.64

ResNeXt-101 32x4d

28

4

193

120

1.60

 

表 1. 使用批處理樣本數為 2K 的 MLPerf DLRM 模型時,單例項 BF16 訓練效能與基準(FP32,使用英特爾® 數學核心函式庫(英特爾® MKL))相比的提升情況;使用批處理樣本數為 128/例項的 ResNet50/ResNext101 32x4d 模型時,四例項 BF16 訓練效能與基準(FP32,使用英特爾® oneDNN)相比的提升情況。DLRM 模型超引數採用的是 MLPerf 配置。

此外,英特爾還用低精度 INT8 資料型別優化了 DLRM 推理。嵌入層量化為 INT8,這使大型嵌入層的記憶體佔用減少了近 4 成。計算密集型 MLP 通過 INT8 指令得到加速,提速幅度超過 3.5 倍。端到端模型的提速幅度為 2.85 倍,如表 2 所示。

 

 
推理

每個例項的核心數

例項數

INT8(樣本/秒)

FP32(樣本/秒)

提速比率

DLRM

1

28

611082

214559

2.85

 

表 2. 在單路第三代英特爾® 至強® 可擴充套件處理器上執行批處理樣本數為 16 的 DLRM Facebook 模型時,28 個例項 INT8 推理效能與基準(FP32,使用英特爾® MKL)相比的提升情況。測試中整合了 PyTorch 多例項共享-權重解決方案以及面向採用 8 位實現的 MLP 和 Embeddingbag 方法。

結論

英特爾將與 Facebook 持續合作,加速跨多種資料型別的 PyTorch 訓練和推理。我們針對 PyTorch 啟用並優化了 BF16 資料型別。與 FP32 相比,BF16 將具有代表性的計算機視覺模型的訓練效能提升多達 1.64 倍,將 DLRM 模型的訓練效能提升多達 1.4 倍。得益於第三代英特爾® 至強® 可擴充套件處理器整合的 INT8 推理加速技術,與 FP32 相比,DLRM 模型的推理效能提升多達 2.85 倍

 

點選檢視原文

點選檢視原文

 

 

作者簡介

Andres Rodriguez 博士是英特爾資料平臺事業部 (DPG) 的高階首席工程師兼首席人工智慧架構師。他參與設計了針對雲端計算和企業客戶的深度學習解決方案,並在整個英特爾深度學習產品領域中提供技術指導。他在人工智慧領域擁有 15 年的經驗。Andres 在卡內基梅隆大學獲得機器學習方向博士學位,撰寫過 20 多篇經過同行評審的期刊和會議文章,以及有關機器學習的專著章節。

Jianhui Li 博士是英特爾架構、圖形和軟體事業部的首席工程師,負責領導深度學習框架整合和工作負載優化工作。他曾是二進位制翻譯和 JIT 編譯器方面的軟體開發人員,領導開發了 Houdini(這款應用可以在基於人工智慧的平臺上透明地執行 Android* ARM 應用,帶來出色的使用者體驗)。Jianhui 畢業於復旦大學,獲得了電腦科學博士學位。他在二進位制翻譯和實際應用優化方面擁有 21 項美國專利。

Jiong Gong 是英特爾架構、圖形和軟體事業部的高階軟體工程師。他擔任基於英特爾® 架構優化 PyTorch 框架的軟體架構師,並且是英特爾® 架構上低精度推理解決方案的主要貢獻者之一。他在人工智慧領域擁有 8 年的全棧經驗,涵蓋從人工智慧應用到框架、庫和編譯器優化。Jiong 畢業於上海交通大學,獲得了電腦科學碩士學位。

Hongzhen Liu 是英特爾架構、圖形和軟體事業部的高階軟體工程師,負責開發和優化面向英特爾® 架構的深度學習框架,以及在此框架下的低精度(BFloat16、FP16、INT8)解決方案。他在平行計算、全棧軟體優化以及人工智慧應用中的高效能數學核心函式庫設計方面擁有豐富的經驗。Hongzhen 畢業於東南大學,獲得了模式識別與智慧系統碩士學位。

Shivani Sud 是一名從事雲端計算技術和機器學習系統架構的系統架構師。她是電信網路向軟體定義基礎設施轉型方案的主要貢獻者之一。在這之前,她的研究貢獻主要集中於下一代移動裝置、多裝置使用和平臺安全性。她擁有 7 項美國專利,撰寫並發表過多篇經過同行評審的文章。

 

配置詳情

ResNet50/ResNext101 (FP32/BF16):批處理樣本數為 128/例項,4 個例項。
ResNet50/ResNext101 dataset (FP32/BF16):ImageNet 資料集
DLRM 批處理樣本數 (FP32/BF16):2K/例項,1 個例項
DLRM 資料集 (FP32/BF16):Criteo TB 資料集
DLRM 批處理樣本數 (INT8):16/例項,28 個例項,虛擬資料。
基於英特爾 2020 年 6 月 2 日進行的測試。
英特爾® 至強® 鉑金 8380H 處理器,4 路,28 核,啟用超執行緒技術,啟用睿頻,總記憶體 768 GB(24 插槽/32 GB/3200 MHz),BIOS:WLYDCRB1.SYS.0015.P96.2005070242 (ucode: 0x700001b),Ubuntu 20.04 LTS,核心 5.4.0-29-generic
PyTorch:https://github.com/pytorch/pytorch.git
英特爾面向 PyTorch 的擴充套件程式:https://github.com/intel/intel-extension-for-pytorch.git
gcc: 8.4.0,
oneDNN 版本:v1.4
ResNet50:https://github.com/intel/optimized-models/tree/master/pytorch/ResNet50
ResNext101 32x4d:  https://github.com/intel/optimized-models/tree/master/pytorch/ResNext101_32x4d
DLRM:  https://github.com/intel/optimized-models/tree/master/pytorch/dlrm

參考資料

https://software.intel.com/content/www/cn/zh/develop/articles/intel-and-facebook-collaborate-to-boost-pytorch-cpu-performance.html

https://www.facebook.com/yann.lecun/posts/10155891487497143

 

一般提示和法律宣告

效能測試中使用的軟體和工作負荷可能僅在英特爾微處理器上進行了效能優化。諸如 SYSmark 和 MobileMark 等測試均系基於特定計算機系統、硬體、軟體、作業系統及功能。  上述任何要素的變動都有可能導致測試結果的變化。請參考其他資訊及效能測試(包括結合其他產品使用時的執行效能)以對目標產品進行全面評估。更多資訊,詳見:  http://www.intel.com/performance

本文件包含尚在開發之中的產品、服務和/或程式的相關資訊。本文中提供的所有資訊可在不通知的情況下隨時發生變更。關於英特爾的最新預測、計劃、產品規格和路線圖,請聯絡您的英特爾代表。

英特爾編譯器針對英特爾微處理器的優化程度可能與針對非英特爾微處理器的優化程度不同。這些優化包括 SSE2、SSE3 和 SSSE3 指令集和其他優化。對於非英特爾微處理器上的任何優化是否存在、其功能或效力,英特爾不做任何保證。本產品中取決於微處理器的優化是針對英特爾微處理器。不具體針對英特爾微架構的特定優化為英特爾微處理器保留。請參考適用的產品使用者與參考指南,獲取有關本宣告中具體指令集的更多資訊。

© 英特爾公司版權所有。英特爾、英特爾標識以及其他英特爾商標是英特爾公司或其子公司在美國和/或其他國家的商標。其他的名稱和品牌可能是其他所有者的資產。

 

點選檢視原文

點選檢視原文

相關文章