編輯 | Debra git
本期分享內容均摘自英特爾公司陸揚老師所著白皮書《雲服務提供商 (CSP) 如何獲益於面向媒體雲應用程序的英特爾®至強®Skylake 平臺》,閱讀完整原文請在 AI 前線公衆號內回覆關鍵字「英特爾」,獲取白皮書完整 PDF。github
本期 AI 前線社羣分享咱們很高興邀請到 Intel 數據中心市場部門高級架構師陸揚,爲咱們帶來《高性能視頻雲服務的構建與提高》的乾貨分享。算法
首先給你們介紹下今天的講師: 陸揚, Intel 數據中心市場部門高級架構師 ,主要負責中國區互聯網客戶。在 Intel 有十多年的開發和互聯網工做的經驗,與亞太區一線 ISV/ 客戶緊密合做,圍繞 Intel IA 架構,幫助客戶系統的性能測評和調優,平臺的遷移和升級,以及深度技術合做。本次分享主要會從如下六個方面進行:編程
媒體雲計算行業現狀後端
指令集升級的影響服務器
傳統視頻處理應用程序網絡
HEVC/H.265 應用程序多線程
圖像處理應用程序架構
視頻和圖像的深度學習應用機器學習
媒體處理是當前雲計算行業中最熱門、發展最快的應用之一,尤爲是佔用大量計算和存儲資源的視頻和圖像處理的應用和服務。雲服務提供商 (CSP) 一直在致力於提高媒體雲計算的效率,特別是視頻處理、分析、搜索以及流媒體處理的性能。
本次分享介紹了英特爾新至強平臺的新技術及其對媒體雲計算性能提高,闡釋了新型 SIMD(單一指令多數據流)AVX-512 指令集如何幫助視頻、圖像處理以及視頻深度學習的應用提高性能。
近幾年來,媒體雲計算應用和服務一直在快速增加。到 2020 年,視頻流量將佔互聯網用戶消費流量總量的 82%。
近幾年來,各類新興媒體雲計算應用層出不窮,例如視頻轉碼、視頻理解、分析、深度學習、監控、視頻搜索、視頻廣播、會議、雲遊戲以及人工智能 (AI) 等。
雲計算場景和業務的要求越複雜,後端服務器的處理能力面臨的挑戰就越高,尤爲是當 4K/8K 視頻格式逐漸興起並趨向成熟時。4K 和 8K 視頻格式能提供更高的視頻質量和更好的最終用戶體驗,但也須要更高的處理能力以及更多的存儲和網絡帶寬資源。
如今天天都有海量的視頻和圖片生成、上傳和下載,如何以最高效的方式處理這些海量數據是對媒體雲計算服務提供商 (CSP) 的巨大挑戰。在中國,各媒體雲服務提供商都在努力尋求最高效的媒體雲解決方案和平臺,以便在保持視頻品質的同時實現最佳性能,確保更好的用戶體驗,和更合理的成本。
基礎的媒體雲計算模塊包括視頻轉碼、編輯、特徵抽取和分析等環節。其中,視頻轉碼消耗了大部分計算資源,而且是進行其餘進一步處理和分析的基礎。而英特爾的 SIMD 向量化技術是優化這些計算密集型運算的關鍵。
目前新至強已經集成了 AVX-512 技術,這一技術的性能特徵和編碼方法,利用 IA 架構平臺來解決技術難題以實現性能提高。該解決方案可以爲媒體雲計算客戶提供如下優點:
適用於雲服務提供商行業的高效視頻處理解決方案。基礎視頻編碼和轉碼性能提高 2 到 4 倍,這可顯著提高媒體處理集羣的處理能力。
適用於各類在線應用程序的高性能圖像處理解決方案。減少在線圖像處理延遲和帶寬。
加速深度學習算法,幫助消除新興雲服務提供商應用程序的性能瓶頸。
在數代不一樣的 x86 平臺上從 MMX、SSE、AVX、AVX2 演進到了 AVX-512 指令集,向量的寬度也從 64b 增加到了 512b。
MMX:8x 64 位寄存器 (MM0 … MM7)
SSE:8x 128 位寄存器 (XMM0 … XMM7) 、4x 單精度 FP / XMM 寄存器
SSE2:更寬的整數向量寬度,128b;雙精度 FP / XMM 寄存器
SSE3:升級的向量指令
SSE4(4.1 和 4.2):16x 128 位寄存器 (XMM0-XMM15),以及新指令( 47 + 7 新指令)
AVX:用於浮點計算的 256 位寬 SIMD,以及 16x256 位寬 (ymm0-ymm16)
AVX2:256 位 SIMD 適用於整數計算,新指令適用於 FMA(混合乘加運算)以及擴展指令
AVX-512: 512 位 SIMD 指令適用於整數和浮點計算,2 個 512 位 FMA
新至強平臺引進了 512 位向量化技術,與 AVX2 相比,峯值性能最多可提高 2 倍。微架構級性能的升級(尤爲是針對 SIMD 向量化的調整)能夠明顯提高視頻和圖像處理的性能。
那麼利用 AVX-512 技術是提高媒體雲計算的性能的呢?在傳統視頻處理方面,離線視頻轉碼應用程序是典型的 CPU 和內存密集型的應用,其最耗時的核心代碼可經過 SIMD 向量化技術來優化。
有些函數沒法經過編譯程序自動優化,也沒有相似的高性能 API 能夠直接調用,那麼咱們就須要分析代碼並根據開發手冊和相關文檔用 SIMD 的向量化指令手動重寫。 若是能夠藉助 SIMD 的指令集重構代碼,那麼即便是編譯調整,也是有望顯著提高性能的。
以傳統的 H.264 視頻轉碼程序舉例來講,如圖 3 所示,經過採用 SIMD (SSE/AVX2) 指令,大部分熱點函數都已被向量化優化,可是,到目前爲止還沒有用到 AVX-512 技術。
圖 5.8*4 塊計算及其 SIMD 優化圖解
以基礎的 8x4 塊計算函數爲例, 爲了使函數 x264_pixel_satd_8x4 更易於理解,咱們設計了圖 5 中的圖形模型。咱們能夠看出,8x4 塊 SATD 計算要求必須使用兩個哈達瑪變換式(先按行,後按列)。此外,咱們注意到哈達瑪變換式有 4 個輸入,所以,咱們須要將數據分別存儲到 4 個獨立的 SIMD 單位上,以便進行並行計算。咱們能夠將每一個 128 位數據(即每一個黑盒子中 8x16 位整數)載入一個 m128i,造成共 4 個 *m128i,以做爲第一個哈達瑪轉換式的輸入。此外,還須要矩陣轉置來幫助造成第二個哈達瑪轉換式(按列)。爲了測試 SIMD 向量化實現的性能,咱們首先使用 rand()% 10 隨機生成兩個像素矩陣中的元素。爲了確保準確性,在這裏咱們分開測試函數,而不是成批測試 ,性能結果見表 2。
從表 2 中咱們能夠看到,與原始版本相比,每行中最優的 SIMD 向量化實現方案(高亮和紅色字體顯示)得到了 3 倍到 5 倍的性能加速。具體而言,在 8x4 塊計算示例中,與原始版本相比,SSE 代碼實現了 3.26 倍的性能提高,而且超過了其餘兩個 SIMD 實現。
緣由是 8x4 塊充分利用了 SSE 的 128 位寄存器,相比之下,AVX2 和 AVX-512 均浪費了部分空間。但重要的是,AVX-512 代碼在 8x16 和 16x16 塊計算中實現了最佳性能,其中 16x16 塊是咱們的初始配置中的目標函數(即 x264_pixel_satd_16x16)。
基於上述 AVX-512 向量化代碼的編程模型和範例,客戶能夠在本身的視頻應用程序中重寫熱門函數,以確保獲得最大性能提高。
視頻編碼標準主要經過大衆熟悉的 ITU-T 和 ISO/IEC 的標準開發演進而來。 2013 年引進的 H.265/HEVC(高效視頻編碼)是 ISO / IEC 和 ITU-T 推出的最新視頻編解碼器標準,旨在最大程度地提升壓縮能力和下降數據損失。HEVC/H.265 技術可幫助視頻雲服務提供商以較小的帶寬提供高質量視頻,並進一步支持 4k(4096×2160) 和 8k (7680×4320) 的超高分辨率視頻服務。
H.265/HEVC 編解碼器的計算複雜性是以前 H.264/MPEG 的 4 倍以上,這對後端服務器平臺的視頻處理能力提出了史無前例的要求,並且事實證實,x86 的 SIMD 向量化技術能夠顯著提高 HEVC 編碼性能。
如圖 6 所示,SIMD (SSE/AVX2) 指令已經集成到 H.265/HEVC 源代碼中。可是,還沒有啓用 AVX-512。接下來咱們將以 DCT(離散餘弦變換)爲例闡述如何利用 AVX-512 指令集加速 HEVC 的視頻處理應用,包括 4x四、8x八、16x16(第八熱門函數),以及 32x32(第四熱門函數)的計算。
爲了查找 DCT 的源代碼,咱們先在 x265 ccmake 配置中設置 「--disable asm」,而後利用 VTune 查看源代碼。dct32 的源代碼如圖 7 所示。
下面咱們先展現如何在英特爾新至強 平臺上使用 SIMD 進行基礎 4*4 塊計算,而後再講如何利用 AVX-512 進行進一步的加速計算。
圖 8 展現了 dct4 的核心概念。咱們能夠看到,dct4 中的基本運算是矩陣乘積。所以,咱們能夠將每一個 128 位數據(即每一個黑盒子中的 4x 32 位整數)載入一個 mm128i,並對其執行 SIMD 運算,如,_mm_mullo_epi3二、_mm_add_epi32, 和 _mm_srai_epi32。與 x264 中的 SATD 的優化方式不一樣,AVX2 和 AVX-512 能夠經過減小循環次數來進一步加速 dct4。特別是,AVX2 能夠將循環數從 4 倍減小到 2 倍,並將每一個 2x8x32 位 = 256 位數據載入m256i,而 AVX-512 能夠進一步將循環數減小到 1 倍,並將每一個 4x8x32 位 = 512 位數據載入 __m512i。8x八、16x16 和 32x32 塊計算也可使用與上述 4x4 示例相似的方法來優化,其中,SSE 先加速循環內的矩陣乘積,而 AVX2 和 AVX-512 可經過減小循環次數來進一步加速。
爲了測試 SIMD 實現的性能,咱們使用 rand()%40 – rand()%40 隨機生成源矩陣中的元素。測試結果見表 3。
從表 3 中咱們能夠看到,對於 4x4/8x8/32x32/ 數據集,AVX-512 代碼是最高效的選擇,可以分別比初始代碼提供 44.46%、70.45% 和 37.60% 的性能提高。理論上,AVX-512 應該在全部狀況下都是最高效選擇,包括 dct四、dct八、dct16 以及 dct32。
然而,初始化操做(如 _mm512_set_epi32)至關耗時,所以會抵消掉一些優點。 在 dct16 中,SSE 可使用常量初始化運算(如 _mm_set1_epi32),並實現最佳性能,比初始代碼加速 43.50%。圖像處理應用程序爲了使 x86 平臺的性能最優化,方便客戶利用和部署高級英特爾架構技術,英特爾開發了一整套高性能庫,適用於客戶端和服務器平臺以及各類領域,例如系統性能分析工具 Vtune,英特爾編譯器 icc、數學核心庫 MKL、集羣分析、圖形圖像開發工具包 MediaSDK,以及多線程編程工具 TBB 等等。
IPP 針對如下的應用程序和算法開發了最佳的線程級並行和向量化實現的最優方案:
圖像、視頻以及音頻處理
數據通訊
數據壓縮和加密
信號處理等
GraphicsMagick 是經常使用的圖像處理庫,已經在許多雲處理應用程序中獲得普遍應用。爲了更好的支持現有的圖像處理應用,IPP2018 在 IPP 庫到 GraphicsMagick API 的一系列函數中實現了多種提升性能的插件和補丁,以便在最少的人工干預模式下實現性能提高,從而優化了 resizeImage、scaleImage、GaussianBlurImage、flipImage 和 flopImage 等多種圖像處理函數。這裏以圖像的縮放爲例來評估 IA SIMD 技術的性能,尤爲是 AVX-512 向量化指令集在新至強平臺上的貢獻。
圖 9 是使用 IPP 圖像縮放 API 來優化初始的 GraphicsMagick 函數的結果。因爲 IPP 庫已經實現並集成了多種 SIMD 指令,在這 5 種標準圖像的縮放應用中達到了 4 倍以上性能加速,而 AVX-512 的性能也比 AVX2 要高出 20% 以上。
視頻和圖像文件中包含了許多有價值的信息,好比時間和地點、人物及其行爲,甚至人物穿着和環境變化。
如圖 10 所示,咱們能夠根據這些信息類型利用數據挖掘和機器學習,提取出大量有用的信息,而後進行專門的分析研究得出必要的結論,例如防盜版,幫助找到犯罪嫌疑人或失蹤人員,分析視頻之間的關係,以及根據人物的愛好來推廣更多商業模式等等。基於視頻內容的廣告和促銷具備巨大的潛在商業價值,這促使媒體雲客戶投放了更多的資源進行視頻分析與進一步數據挖掘和深度學習的應用上。
深度學習技術是雲計算數據中心中發展最快速的領域之一,而且已經成爲推進服務器市場發展的最新主力。許多媒體雲服務提供商已經開始深刻研究並開發這個領域。
對於高維度高並行的視頻和圖像處理而言,這種典型的計算密集型應用,提取和分析視頻數據會消耗不少計算資源,而 x86 的 SIMD 向量化指令能夠大大提高計算吞吐量和程序執行效率。
英特爾開發了一套高性能庫來優化深度學習應用程序的性能。英特爾數學函數庫(英特爾 MKL)用以提高機器學習、科學、工程金融與設計等應用的數學運算函數的速度,如密集和稀疏線性代數(BLAS:基礎線性代數子程序、LAPACK:線性代數、PARDISO:稀疏矩陣求解)、FFT、向量數學、概要統計、深度神經網絡等等。這些傳統的深度學習程序已經過最優的線程化和 SIMD 向量化最大限度地提高了處理器的性能。
以 caffe 的評分和訓練程序爲例,以下圖所示,英特爾 AVX2/AVX-512 指令將評分流程加速了 2 到 9 倍,將訓練流程加速了 2 到 4 倍,而 AVX-512 指令在英特爾新至強平臺上提供的性能要比 AVX2 高 10% 到 40%。
媒體雲計算應用愈來愈普及,而且正在成爲傳統數據中心和移動互聯網產業的重要部分。針對這些數據和計算密集型的應用,x86 平臺構建了適用於視頻、圖像、音頻以及進一步深度學習計算的卓越生態系統。
本次分享詳細闡述了英特爾新至強平臺上的全新 AVX-512 技術和指令集,演示瞭如何利用它來優化媒體雲應用程序。隨着新的業務和使用模式的不斷涌現和 IA 智能平臺的穩步升級,高性能、高可靠性的技術一定會爲愈來愈多的媒體處理應用程序帶來更多的福音。
Q1:AVX-512 比 AVX2 的提高在用戶層面會有什麼直觀的影響嗎?
A1:陸揚老師:如文章所述,AVX-512 比 AVX2 的提高就是程序的執行效率,直觀感覺就是程序執行時間的減小和吞吐量的提升
Q2:請問用 AVX512 優化後的 caffe 源碼是開源的嗎?開發者如何高效使用它?
A2:陸揚老師:Intel 優化過的 caffe 是開源的,能夠參考 git clone
https://github.com/intel/caffe.git
其實 Intel 優化了不少開源的 DL/ML 項目,能夠從 software.intel.com 中瞭解
Q3: MKL, IPP 如今是免費用了嗎?仍是開源了?
A3:陸揚老師:IPP 能夠從以下地址下載 https://software.intel.com/en-us/intel-ipp
MKL 的下載地址是 https://software.intel.com/en-us/mkl是 免費下載的,代碼部分沒有所有開源
Q4:分享中提到的 AVX-512 指令在英特爾新至強平臺上提供的性能要比 AVX2 高 10% 到 40%,這個提高主要是由於什麼?
A4:陸揚老師:AVX512 比 AVX2 的提高是 向量寄存器的位寬加倍了
Q5:在深度學習上,硬件和軟件應該怎麼搭配,硬件的做用是什麼?
A5:Intel 高明老師:芯片升級和網絡升級首先取決於需求,什麼樣的工做負載須要千兆,仍是萬兆,仍是 25G,或是百 G,是否須要 RDMA,要明確。芯片的計算能力要匹配相應的網絡性能,另外網絡的優化也相當重要,DPDK 的使用能夠大幅提高 CPU 網絡處理能力,下降成本。固然是才用 DPDK 須要相關技術能力投入,會增長人力成本,須要綜合評估,作到最優 TCO。
Intel 陸揚老師:其實無論是深度學習仍是其餘互聯網的應用,軟硬件配套升級才能達到最優性能。升級硬件架構獲得更強勁的 CPU 和更新的微架構提高,包括 CPU 頻率,核數,寄存器架構,cache line 升級,內存以及網絡的提高等等。軟件的做用就是感知和啓用這些新功能,不然沒法發揮硬件平臺的全部優點和技術。