揭曉飛槳平臺提速秘訣:INT8 量化加速實現(xiàn)“事半功倍”
為幫助廣大企業(yè)和開發(fā)者更加便捷和快速地創(chuàng)建深度學習應(yīng)用,百度飛槳正不斷地提升平臺的訓練和推理能力,并與英特爾緊密合作,在至強? 平臺集成的AI加速能力的支持下,以 INT8 量化方案,在不影響預測準確度的情況下,將多個深度學習模型的推理速度加速到使用 FP32 時的 2-3 倍,大大提升了用戶深度學習應(yīng)用的工作效能。
在圖像分類等深度學習應(yīng)用中,使用 INT8 替代 FP32 來提升推理效率、降低功耗和部署復雜度,是目前 AI 技術(shù)發(fā)展的重要方向。飛槳基于第二代英特爾? 至強? 可擴展處理器的高性能算力以及英特爾? 深度學習加速( VNNI 指令集)的技術(shù),對應(yīng)的 INT8 方案在不影響推理準確度的情況下,推理速度實現(xiàn)顯著的提升。
-- 高鐵柱 高級經(jīng)理 百度深度學習平臺部
作為一家持續(xù)創(chuàng)新, 致力于“用科技讓復雜世界更簡單”的高科技公司, 百度* 正不遺余 力地推進人工智能(Artificial Intelligence, AI)最前沿技術(shù)的發(fā)展與探索, 并為各行業(yè) 與 AI 的無縫對接提供基礎(chǔ)支撐。其中,飛槳*(PaddlePaddle*)作百度推出的開源深度 學習平臺, 就能幫助企業(yè)與開發(fā)者快速、便捷地創(chuàng)建自己的深度學習應(yīng)用。
隨著飛槳在 AI應(yīng)用領(lǐng)域的不斷拓展, 百度發(fā)現(xiàn), AI 訓練與推理所需的巨大計算量和部署 復雜度, 給其在企業(yè)市場上的商用部署造成了較高的門檻, 對可用性造成了影響。同時, 它也看到, 在用于圖像識別、圖像分類等場景的深度學習模型中, INT8 等低精度的定點 計算在推理準確度上與傳統(tǒng)的 32 位浮點計算相差無幾, 但在計算速度、功率消耗上卻有 著更大的優(yōu)勢。
通過與英特爾開展緊密合作, 百度在其飛槳深度學習平臺中發(fā)布了 INT8 離線量化方案。 實際驗證表明, 基于第二代英特爾? 至強?可擴展處理器平臺, 并利用其集成的、對 INT8 有優(yōu)化支持的英特爾? 深度學習加速技術(shù)(VNNI指令集), 可在不影響預測準確度的情 況下, 使多個深度學習模型在使用 INT8 時的推理速度,加速到使用 FP32 時的 2-3 倍之多1,大大提升了用戶深度學習應(yīng)用的工作效能。
百度飛槳開源深度學習平臺實現(xiàn)的解決方案優(yōu)勢:
? 在圖像分類等場景所用的深度學習模型中,采用 INT8 等低精度定點計算方式,可以更高效地利用高速緩存,減少帶寬瓶頸,并更大限度地利用計算資源,降低功率消耗;
? 在 ResNet-50* 和 MobileNet-V1* 等多個深度學習模型上的實踐表明,基于第二代英特爾? 至強? 可擴展處理器,特別是它所集成的英特爾? 深度學習技術(shù)的支持,INT8可以實現(xiàn)與 FP32 相近的深度學習模型推理準確度,兩者差值在 1% 以內(nèi)2;
? 在這些深度學習模型上的實踐,同時還表明,基于第二代英特爾? 至強? 可擴展處理器及英特爾?深度學習技術(shù)的支持,INT8 可實現(xiàn)更快的深度學習模型推理速度,其推理速度約為 FP32 的 2.2 倍~2.79倍3。
飛槳深度學習框架
作為一個易學易用、安全高效的分布式深度學習平臺,百度飛槳具備優(yōu)異的訓練和推理性能。它在核心框架基礎(chǔ)上,提供了 VisualDL*、PARL*、AutoDL*、EasyDL* 以及 AI Studio* 等全流程深度學習工具組件和服務(wù)平臺,能夠滿足不同開發(fā)者和企業(yè)學習、開發(fā)及部署 AI 應(yīng)用與服務(wù)的需求。目前,該框架已在智能推薦、機器視覺、自然語言處理等一系列 AI 應(yīng)用場景的探索中,獲取了豐碩的實踐成果,得到了眾多 AI 開發(fā)者的青睞。
為了進一步提升飛槳在商業(yè)部署中的可用性,百度團隊從多個維度著手,進一步探索提升其工作效率、降低其部署門檻和復雜度的“捷徑”。傳統(tǒng)上,深度學習的訓練和推理過程都采用精度較高的浮點數(shù)值,例如 FP32。高精度數(shù)值意味著 AI 系統(tǒng)會承載更大的計算、存儲壓力,有更高的功率消耗以及更復雜的系統(tǒng)設(shè)計。而隨著 AI 應(yīng)用部署的“戰(zhàn)場”越來越廣,網(wǎng)絡(luò)邊緣節(jié)點乃至移動終端都開始接入 AI 應(yīng)用,這對 AI 系統(tǒng)的計算、存儲能力和功耗提出了更為苛刻的要求。為此,飛槳也在尋求更多樣、更適合的方式來提升自身的可用性和資源利用效率。
在圖像識別、圖像分類等場景的深度學習場景中,采用 INT8 等較低精度的數(shù)值替代 FP32 是一種可行的方案。低精度數(shù)值可以更好地使用高速緩存,增加內(nèi)存數(shù)據(jù)傳輸效率,減少帶寬瓶頸,從而能夠更為充分地利用計算和存儲資源,并降低系統(tǒng)功率。這意味著,在同樣資源的支持下,INT8 可為深度學習的推理帶來更多的每秒操作數(shù)(Operations Per Second,OPS)。
為幫助用戶便捷地采用 INT8 構(gòu)建其深度學習應(yīng)用,并取得與 FP32同樣優(yōu)異的推理性能,百度與英特爾開展了深入的技術(shù)合作,利用第二代英特爾? 至強? 可擴展處理器集成的英特爾? 深度學習加速技術(shù)對 INT8 更優(yōu)的支持,在最新版本的飛槳中,為用戶提供了離線 INT8 深度學習推理能力,并在隨后進行的一系列驗證測試中,印證了這一方案的應(yīng)用優(yōu)勢。
更具效能的 INT8 推理方案
與 FP32 相比,INT8 有著更小的數(shù)值精度和動態(tài)范圍,因此在深度學習中采用 INT8 推理方式,需要著重解決計算執(zhí)行時的信息損失問題。在飛槳新版中,離線 INT8 推理功能通過校準的方式來形成待推理的 INT8 模型,實現(xiàn)了在將 FP32 轉(zhuǎn)換為INT8 時盡可能減少其信息損失的目標。
以圖像分析應(yīng)用為例,從高精度數(shù)值向低精度數(shù)據(jù)轉(zhuǎn)換,實際是一個邊計算邊縮減的過程。換言之,如何確認縮減的范圍是盡可能減少信息損失的關(guān)鍵。在 FP32 向 INT8 映射的過程中,根據(jù)數(shù)據(jù)集校準的方式,來確定映射縮減的參數(shù)。在確定參數(shù)后,平臺再根據(jù)所支持的 INT8 操作列表,對圖形進行分析并執(zhí)行量化/反量化等操作。量化操作用于 FP32 向 S8(有符號 INT8)或 U8(無符號 INT8)的量化,反量化操作則執(zhí)行反向操作。
基于以上概念,如圖一所示,飛槳將校準過程分成了張量統(tǒng)計收集和圖形轉(zhuǎn)換兩個步驟。前者會輸入預設(shè)的校準數(shù)據(jù)集(可根據(jù)用戶需求來確定校準數(shù)據(jù)集的 Batch Size 大小和迭代次數(shù))和經(jīng)優(yōu)化的 FP32 模型及權(quán)重,平臺會在校準數(shù)據(jù)集上執(zhí)行 FP32 推理,并獲得激活張量(Ac tivation Tensor)和權(quán)重張量(Weight Tensor)兩個參數(shù)。
圖一 飛槳離線 INT8 推理校準流程
在隨后的圖形轉(zhuǎn)換過程中,平臺首先會通過用戶所指定的量化算法,并根據(jù)上述兩個參數(shù)來確定量化比例。其次,在對需要計算的圖形進行分析后,平臺會根據(jù)所支持的 INT8 操作列表(飛槳定義了兩個新的 Kernel:Conv2D* 和 Pool2D*)進行量化/反量化的插入操作,從而將量化比例添加到 Conv 作為 OP 屬性。最后,平臺將量化后的 INT8 模型保存,以便進行后續(xù)推理部署。
除了量化和反量化操作,飛槳還定義了 INT8 Kernel Conv 和 INT8Kernel Pool 兩種操作,前者輸入 S8/U8 數(shù)值,采用 S8 的權(quán)重;輸出為 S8/U8/FP32 三類數(shù)值,用于支持 INT8 Conv2D 計算;后者輸入輸出均為 S8/U8 數(shù)值,用于支持 INT8 Pool2D 計算。
來自英特爾新一代至強的技術(shù)助力
在新版飛槳中,百度導入了英特爾? 深度學習加速技術(shù)——這一集成在第二代英特爾? 至強? 可擴展處理器中的全新 AI 技術(shù)的支持。英特爾這款全新處理器不僅以優(yōu)化的微架構(gòu)、更多及更快的內(nèi)核和內(nèi)存通道帶來了計算性能的提升,更面向 AI 應(yīng)用提供了更為全面的硬件加速能力。
英特爾? 深度學習加速技術(shù)通過 VNNI 指令集提供了多條全新的寬融合乘加 (FMA) 內(nèi)核指令,可用于支持 8 位或 16 位低精度數(shù)值相乘,這對于需要執(zhí)行大量矩陣乘法的深度學習計算而言尤為重要。它的導入,使得用戶在執(zhí)行 INT8 推理時,對系統(tǒng)內(nèi)存的要求最大可減少75%4,而對內(nèi)存和所需帶寬的減少,也加快了低數(shù)值精度運算的速度,從而使系統(tǒng)整體性能獲得大幅提升。
利用第二代英特爾? 至強? 可擴展處理器提供的強勁算力,以及英特爾? 深度學習技術(shù)提供的加速能力,百度團隊已在 ResNet-50 和 MobileNet-V1 兩種圖像分類應(yīng)用常用的網(wǎng)絡(luò)模型上,對離線 INT8推理進行了縝密的測試驗證。在推理準確度驗證中,平臺采用了英特爾? 至強? 金牌 6271 處理器,測試在擁有 50,0005張圖像的 Full ImageNet Val* 完整驗證數(shù)據(jù)集上完成。如表 1 所示,從測試結(jié)果來看,在 ResNet-50 和 MobileNet-V1 兩種模型的 TOP-1 準確率(預測出最大概率的分類是正確的概率)上,INT8 分別只有 0.4% 和 0.31% 的準確度損失6,基本可視為沒有準確度損失。
表一 FP32 和 INT8 推理準確度結(jié)果比較6
在接下來的推理吞吐量(速度)性能測試中,平臺采用英特爾? 至強? 金牌 6271 處理器單核部署,并根據(jù)百度的業(yè)務(wù)部署要求,Batch Size 配置為 1 來衡量吞吐量。如表 2 所示,測試結(jié)果表明,在 Full ImageNet Val 完整驗證數(shù)據(jù)集上,ResNet-50 和 MobileNet-V1 兩種模型的 INT8 推理吞吐量是 FP32 的 2.2 倍到 2.79 倍7。由此可見,在不影響預測準確度的情況下,使用 INT8,可讓多種深度學習模型的推理速度得到顯著提升,這就意味著能有效提升用戶深度學習應(yīng)用的工作效能。
表二 FP32 和 INT8 推理吞吐量結(jié)果比較7
總結(jié)與展望
在過去數(shù)年中,百度與英特爾就深度學習等先進技術(shù)與平臺的發(fā)展,一直在開展緊密的技術(shù)協(xié)作。在飛槳平臺開發(fā)過程中,英特爾工程師以豐富的硬件調(diào)優(yōu)經(jīng)驗,助力解決了許多關(guān)鍵問題,例如并行性能問題、處理器緩存競爭帶來的性能問題等,從而在框架層次上整體提升了飛槳的預測性能。同時,在英特爾的支持下,百度也基于英特爾? 數(shù)學核心函數(shù)庫(Intel? Math Kernel Library,英特爾? MKL)和面向深度神經(jīng)網(wǎng)絡(luò)的英特爾? 數(shù)學核心函數(shù)庫(Intel? Math Kernel Library for Deep Neural Network, 英特爾? MKL-DNN)提供的特性,對不同類型的深度學習模型進行了特定的性能優(yōu)化,并已在自然語言處理、圖像處理等模型上獲得了顯著的進展。
而在基于英特爾? 架構(gòu)處理器的推理效率提升方面,雙方的技術(shù)協(xié)作更是結(jié)出了豐碩的成果。目前,百度內(nèi)部業(yè)務(wù)和開源平臺上的一些深度學習模型已實現(xiàn)了英特爾? 架構(gòu)處理器資源利用率與性能的提升。
同時,針對特定型號的服務(wù)器經(jīng)優(yōu)化后,已在平臺中實現(xiàn)了現(xiàn)有最佳(State Of The Art,SOTA)效率并逐步上線。同時,在最新的飛槳中,還集成了面向各種設(shè)備和框架的英特爾? nGraph 深度學習模型編譯器,大大提升了用戶部署深度學習環(huán)境的效率。
未來,百度與英特爾在AI方面的合作,還將圍繞四個方向持續(xù)展開。首先,百度計劃將英特爾的量化和壓縮方面的技術(shù),集成到飛槳的整體工具鏈中;其次,英特爾? MKL-DNN 作為英特爾面向深度學習的核心數(shù)學函數(shù)庫,也將進一步提供低精度數(shù)值函數(shù)支持,可作為處理器上的高性能 Kernel,成為更多飛槳 OP 的首選;第三,英特爾? nGraph 編譯器也將靈活地作為子圖,參與飛槳在英特爾? 架構(gòu)平臺上的高性能執(zhí)行;最后,雙方團隊還計劃在百度內(nèi)部和外部完成更多飛槳部署實例的優(yōu)化,攜手為用戶帶去更多、更優(yōu)異的深度學習平臺能力。
1,2,3,7 數(shù)據(jù)源自 2019 年 4 月 4 日, 百度基于第二代英特爾? 至強? 可擴展處理器開展的測試。
測試平臺配置: 雙路英特爾? 至強? 金牌 6271 處理器, 主頻為 2.6GHz, 24 核心/48 線程, 啟用睿頻, 啟用超線程, 搭載 512 GB 內(nèi)存(16 slots/ 32GB/ 2666 MHz)。
操作系統(tǒng)為 CentOS 6.3, 5.16 (ucode 0x4000013), 測試基于深度學習框架飛槳 1.4.0 版本, Kernel 版本為 3.10.0, 編譯器版本為 GCC4.8.2, 使用英特爾? MKL-DNN 庫 0.18 版本;工作負載: 在 Full ImageNet Val 完整驗證數(shù)據(jù)集上使用 ResNet50 and MobileNet-V1, Batch Size=1, Datatype: INT8
基準配置: 雙路英特爾? 至強? 金牌 6271 處理器, 主頻為 2.6GHz, 24 核心/48 線程, 啟用睿頻, 啟用超線程, 搭載 512 GB 內(nèi)存(16 slots/ 32GB/ 2666 MHz)。
操作系統(tǒng)為 CentOS 6.3, 5.16 (ucode 0x4000013), 測試基于深度學習框 飛槳 1.4.0 版本, Kernel 版本為 3.10.0,編譯器版本為 GCC4.8.2,使用英特爾? MKL-DNN 庫0.18版本;工作負載: 在 Full ImageNet Val 完整驗證數(shù)據(jù)集上使用ResNet50 and MobileNet-V1, Batch Size=1, Datatype: FP32
4 數(shù)據(jù)源引自 https://software.intel.com/en-us/articles/lower-numerical-precision-deep-learning-inference-and-training
5http://www.image-net.org/challenges/LSVRC/2012/nnoupb/ILSVRC2012_img_val.tar
6 數(shù)據(jù)援引自“以數(shù)據(jù)為中心 加速數(shù)字經(jīng)濟落地——2019 英特爾? 創(chuàng)新產(chǎn)品發(fā)布會”上的百度分享環(huán)節(jié) 以上性能測試結(jié)果可能并未反映所有公開可用的安全更新。詳情請參閱配置信息披露。
沒有任何產(chǎn)品或組件是絕對安全的。英特爾并不控制或?qū)徲嫷谌綌?shù)據(jù)。請您審查該內(nèi)容, 咨詢其他來源, 并確認提及數(shù)據(jù)是否準確。
性能測試中使用的軟件和工作負荷可能僅在英特爾微處理器上進行了性能優(yōu)化。
諸如SYSmark和MobileMark等測試均系基于特定計算機系統(tǒng)、硬件、軟件、操作系統(tǒng)及功能。上述任何要素的變動都有可能導致測試結(jié)果的變化。請參考其他信息及性能測試(包括結(jié)合其他產(chǎn)品使 用時的運行性能)以對目標產(chǎn)品進行全面評估。更多信息, 詳見www.intel.com/benchmarks。
英特爾技術(shù)特性和優(yōu)勢取決于系統(tǒng)配置, 并可能需要支持的硬件、軟件或服務(wù)才能激活。更多信息, 請見 Intel.com, 或從原始設(shè)備制造商或零售商處獲得更多信息。描述的成本降低情景均旨在在特 定情況和配置中舉例說明特定英特爾產(chǎn)品如何影響未來成本并提供成本節(jié)約。情況均不同。英特爾不保證任何成本或成本降低。
英特爾、Intel、至強是英特爾公司在美國和或其他國家的商標。英特爾商標或商標及品牌名稱資料庫的全部名單請見intel.com上的商標。
*其他的名稱和品牌可能是其他所有者的資產(chǎn)。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。