寒武紀端雲一體人工智能開發平台整體架構
1. 引言
當前人工智能(Artificial Intelligence)技術發展迅猛,在機器視覺、語音識別以及自然語言處理等多個技術領域取得了卓越的進展,帶來了更高的精確度和泛化能力,因此越來越廣泛地應用於眾多行業領域,形成了智慧制造、智慧金融、智慧交通、智慧教育和智慧零售等諸多“人工智能+”的行業應用。可以預見,隨着人工智能理論和技術的日益成熟,將為越來越多的行業帶來更加廣泛的應用和更深遠的變革。
人工智能自上世紀50年代誕生以來經歷了多個跨越式發展階段。其中,機器學習(Machine Learning)的出現讓人工智能不再是按照人類設定的規則和總結的知識運作,而是從經驗數據中學習獲得規律,並利用此規律對未知事件做出決策和推斷,其代表方法包括感知機、神經網絡和支持向量機等。而真正推動人工智能大爆發的是機器學習領域中的新技術—深度學習(Deep Learning),其算法模型稱為深度神經網絡(Deep Neural Networks)。2006年,在Geoffrey Hinton研究團隊的推動下,深度學習開始備受關注。從2012年開始,人工智能進入爆發式的發展階段,其主要的驅動力是深度學習算法的進步以及計算機運算能力的提高。
然而,隨着深度學習算法模型的規模越來越大、種類越來越多,人工智能技術的應用也面臨一些問題。首先是深度學習的算法模型對算力的需求猛增,從2012年的AlexNet到2017年的AlphaGoZero,對算力需求的增長超過30萬倍,其對計算資源的大規模需求導致計算硬件的購買和運行成本不斷攀升,在一定程度上制約了人工智能的應用落地。另一方面,深度學習中沒有一勞永逸的算法模型,往往要根據實際應用場景和數據定制開發,因此需要選取適用性廣並且運行性能高的開發平台。
寒武紀作為全球人工智能芯片領域的先行者,自2016年至今,陸續推出了1A、1H8/1H16、1M等人工智能IP產品,以及面向雲端深度學習計算任務的智能處理卡思元100(MLU®100)和思元270(MLU®270)。為了方便開發者在寒武紀硬件平台上開發和部署,寒武紀推出了端雲一體人工智能開發平台(Cambricon Neuware®),能夠滿足雲端和終端的深度學習應用場景針對軟件開發平台和高性能計算硬件的需求。同時,Cambricon Neuware針對深度學習應用的開發和部署提供了一套完善而高效的軟件棧工具,集成了多種開源的深度學習編程框架,並且提供了基於高性能編程庫和編程語言等高效靈活的開發模式,以及一系列調試和調優工具。基於寒武紀智能處理器打造的終端處理器IP產品和雲端智能處理卡產品,相比傳統芯片可達數量級的性能領先、成本縮減和功耗降低,並且基於Cambricon Neuware率先提出“端雲一體”的智能處理思路,使其終端和雲端產品可共享同樣的軟件開發接口和完備生態。
更多產品信息請參見寒武紀官網www.cambricon.com和寒武紀開發者論壇forum.cambricon.com。
2. 人工智能的關鍵技術
在人工智能技術的發展中,機器學習是其中至關重要的途徑,而近幾年得以快速發展的深度學習是機器學習的一個子集,也是推動人工智能爆發的核心因素。而深度神經網絡作為深度學習的算法模型,已經在許多應用領域中獲得了遠遠超過傳統機器學習方法的精度,並且隨着計算硬件算力的不斷提升以及大數據的加持,針對深度神經網絡的訓練和推理任務獲得了更高的精度和效率。
2.1 深度學習中的訓練和推理
深度學習的訓練(Training)是指針對現有數據進行學習訓練,將數據輸入深度神經網絡模型中運算,並且通過多次迭代運算不斷調整和優化網絡模型參數的過程。訓練過程的特點是需要的訓練數據量大且運算過程復雜,導致運算耗時長,並且模型優劣和訓練數據的規模直接影響到后續推理結果的准確性。因此一個復雜模型的訓練任務對計算硬件的算力需求非常大。
推理(Inference)是指將新的待處理數據輸入訓練好的,即完成模型參數優化和調整的深度神經網絡模型中,通過該模型計算並輸出結果,從而獲得深度學習針對未知數據進行自主推斷的結果。推理在實際的應用和部署過程中需要計算硬件做到高性能、高精度、低延遲和低功耗。
2.2 深度學習應用的開發
針對深度學習應用的開發,大體可以分為三類方法:
方法一是不借助任何深度學習編程庫,直接使用編程語言進行開發並在CPU上運行。其優勢是編程靈活,能夠實現任意結構的神經網絡模型。缺點是編程繁瑣低效,實際運行過程中由於沒有計算硬件加速導致運行效率低。
方法二是利用深度學習算法加速的各類計算硬件所配套的專用SDK(Software Development Kit)進行開發,優勢是算法模型的執行能夠得到高於CPU性能的計算硬件的加速,缺點是開發出的深度學習應用通用性差,僅能運行於某一種計算硬件之上,並且其運算效率依賴於該計算硬件的算力。
方法三是利用開源的深度學習編程框架進行開發,例如Caffe、TensorFlow、MXNet、PyTorch等。優勢是為開發者提供了更加簡單且通用的編程方法,同時也可利用各類計算硬件對算法模型進行加速。缺點是不同的計算硬件對編程框架支持的完善度和性能有較大差別,並且執行效率同樣依賴於該計算硬件的算力。
2.3 寒武紀端雲一體人工智能開發平台
寒武紀研發的端雲一體人工智能開發平台Cambricon NeuwareTM能夠很好地處理上述深度學習的推理以及應用開發過程中所面臨的關鍵問題,未來還將支持訓練任務。
Neuware®支持全系列寒武紀智能處理器產品,基於Neuware開發出的應用可完美運行於寒武紀雲端智能處理卡思元100(MLU®100)和思元270(MLU®270)之上,以及搭載了寒武紀智能處理器IP的終端設備之上,可充分利用其深度學習加速功能提升深度神經網絡模型的推理性能,未來還將支持訓練任務。同時,寒武紀智能處理器相比傳統芯片可達數量級的性能領先、成本縮減和功耗降低,並且率先提出“端雲一體”的智能處理思路,使其終端和雲端產品可共享同樣的軟件開發接口和完備生態。
針對深度學習應用開發過程中所面臨的關鍵問題,Neuware不僅支持多種主流的深度學習編程框架,使得應用的開發更加簡潔且通用,還提供了高性能編程庫,帶來更高的程序執行效率。同時,Neuware提供了專門針對寒武紀智能處理器應用開發的編程語言--Bang語言,開發者能夠使用Bang語言進行靈活高效的應用開發,充分利用寒武紀智能處理器產品上的計算和存儲資源,在編程靈活的同時確保了推理的高性能。
Neuware適用於圖像和視頻處理、語音識別和機器翻譯等人工智能算法領域,目前已協同各類寒武紀智能處理器產品應用於智能終端、智慧交通、智能教育、智能制造等場景。
3. 關於Cambricon Neuware™
寒武紀端雲一體人工智能開發平台Cambricon Neuware™是寒武紀專門針對其雲端和終端的智能處理器產品打造的軟件開發平台,其中包括了多種深度學習/機器學習編程庫,以及編程語言、編譯器、程序調試/調優工具、驅動工具和視頻編解碼工具等,形成了完善的軟件棧,為人工智能應用特別是深度學習推理應用的開發和部署提供了便利。在雲端,開發者可以簡單高效地實現深度學習乃至機器學習應用的開發和調試;在終端,可以借助雲端豐富的硬件資源和強大的功能進行開發和調試,僅在部署階段將開發完成的離線文件部署到終端上,解決了終端上開發調試困難的問題。同時,由於同是基於Cambricon指令集,因此雲端和終端的應用程序可以做到無縫的相互切換。
3.1 Neuware®的軟件棧架構
Neuware®集成了多種編程庫和工具,其軟件架構如下圖所示:
圖3.1 Neuware的軟件棧架構
Neuware軟件架構從上往下分別為深度學習應用、主流的深度學習框架、寒武紀機器學習編程庫CNML(Cambricon Neuware Machine Learning Library)、寒武紀Bang編程語言、寒武紀運行時庫CNRT(Cambricon Neuware Runtime Library)、系統工具層以及驅動層。此外還包括針對多媒體智能處理的SDK。
· Neuware集成的開源深度學習編程框架包括TensorFlow、Caffe、MXNet、PyTorch、Android NN,其中Android NN僅支持寒武紀處理器IP核。這些框架的API與官方開源框架一致,內部實現則加入了針對寒武紀智能處理器產品的定制。
· 寒武紀機器學習編程庫CNML提供了機器學習,主要是深度學習應用的開發所需基礎算子,開發者可以便捷地調用這些算子靈活地構造各類深度神經網絡模型以及其他機器學習領域的算法,而無須關心寒武紀智能處理器產品的內部硬件資源如何調度。
· 寒武紀運行時庫CNRT提供了一套針對寒武紀智能處理器產品的上層編程接口,用於與寒武紀智能處理器產品的硬件之間進行交互和調度硬件資源。用戶既可以調用CNRT協同CNML一起開發深度學習應用,也可以直接基於CNRT來高效地運行Neuware構建的神經網絡離線模型。
· 寒武紀Bang語言是專門針對寒武紀智能處理器產品設計的編程語言,它支持最常用的 C99和C++11語言的語法特性,並提供了用於編寫高性能程序的內置函數接口。此外,Bang語言還增加了與寒武紀智能處理器產品硬件相關的類型系統,使用這些內置函數和新增類型系統能夠充分發揮寒武紀智能處理器的算力和性能。
· Neuware的編譯器部分包括了面向寒武紀產品的Bang語言和匯編語言編譯,針對寒武紀產品設計的高級匯編語言做了多種優化,輸出能夠運行於寒武紀各類硬件產品上的可執行二進制文件。
· Neuware軟件棧中的調試工具CNGDB是Linux系統上調試Bang語言的工具,它是基於GNU的調試器GDB開發的。使用CNGDB可以在真實的硬件上同時調試寒武紀處理器產品的設備側和主機側的代碼。
· Neuware軟件棧中的性能優化工具CNPerf(Cambricon Neuware Performance)可針對寒武紀智能處理器產品進行性能剖析。
· Neuware軟件棧中的系統工具CNMon(Cambricon Neuware Monitor)能夠采集寒武紀智能處理器產品的底層硬件信息,並實時獲取上層軟件對硬件資源調度狀態等。
· Neuware軟件棧中的自動化硬件診斷軟件CNQual(Cambricon Neuware Qualification)針對寒武紀智能處理卡進行功耗測試、PCIe鏈路狀態診斷、硬件壓力測試、多卡互聯狀態診斷等測試等功能,確保寒武紀智能處理卡在系統中能夠長時間穩定工作。
· Neuware軟件棧中還提供了豐富的多媒體開發套件,包括CNStream、Gstreamer等視頻智能處理的SDK和CNCodec圖片、視頻的編解碼SDK。
3.2 Neuware®的主要特性
Neuware除了提供上述各項功能以外,還包括以下的主要特性:
· 提供了靈活便捷且高效的編程方法,包括開源深度學習編程框架、高性能編程庫CNML和CNRT、Bang語言,以及多媒體智能開發套件。
· 開發出的應用程序可同時運行於寒武紀雲端和終端的智能處理器產品中,並解決了終端產品上不便於開發、調試和調優的問題
· 支持多種低精度量化方法和離線模型的轉換,可以在提升運行效率的同時降低端到端的時延。
· 提供了混合精度的數據類型支持:思元100(MLU100)系列智能處理卡和1H系列處理器IP支持INT8和FP16數據類型;思元270(MLU270)系列智能處理卡和1M系列處理器IP支持FP32、FP16、INT16、INT8、INT4的數據類型。
4. 使用Cambricon Neuware™開發高效的深度學習推理應用
在開發深度學習推理應用的過程中,Neuware提供了三類開發手段,分別滿足開發者對開發效率(Productivity)、運行性能(Performance)和編程靈活性(Programmability)的偏好需求,並且這三種開發方法可通過多種性能優化策略提高推理性能。此外Neuware還提供了程序調試、性能調優等工具。
4.1 Productivity:基於深度學習框架開發
對於基於主流的開源深度學習編程框架開發的開發者來說,在遷移到Neuware上繼續開發時,最便捷高效的方法是使用Neuware支持的同樣的框架進行開發和部署。Neuware支持的框架包括Caffe、TensorFlow、MXNet、PyTorch、Android NN。
Neuware支持的上述框架,其API與官方開源框架一致,並且擴展了對寒武紀智能處理器產品的支持,包括對產品硬件資源調度、新增算子以及優化機制的支持。同時還支持原生深度學習框架的Python和C/C++編程接⼝以及原⽣⽹絡模型文件。
4.2 Performance:基於高性能編程庫開發
對於希望進一步提升深度學習應用的推理性能的開發者來說,可以使用Neuware提供的CNML和CNRT高性能編程庫進行開發。
CNML是針對機器學習與深度學習的編程庫,充分結合了寒武紀智能處理器產品的硬件特性,提供更高效、通用、靈活的編程接口用以加速人工智能算法,開發者可通過CNML提供的算子構造自定義的網絡算子。CNML包含了如正反卷積、池化、全連接等常用的卷積神經網絡算子和LSTM、GRU等循環神經網絡算子,以及矩陣、向量、標量運算等算子。此外,CNML還支持算子的拼接和增減。目前CNML已提供上百種基本算子及其組合算子,並在持續增加。此外,CNML還具備以下關鍵特性:
§ 支持對算子的算法優化和對網絡的圖結構、指令生成、任務調度,以及訪存壓縮等相關功能綜合優化。
§ 支持對訓練好的模型進行離線優化,生成離線模型。
§ 支持雲端編譯,模擬終端運行環境,兩端指令一致,做到端雲一體。
CNRT提供了一套直接面向寒武紀智能處理器產品的硬件設備接口,提供運行時系統存儲、任務和設備管理。CNRT具備以下關鍵特性:
§ 支持寒武紀智能處理器產品的硬件設備及多卡管理。
§ 提供設備內存管理接口。
§ 支持任務隊列和同步機制。
§ 支持加載離線模型。
§ 支持寒武紀編譯器CNCC(Cambricon Neuware C/C++ Compiler)和寒武紀匯編器CNAS(Cambricon Neuware Assembler)生成的二進制文件的執行。
4.3 Programmability:基於Bang語言開發
寒武紀的Bang語言支持開發者構建自定義算法模型。Bang語言是針對寒武紀智能處理器產品的硬件而設計的編程語言,它支持最常用的C99、C/C++11語言的語法特性,並提供了用於編寫高性能程序的內置函數接口,還增加了與寒武紀產品硬件相關的語言類型,使用這些內置函數和語言類型能夠充分發揮硬件算力和性能。此外,Bang語言還具備以下關鍵特性:
§ 提供統一高效的編程接口,充分發揮寒武紀產品的硬件特性。
§ 提供異構編程模型,方便用戶擴展自己的應用程序。
§ 提供多核並行編程模型。
§ 能夠以插件(Plugin)的形式與CNML進行交互,實現多種開發手段混合編程。
4.4 多種性能優化策略提升推理性能
為了提升模型在寒武紀智能處理器產品上運行時的推理性能,Neuware提供了多種性能優化策略。
策略一是在線融合模式。用戶直接調用CNML或者通過深度學習框架調用CNML構建網絡后進行編譯,再調用CNRT運行,該運行方式稱為在線模式。而在線融合模式是基於在線運行模式下的算子(即網絡層)優化策略,可將多個算⼦的指令融合,減少模型推理過程中智能處理器的內存訪問次數,減少智能處理器內核啟動次數,從而降低啟動開銷。在融合模式中,被融合的多個算子作為整體的運算在智能處理器上運行,從而在降低時延的同時減少了對I/O帶寬的占用。
策略二是離線模型模式。開發者所構建的神經網絡模型在通過Neuware完成編譯后可保存為離線⽂件,即寒武紀離線模型。而后在寒武紀智能處理器產品上運行該模型時即可直接調用CNRT加載對應的離線⽂件進行部署,該方式稱為離線運行模式。離線模式包括在線編譯和離線執⾏兩個階段:在線編譯是⽣成與模型結構對應的寒武紀指令,對模型權值進行精度轉換以及數據布局(Data Layout)優化,將指令和權值保存到文件;離線執行是加載在線編譯⽣成的⽂件,實現模型推理,因此離線執⾏模式可以避免編譯和權值轉換開銷。
策略三是低精度量化方法。在低精度量化方法中,例如INT8定點量化FP16或FP32的數據,將浮點數量化成INT8后,神經網絡的精度變化在可接受的誤差范圍之內,但是這些數據所占用的存儲空間卻可以大大降低,進而帶寬占用也隨之顯著減少,從而能夠加快神經網絡的推理速度。寒武紀INT8神經網絡模型以有符號8位整型數據保存,模型提供INT8定點數的指數和縮放因⼦,並且可以提供適用於各種模型的多種量化模式。Neuware支持的開源深度學習框架已經為VGG、ResNet、GoogLeNet等常見神經網絡模型提供量化或重訓練完成的8位定點數⽹絡模型。同時,Neuware提供了把原生框架下的浮點模型轉換為INT8模型的工具,如果INT8量化后產生的精度偏差,Neuware提供了進行重訓練的工具。此外,INT8量化方法確保了INT8量化后的模型適合在內存和帶寬資源較差的寒武紀終端產品上運行。
4.5 使用程序調試和性能調優工具
Neuware還為深度學習應用程序的調試和性能調優提供了相應的軟件工具。其中,CNGDB(Cambricon Neuware GDB)是Linux系統上調試Bang語言程序的工具,它是基於GNU的調試器GDB開發的。使用CNGDB可以在真實的硬件上同時調試寒武紀硬件產品的設備側和主機側的代碼。CNGDB面向Bang語言開發者提供控制程序執行、訪問變量等多種操作,解決了開發者難以調試的問題。
CNGDB的主要特性如下:
§ 支持GNU GDB在CPU上原有的全部操作。
§ 支持硬件設備上GDB的大部分操作,包括斷點、單步、訪問修改變量等。
§ 支持靈活的多核調試模式。
§ 支持思元270(MLU270)及以上硬件的調試。
§ CPU/Device的調試切換過程對用戶透明,對用戶來說其過程類似CPU函數調用。
§ 支持生成CNML內核的錯誤信息。
Neuware中的性能調優工具CNPerf(Cambricon Neuware Performance)是一款針對寒武紀智能處理卡的性能剖析工具。CNPerf通過跟蹤程序執行流程,獲取硬件性能計數器,可用於程序性能瓶頸查找和熱點函數定位。CNPerf內部函數主要是基於CNPAPI(Cambricon Neuware Profiling API)實現,其提供了性能剖析所必備的軟件接口,用戶可精確觀察到寒武紀智能處理卡內部的CPU以及智能處理器的行為。
CNPerf具備如下關鍵特性:
§ 精確獲得用戶程序及部分依賴庫中每個函數的執行時間。
§ 獲得CPU的內存開銷和智能處理卡的內存開銷以及拷貝內存所帶來的時間開銷。
§ 獲得函數調用棧信息。
§ 獲取CNML庫中部分OpForward系列函數的計算效率以及DDR訪存帶寬。
§ 獲取用戶自定義kernel函數的實際執行時間。
§ 除命令行外,還提供了用戶友好的圖形化分析界面。
4.6 使用系統工具實時查看推理平台的硬件狀態
Neuware提供了多種系統工具,用於部署寒武紀智能處理卡時進行硬件檢測以及實時查看硬件狀態。其中,CNQual(Cambricon Neuware Qualification)是一款自動化硬件診斷軟件,能夠進行功耗測試、PCIe鏈路狀態診斷、壓力測試、多卡互聯狀態診斷等測試,保證在雲端部署的寒武紀智能處理卡在系統中能夠長時間穩定工作。CNQual具有以下特點:
§ 測試流程測試方法操作簡單,自動化程度高,實用性較強。
§ 可以通過配置文件選擇測試卡以及測試項。
§ 測試信息可同時支持終端顯示和文件保存。
§ 豐富的測試項有助於定位板卡在當前系統中的硬件性能瓶頸。
CNMon(Cambricon Neuware Monitor)是一款能夠實時采集寒武紀智能處理卡的硬件信息並且實時獲取上層軟件對硬件資源調度狀態等的一款工具。CNMon通過CNDev(Cambricon Neuware Device Interface)獲取底層硬件信息,為開發者實時顯示當前底層硬件的詳細信息和狀態。同時,開發者還可以通過CNDev實現定制化的需求,例如雲服務平台或自動化測試平台的設備管理。
CNMon的主要特性如下:
§ 查看寒武紀智能處理卡的設備工作狀態,如健康狀態、處理器核利用率、智能處理卡上DDR內存的占用等信息。
§ 查看設備的拓撲邏輯關系和CPU親和性等信息。
§ 設置設備工作模式如主頻、帶寬、TDP(Thermal Design Power)上限等。
§ 在虛擬化環境下提供額外的虛擬機信息查看功能。
5. 基於寒武紀人工智能處理器的計算架構
在使用寒武紀人工智能處理器產品部署深度學習推理應用的過程中,Cambricon NeuwareTM主要功能是加載訓練好的神經網絡模型和權值參數並將其解析生成包含了寒武紀指令集和模型參數的寒武紀模型數據,將其傳輸至寒武紀智能處理器產品的DRAM(Dynamic Random Access Memory)存儲中,然后繼續通過Neuware輸入待處理的應用數據並讀取運算結果數據。
5.1推理計算流程
Cambricon NeuwareTM在深度學習推理應用中的開發和部署流程如下圖所示:
圖5.1 使用Neuware進行推理的應用開發和部署流程
在基於深度學習編程框架進行開發的過程中,開發者可利用Neuware支持的框架所提供的編程接口加載訓練好的神經網絡模型文件,包括神經網絡和權值參數文件。同時還能直接使用該框架創建神經網絡結構或修改已加載的神經網絡。隨后編程框架會調用CNML庫,將加載的模型文件解析並生成寒武紀指令文件以及轉換后的權值參數文件,即寒武紀模型數據。在解析模型的過程中,用戶可以使用融合模式以提升后續的模型運行效率,也可以使用Bang語言編寫網絡算子並通過Plugin(插件)方式將其整合到CNML的操作數(Operator)中,並生成整合后的寒武紀指令文件。
在應用部署的過程中,上述CNML生成的寒武紀模型數據文件通過CNRT庫經驅動程序傳輸至寒武紀智能處理器產品上的DRAM中。該過程稱為在線部署,即每次部署寒武紀模型前均需要經過CNML解析和編譯並生成模型數據文件。而在離線部署的情況下,開發者可調用CNML接口直接將上述寒武紀模型數據文件保存為離線模型文件,隨后在每次部署時僅需調用該離線文件即可,省去了編譯和解析過程。該離線部署方式同時也是使用寒武紀終端產品部署深度學習應用的主要方法,即在終端產品上加載生成好的離線模型即可。
5.2 利用多核和多卡進行並行的推理計算
為有效提升深度學習應用的運行效率,寒武紀智能處理器產品在部署深度學習應用時使用多核並行計算和多通道DRAM訪存模式,同時在雲端部署中還可以支持多機(多台服務器)、多卡運行,即同時使用多塊寒武紀智能處理卡協同完成深度學習推理任務。下圖以寒武紀MLU®100智能處理器架構為例介紹芯片上的推理計算流程:
圖5.2 MLU100智能處理器架構
Neuware生成的寒武紀模型數據和待處理的應用輸入數據都加載到智能處理卡的DRAM中以后,啟動卡上的智能處理器,其內部的眾多處理器核就能夠並行執行該神經網絡模型。以MLU100智能處理器為例,其內部共有32個處理器核,相互之間通過片上網絡(NoC, Network on Chip)模塊互連,這32個處理器核能夠訪問相同的數據在DRAM上的地址范圍,協同工作進行神經網絡的推理計算。
在部署深度學習應用時,開發者只需要根據實際應用需求利用Neuware指定所需的處理器核的數量,在部署時Neuware能夠將神經網絡模型在拓撲結構、輸入輸出、模型參數等多個維度進行划分,使得划分后的模型能夠同時在多個處理器核上並行地執行,並自動的保證多核間的數據同步。通常情況下,其使用的核心數更多,處理器所耗的計算時間就更短,有利於降低端到端延遲。此外還支持在多組處理器核上同時運行多個模型,各組處理器核在計算時共享了這些指令和參數,這樣多組處理器核即可同時處理多份輸入數據,極大地提升了處理器進行深度學習推理計算的吞吐率,進而提升了智能處理卡的整體運算性能。
寒武紀智能處理器產品除了多核並行計算的功能之外,其雲端智能處理卡還支持多機多卡運行。即多個服務器上的多塊寒武紀智能處理卡可協同完成並行推理計算的任務。Neuware會根據開發者指定的硬件資源,利用其中的CNCL(Cambricon Neuware Communication Library)庫將深度學習應用中的待處理數據分布在多塊卡上的處理器上並行處理。其中,CNCL是面向寒武紀智能處理卡設計的高性能通信庫,幫助開發者優化了基於智能處理卡進行多機多卡的集合通信操作。CNCL支持多種針對寒武紀智能芯片的互聯技術,包括PCIe、Serdes、Infiniband Verbs以及IP sockets。同時,CNCL能夠根據芯片的互聯拓撲關系,自動的選擇最優的通信算法和數據傳輸路徑,從而最小化使用系統和硬件資源、最大化利用傳輸帶寬完成不同的通信操作。
5.3 寒武紀人工智能處理器架構的主要特性
除上述功能外,寒武紀智能處理器架構還擁有以下主要特性:
· 通用性好。支持各類深度學習技術,支持多模態智能處理(視覺、語音和自然語言處理)。
· 高能效。相比GPU處理器,采用了針對深度學習和人工智能應用特點定制的指令集和處理器架構,具有更優的能效比。
· 可以以極小的芯片面積,提供高性能低功耗的深度學習解決方案。
· 針對DRAM訪存數據,增加了數據壓縮/解壓功能,大幅節省內存容量和訪存帶寬
· 包含多級緩存和共享存儲結構,可充分利用處理器內部存儲進行性能優化
· MLU270處理器和1M處理器IP均支持混合精度的數據類型,包括FP32、FP16、INT16、INT8、INT4。
6. 豐富的多媒體開發套件
人工智能技術在計算機視覺(Computer Vision)的應用中,除了基本的智能處理以外,往往需要對多媒體數據流進行預處理和后處理,比如針對智能攝像頭采集的視頻或圖片數據流進行編解碼,而這些編解碼功能對實時性和吞吐率的需求是非常高的,尤其是當人工智能計算硬件在同時處理多路高清視頻流時,其編解碼所需的硬件算力往往會制約計算硬件整體的性能,從而導致計算硬件所能處理的高清視頻路數較低或實時性能差等情況。針對這個問題,寒武紀在思元100和思元270系列智能處理卡中增加了視頻和圖片編解碼的硬件模塊,不再需要服務器CPU參與編解碼運算。該硬件模塊可以和智能處理卡上搭載的寒武紀智能處理器芯片協同工作,確保編解碼過程不會阻塞智能處理器的推理過程,從而進一步提升了智能處理卡的整體性能,確保了多媒體數據流智能處理的實時性和吞吐率。
Neuware針對寒武紀智能處理卡上的編解碼硬件模塊提供了一套視頻和圖片的編解碼SDK,便於開發者在應用中調用接口以開發適合自己產品應用場景的功能。同時,針對計算機視覺領域應用中常用到的視頻和圖片的結構化智能分析,Neuware也提供了一套SDK,提供了主流的智能處理方法並針對寒武紀智能處理卡進行了性能優化。
6.1 視頻和圖片編解碼SDK
CNCodec是基於寒武紀智能處理卡開發的一套視頻和圖片編解碼SDK,封裝了視頻和JPEG圖片的編解碼接口,在兼顧靈活性的同時,可以充分發揮硬件編解碼性能。CNCodec提供了一套C語言的API,支持多路並發的視頻和圖片的解碼、編碼以及縮放等常見后處理。
其主要特性如下:
· 解碼輸出像素格式⽀持:YUV420SP-NV21、BGR24、RGB24、YUV422。
· 編碼輸⼊像素格式⽀持:YUV420SP-NV21、BGR24、RGB24、YUV422。
· 支持多路並發編解碼通道。其中,思元270最高可支持64路編解碼通道;思元100最高可支持32路編解碼通道。
· 最高支持4096*2160輸入分辨率。
· 解碼數據格式支持:MPEG4、H.264、H.265、JPEG、VP8。
· 編碼數據格式支持:H.264、H.265、JPEG。
6.2 視頻和圖片智能分析SDK
針對視頻和圖片智能分析,Neuware提供了兩套SDK:CNStream和開源多媒體編程框架Gstreamer。其中,CNStream是針對寒武紀智能處理卡上快速部署和二次開發SDK,借助思元系列板卡的硬件特性,CNStream可以幫助開發人員快速構建高效、高性能、多場景的可擴展的AI應用程序。CNStream基於模塊化和流水線的思想,提供了一套基於C++語言的API,適用於視頻結構化、姿態檢測、圖像分割等常見應用領域。適用於圖像視頻處理的多個應用領域,能幫助客戶快速部署和落地應用需求。
針對視頻分析領域,CNStream提供了3個通用功能模塊:視頻解碼模塊、神經網絡推理模塊和顏色域轉換模塊。其中,視頻解碼模塊可以對多種格式的視頻壓縮格式進行解碼;神經網絡推理模塊可以使用多種神經網絡離線模型對解碼得到的圖像數據進行神經網絡推理。CNStream的插件式設計,給用戶提供了視頻流解碼和推理之后對數據進一步加工處理的辦法。
其主要特性如下:
· 支持高並發的多級流水線。
· 支持異構並發神經網絡推理。
· 靈活可變的插件機制。
· 極低的二次開發成本和部署成本。
· 內置大量可以直接使用的硬解碼,前處理,后處理,顯示,OSD等插件。
· 支持Edge to Cloud。
· 支持運行時在線模型轉離線模型。
此外,Neuware還支持開源的多媒體編程框架Gstreamer,提供了和原始框架一樣的API,並通過寒武紀智能處理卡加速其內部的運算過程,它和CNStream一樣可以幫助開發人員快速構建高效、高性能、多場景的可擴展的人工智能應用程序。和CNStream相比,Gstreamer可以使用大量已經開源的插件,適合已經在Gstreamer框架基礎上進行業務開發的客戶以極低的成本快速遷移到寒武紀推理平台。
此外,Neuware還提供了對OpenCV和FFmpeg的部分編程接口支持並利用寒武紀智能處理卡加速其內部運算過程,其編程接口的適配正在不斷完善中。
7. 在雲端和終端部署深度學習推理應用
7.1 雲端部署
Neuware為客戶在雲端部署深度學習推理應用提供了便捷而高效的虛擬化技術和軟件環境。
Kubernetes
Kubernetes是一個用於自動部署、擴展和管理容器化應用程序的開源系統,支持橫向縮放、自我修復、存儲編排、服務發現和負載均衡等功能。Device Plugins是Kubernetes提供的一種機制,用於第三方設備廠商通過插件化的方式將設備資源對接到Kubernetes,為容器提供額外計算資源。
Neuware遵循Kubernetes Device Plugin規范和機制實現,用於發現、上報、分配和監控寒武紀智能處理卡資源,實現寒武紀智能處理卡和Kubernetes對接,實現寒武紀智能處理卡容器虛擬化功能。
SR-IOV
為了進一步提高寒武紀智能處理卡在雲端服務器上的利用率,降低用戶成本,思元270及以上產品支持SR-IOV硬件虛擬化技術,SR-IOV技術允許在多個虛擬機之間高效共享PCIe設備,並且它是在硬件中實現的,可以獲得能夠與本機性能媲美的I/O性能。Neuware SR-IOV主要特性如下:
· 可獲得近似原生的性能,
· 可擴展性好,可配置支持1/2/4 VFs
· 支持熱升級
· 支持熱遷移
· 不同虛擬機之間可實現安全隔離性
7.2 端雲一體部署
寒武紀智能處理器終端產品和雲端產品共享同樣的軟件接口和完備生態,可以方便地進行人工智能應用的開發、遷移和調優。Neuware軟件棧的底層驅動,同時支持SoC和PCIe兩種環境,其運行模式脫離了上層深度學習框架,跨越終端與雲端的設備障礙,是端雲一體開發和部署的基礎。開發者可以借助雲端豐富的計算資源進行算法模型的解析與調試,利用Neuware生成離線模型,並能夠在任意搭載寒武紀智能終端IP的設備運行,解決了終端調試手段受硬件資源限制的問題。同時,由於該離線模式無編譯過程,擺脫了對CNML與框架層的依賴,是終端部署的最佳選擇。端雲一體業務部署流程如下圖所示:
圖7.1 端雲一體開發和部署流程
8. Cambricon Neuware™總結
得益於近年來深度學習技術的迅速發展,人工智能技術如今已廣泛應用於越來越多的行業領域,但隨着深度學習算法模型規模和種類的迅速增長,其推理過程在實際的應用和部署過程中需要計算硬件做到高性能、高精度、低延遲和低功耗,同時深度學習應用開發對靈活性和硬件算力的需求也制約了其應用落地。
寒武紀端雲一體人工智能開發平台Cambricon Neuware™能夠很好地處理上述問題,Neuware支持全系列寒武紀智能處理器產品,包括智能處理卡和智能處理器IP產品,用戶可充分利用其深度學習加速功能提升深度神經網絡模型的推理性能。Neuware集成了多種主流的深度學習編程框架,使得應用的開發更加簡潔且通用,減少客戶遷移開發環境的成本;還提供了高性能編程庫CNML和CNRT,進一步提升編程的可擴展性和推理程序的運行性能;此外還提供了Bang語言用於客戶開發自定義或特殊的算法模型。
為了進一步提升該模型在寒武紀智能處理器產品上運行時的推理性能,Neuware提供了多種性能優化策略,包括在線融合模式、離線模型模式以及低精度量化方法。在提升運行效率的同時降低了推理的端到端時延和對I/O帶寬的占用。
此外,Neuware針對寒武紀智能處理卡上的編解碼硬件模塊提供了一套視頻和圖片的編解碼SDK,便於開發者在應用中調用接口以開發適合自己產品應用場景的功能。同時針對視頻和圖片的智能分析,Neuware提供了兩套SDK:CNStream和Gstreamer,適用於有快速部署和簡單應用落地需求的客戶。
針對寒武紀智能處理器產品在雲端部署,雲端芯片產品支持容器及Kubernetes編排技術,以及在思元270及以上產品支持SR-IOV虛擬化技術,可實現硬件資源池化及按需分配;在終端,借助Neuware端雲一體開發和部署,可借助雲端豐富的計算資源進行算法模型的解析與調試,然后在終端產品上完成最終部署。