親手驗證:如何充分激發(fā)CPU的AI加速潛能
黑格爾曾說:“沒有沖突不成戲劇?!庇^察一下現(xiàn)在的AI行業(yè)實踐,可能有助于你理解這句話內味兒。
就在大家認為AI還只是個遙不可及的夢想時,深度學習技術的出現(xiàn)讓大家重拾希望;當人們認為AI會在實驗室里停留更長時間時,它已不聲不響地走進了眾多行業(yè)的實踐;當大家還在爭論,跑AI,到底是GPU好,還是應該開發(fā)更多種類、更專用的AI加速芯片時,有人卻說:“為什么不先試試CPU呢?”,真是戲劇性、轉折感爆棚。
說出最后這句話的,正是IT圈兒的老朋友英特爾。
從2017年第一代至強可擴展處理器集成AVX-512,開始基于CPU對AI訓練和推理提供加速支持,到2018年第二代至強可擴展處理器在AVX-512技術之上擴展出深度學習加速技術,主打INT8推理加速,再到2020年面向多路服務器的第三代至強可擴展處理器新增BF16加速,開始兼顧推理和訓練的加速,最后再到今年發(fā)布的面向單路和雙路服務器的第三代至強可擴展處理器(Ice Lake)進一步強化INT8推理加速,將推理能力提升到上一代產(chǎn)品的1.74倍,這一套連貫的動作下來,足以證明英特爾“用CPU跑AI”并非口嗨。


不少英特爾的客戶也在說“用CPU跑AI效果不錯”。但作為極具折騰精神的E企研究院,我們更希望為大家親手驗證:
至強可擴展處理器,尤其是它最新一代產(chǎn)品,真地能為AI提供出色的加速效果么?
還有我們需要用什么樣的“姿勢”,才能用好CPU的這項新能力?
E企研究院這次用長城超云的雙路服務器平臺---Ice Lake架構的第三代英特爾至強可擴展處理器——36核心72線程的至強鉑金8360Y處理器來進行驗證。需要說明的是,這次測試只使用了單顆CPU。

摸出底線
我們先來測試CPU在無特別優(yōu)化的情況下,跑AI應用時的性能表現(xiàn)。
我們把自己代入成一家主要用AI做推理的企業(yè),具體場景是基于訓練好的模型,使用來自多個傳感器收集的圖像或語音數(shù)據(jù)做推理的過程,因此出場的模型,我們選中了經(jīng)過預訓練的ResNet50推理模型。

測試的主要流程是:在測試環(huán)境中安裝TensorFlow 2.5版本,并使用主流的ImageNet 2012數(shù)據(jù)庫,并將CPU設置為性能優(yōu)先模式,然后運行ResNet 50推理模型。
結果是每秒處理超過72張圖片,平均時延在14ms以內,這個……也太沒吸引力了吧!

先別急,CPU運行ResNet 50推理模型的性能根本還沒發(fā)揮出來呢。
優(yōu)化動作開始
我們修改一下測試命令,同一個平臺,吞吐性能超過每秒172張圖片,時延也減少到6ms以內,性能一下提升到之前的2.37倍。

一句簡單的命令居然有這么大威力?原因何在?
秘密就是:即便是在原生版的TensorFlow中,英特爾也貢獻了不少優(yōu)化代碼,其中很多都是來自oneDNN,這是英特爾開發(fā)和開源的面向深度神經(jīng)網(wǎng)絡的數(shù)學核心函數(shù)庫,包含了高度矢量化和線程化的構建模塊,可幫助深度神經(jīng)網(wǎng)絡調優(yōu),來充分利用英特爾架構CPU集成的AI加速能力。上面這句命令的作用就是開啟了oneDNN的優(yōu)化功能,可大大提升CPU運行AI推理類應用的效率。

再進一步會怎樣
還有更多、更神奇的功能嗎?
接下來,我們使用英特爾自已發(fā)布的,專門且更為全面地面向英特爾架構優(yōu)化的TensorFlow框架,切換到這個環(huán)境再來運行ResNet 50推理模型。
性能果然又有提升,又漲了約17%。

圖注:在面向英特爾架構優(yōu)化的TensorFlow框架上運行ResNet50(v1.5)推理模型,吞吐性能提升到每秒超202張圖像,平均時延不到5ms。這種充分優(yōu)化后的TensorFlow框架及模型庫(model zoo)都已開源在GitHub上,任何人都可下載使用。安裝和使用方式與原生TensorFlow并無區(qū)別
讓我們再算算:與最開始的、未經(jīng)優(yōu)化的TensorFlow環(huán)境相比,在面向英特爾架構優(yōu)化的TensorFlow框架的加持下,運行ResNet 50的推理性能,已達到前者的2.77倍以上。
上述三輪測試考驗的,都是ResNet 50模型在全新第三代至強可擴展處理器上運行時的FP32性能。不難看出,只要優(yōu)化動作到位,性能提升也會立即到位,況且這還只是單顆CPU的性能表現(xiàn)。
這意味著,企業(yè)用戶基本不需要對既有的IT基礎設施做大的改動,也不需要急著導入異構,只要你現(xiàn)在用的CPU是至強可擴展處理器,那么,你就具備了執(zhí)行AI推理的主要條件。
再放大招,大大招
你以為這就結束了么?并沒有,接下來才是大招。
我們將開始在CPU上執(zhí)行INT8推理加速的測試。由于很多企業(yè)在使用AI推理時,并不需要FP32這么高的精度,我們可以把數(shù)據(jù)格式轉變?yōu)镮NT8,在確保準確率不明顯下降的情況下,看看性能會發(fā)生怎樣的變化。
這輪測試我們必須要激活英特爾深度學習加速,也就是DL Boost技術中的INT8加速功能,同樣基于面向英特爾架構優(yōu)化的TensorFlow框架。結果是,時延降至3ms內,吞吐則超過了每秒391 張圖片。

圖注:在面向英特爾架構優(yōu)化的TensorFlow中使用ResNet50(v1.5)運行INT8推理的結果
終于,我們迎來了最后一輪測試。由于上面多輪測試都在考慮單路推理的性能,而在實際應用中,很多用戶都會跑多路推理,那么在這種情況下,用戶更希望在可接受的時延水平——譬如30ms上下——盡可能提升吞吐性能。
這組測試中我們使用的至強鉑金8360Y處理器終于火力全開,單顆CPU 36個物理核心對應36個INT8實例。
結果是:平均時延約為27ms,但總計吞吐能力超過每秒1300張圖片,這意味著用戶真地能用可接受的時延提升,換回3倍以上的性能輸出,多核威力有目共睹。

圖注:使用36個INT8實例并行運行(所使用的英特爾至強鉑金8360Y處理器具有36核心,每核心運行一個INT8實例)的測試結果
要知道,直到現(xiàn)在我們使用的都是單顆至強鉑金8360Y處理器,如果在一個雙路服務器中采用兩顆全上的策略,那么性能理論上是能夠翻倍,可見英特爾官宣的AI加速性能指標絕非空穴來風。
看到這里,你對至強CPU的AI加速能力是否有了更為直觀的體驗呢?你是否也有使用CPU加速AI應用的獨到經(jīng)驗或問題呢?歡迎大家和我們分享,也歡迎大家一起動手探索驗證。
▲點擊上方卡片,關注CVer公眾號
整理不易,請點贊和在看![]()
