白夜:一文看懂AI项目流程及边缘设备开发
在《AI未來星球》內部群中,白夜從AI項目開發及邊緣設備開發的角度,深入淺出的分享了,AI項目開發中的各種感受,以及工作中使用過的一些邊緣設備的開發經驗。
PS:不同嘉賓分享中涉及的相關代碼及圖片,可點擊下載。
文章目錄
1 個人簡介2 第一個深度學習項目
3 從GPU到邊緣計算設備
3.1 AI項目的一般開發交付流程
3.2 AI產品常見的三種交付形態
3.3 應用類的基本框架
3.4 為什么選擇邊緣計算設備?
3.5 邊緣計算設備的特點
4 常見的邊緣計算設備平臺
4.1 NVIDIA Jeston
4.2 華為atlas
4.3 比特大陸 Sophon SE5
4.4 Amlogic
4.5 寒武紀MLU
5 邊緣計算設備的使用
5.1 邊緣計算設備的選型思路
5.2 邊緣計算設備比較
5.3 邊緣設備與GPU服務器的區別
5.4 邊緣計算設備的一般開發流程
5.5 常見問題
6 互動問答
1 個人介紹
大家好,我是白夜。
目前在蘇州,主要從事邊緣計算設備端側,智能安防應用的開發與部署。
我本科是電子信息工程專業,碩士是電磁場與微波技術方向,2018年底開始接觸并進入AI行業。
因為工作中用過很多公司的邊緣設備,在大白的社群中,很多人也都對邊緣設備感興趣。
因此今天主要結合工作中接觸過的幾種邊緣計算設備,圍繞深度學習應用部署這個主題,與大家分享一些心得體會。
2 第一個深度學習項目
相信很多人可能跟我一樣,接觸的第一個深度學習項目,應該就是手寫數字/漢字的識別。
18年底面試目前的公司時,復試的考題就是手寫漢字識別。
因為是第一個項目,所以對于考題現在還記憶猶新。
當時的考題主要是中文字符分類,提供了3755個漢字,每個漢字有若干個手寫字符。
題目很簡單,而要求是:
① 使用任意一種深度神經網絡框架下,編寫程序,實現識別字符的功能;
② 通過修改超參、網絡參數、網絡結構(替換或增加網絡層)等方式,提高模型的分類準確率;
③ 完成報告,說明字符分類的原理、修改網絡參數或結構的理由和具體操作、模型性能分析;
④ 提交完整可執行代碼,附帶代碼執行說明文檔。
當時對于AI行業還不是很熟,經過大量的檢索及思考。
最終參考論文《Deep Convolutional Network for Handwritten Chinese Character Recognition》,選用了一個基于VGG和Alexet的M5網絡(包含3個conv3卷積層和2個全連接層),并使用Tensorflow構建了一個3755類的圖像分類器,完成了任務。
通過這個任務,在短時間內,我惡補了機器學習和深度學習相關的基本概念(如模型訓練集、驗證集、測試集等)。
厘清了人工神經網絡和CNN的區別,并熟悉了深度學習軟件環境的安裝和使用,熟悉了在linux下開發編程的基本流程。
那個時候,感覺學習的速度,和勁頭是最足的。
通過手寫漢字識別,我算是簡單入了門,了解了圖像分類的基本原理,之后慢慢地也開始接觸目標檢測、特征提取、目標追蹤等相關的模型和算法。
當時Pytorch還沒有現在這么火,大家用的比較多的是Tensorflow和Caffe。
得益于Tensorflow完備的用戶手冊和官方教程,學習的路上省力不少;
慢慢地在一次次地編譯Caffe、FFmpeg、Opencv和Debug中,對Linux系統、環境變量、軟件多版本共存、庫包依賴關系、Cmake、Makefile、CUDA等有了更加深刻的認識。
終于后來也可以用Caffe實現自定義算子和神經網絡層了。
后來我加入了公司的的項目工程化落地小組,開始參與基礎平臺的研發和具體項目的開發:從視頻編解碼到模型推理加速,從Opencv到FFmpeg,從Gstreamer到DeepStream,從CUDA到Tensor RT。
慢慢地我開始認識到模型訓練和推理僅僅是一個開始,在 AI項目落地的過程中,其實還有相當大一部分不AI的工作,這些工作甚至占據了項目開發的絕大部分時間。
其中,也有很多值得我們思考和解決的問題:
① 比如如何縮短項目開發周期,快速應對不同客戶的多樣需求,完成POC演示,推進項目落地?
② 針對不同的實際場景,如何對算法硬件平臺進行選型?
③ 如何綜合現有技術手段,解決CV以及深度學習算法無法解決的盲區問題,為客戶提供最優的解決方案?
④ 如何充分挖掘邊緣計算設備的算力,降低單路視頻分析的成本?
⑤ 如何形成數據的閉環,在項目部署后便捷地采集數據,不斷迭代優化模型,提高客戶的滿意度?
上面主要是工作中,對于AI項目的一些思考。
下面再回到本次分享的主題,聊聊在項目中,為什么使用邊緣計算設備?
3 從GPU到邊緣計算設備
不過在詳細介紹邊緣設備前,我們先了解下AI項目的一般開發交付流程。
3.1 AI項目的一般開發交付流程
AI項目的開發過程中,通常包括以下環節:
① 數據采集:現場數據采集、數據標定、數據集校驗;
② 模型訓練:設計模型、訓練模型;
③ 模型部署:模型轉化、模型量化、模型裁剪、模型微調;
④ 業務開發:根據項目的需求,設計業務規則,完成相應業務邏輯處理代碼的編寫調試;
⑤ 項目部署:制作安裝包或者docker鏡像,安裝部署在目標平臺上;
⑥ 模型優化:根據現場的應用采集數據,優化模型
在整個流程有兩個難點:一是數據,二是需求。
有時候沒有數據,模型達不到理想的效果,可能客戶都不給試用的機會,更別提數據采集優化模型了;
有時候客戶很配合,數據不是問題,但是客戶的需求很多,要求很高,甚至有些需求目前的AI根本做不到,但是為了生存也只能硬著頭皮上,還要應對客戶隨時都可能“微調”的新要求。
所以現實往往是:
① 要么做了一堆沒有客戶愿意買單的POC項目,要么做了幾個遲遲無法完成交付,錢也不多的小項目。
② 客戶以為我們提供的是個拿來即用的成熟產品,然而事實卻僅僅是個待采集數據進一步優化的試驗品。
因此,面對紛繁復雜的應用場景,客戶自己也可能不太清楚的不確定需求。
AI公司要想走出研發投入多、成本高、項目交付周期長的困局,必須要解決規模復制效益的問題,集中力量向某個方向發力,打造有技術壁壘或者市場壁壘的產品。
哪怕是做項目,也應當按照做產品的思維設計和組織,把項目開發變成搭積木,因為只有可復制的產品,才能分攤高昂的研發成本,應對快速變化的市場需求。
3.2 AI產品常見的三種交付形態
了解了AI項目開發的流程,再看一下客戶產品的交付。
在工作中,面對不同的客戶,通常需要交付不同的非標類產品,所以先聊一下常見的交付方式。
行業場景和客戶需求雖然五花八門,但總的來說,交付的產品通常有3種形態:
(1)服務Service:
AI模型的部署服務,客戶端可以通過HTTP/REST或GRPC的方式來請求服務。
輸入一張圖片/一段視頻,輸出圖片/視頻的分析結果,通常按次數收費或者按時間段授權。
比如百度AI市場上提供的各種API服務:
這種形式,業務流程相對是單一的,主要需要考慮的是充分利用GPU算力資源,能夠提供穩定的高吞吐量的服務。
這種服務通常部署在GPU服務器上,可能是客戶局域網內的服務器,也可能是公有云上的服務器。
市面上也有一些成熟的商用框架可以使用,如NVIDIA的Triton Inference Server, Google的TF Servering,百度的Paddle Serving等。
Triton是 NVIDIA 推出的 Inference Server,專門做 AI 模型的部署服務。
而客戶端可以通過HTTP/REST或GRPC的方式來請求服務,特性包括以下方面:
① 支持多種框架,例如 Tensorflow、TensoRT、Pytorch、ONNX甚至自定義框架后端;
② 支持 GPU 和 CPU 方式運行,能最大化利用硬件資源;
③ 容器化部署,集成 k8s,可以方便的進行編排和擴展;
④ 支持并發模型,支持多種模型或同一模型的不同實例在同一GPU上運行
⑤ 支持多種批處理算法,可以提高推理吞吐量;
(2)開發包SDK或者功能組件:
有的中間商或集成商以及一些傳統的非AI公司,需要用深度學習解決問題的能力。
把基于深度學習的算法能力,集成到自己的業務系統中,為最終用戶提供服務。
這時,他們會尋找第三方的合作伙伴,提供一套封裝了深度學習算法能力的SDK或者功能組件。
向他們的業務系統賦能AI算法能力,比如百度的EasyDL-零門檻AI開發平臺,云從科技的人臉識別服務等。
下圖是百度EasyDL開發平臺的功能示意圖:
(3)應用Application:
這種形式的產品,通常面向的是某個場景的最終用戶。
因此交付的產品,是一整套包括交互界面在內的軟件系統,有時也會將硬件一起捆綁交付。
對這類產品,用戶需要的其實只是應用的分析輸出結果。
比如繪制了違規提醒框的實時畫面,web、郵件甚至手機短信聯動的告警消息,某個時段或者滿足某種條件的數據分析報表等。
這類產品一方面需要提供友好的操作界面供用戶查看使用,同時可能還需要提供對接用戶第三方平臺的接口,將分析產生的告警結果等信息,推送到用戶的業務管理平臺。
3.3 應用類產品的基本框架
當然對于大多數中小型公司來說,主要做的還是應用類項目。
這些項目,并不只是單個的功能,而是一套比較完整的系統。
以視頻分析為例,通常包括:視頻結構化引擎、業務中臺、管理平臺等。
(1)視頻結構化引擎:
通過分析視頻內容,生成包含了目標坐標、類別、屬性、特征、追蹤id等信息的結構化數據,供業務中臺做進一步的業務邏輯處理。
為了簡化開發流程,提高代碼復用率,降低代碼維護難度,視頻結構化引擎作為一個基礎平臺,應當適配不同硬件平臺,屏蔽硬件差異,向管理平臺提供統一的接口,同時支持根據不同需求靈活配置任務流程。
視頻結構化引擎主要分成三個部分:
① 視頻源接入:支持多種接入,圖片,視頻文件,rtsp流,GB28181流,海康SDK(工業相機)
② 流程Pipeline配置和創建:
a.輸入數據預處理:對輸入數據做尺寸縮放、歸一化等;
b.模型推理:使用多種硬件平臺進行推理,如NVIDIA GPU、Jetson、Bitmain、Cambricon等
c.輸出數據后處理:對模型的結果,進行后處理,得到可以顯示的結果;
③ 結果輸出:終端打印、寫入Redis、輸出畫面到屏幕、保存結果到視頻文件、推送rtsp流等。
(2)業務中臺:
主要對業務進行邏輯處理,通常由業務邏輯和對外接口構成。
(3)管理平臺:
視頻結構化引擎或者業務平臺可能是分布式的,部署在同一局域網內的不同主機、甚至是不同局域網內的不同主機上,管理平臺用來管理這些主機,通常包含以下部分:
① 主機管理
② 視頻源管理
③ 任務管理
④ 用戶交互界面與結果查看
⑤ license認證與管理
比如下圖是我們系統中,管理平臺的圖示。
3.4 為什么選擇邊緣計算設備?
了解AI項目的開發流程、交付方式,以及基本架構,下面再回到本文的核心:邊緣計算設備。
邊緣計算設備,其實是相對于云計算而言的。
不同于云計算的中心式服務,邊緣服務是指在靠近物或數據源頭的一側,采用網絡、計算、存儲、應用核心能力為一體的開放平臺,就近提供最近端服務。
其應用程序在邊緣側發起,為了產生更快的網絡服務響應。
滿足行業在實時業務、應用智能、安全與隱私保護等方面的基本需求。
由于數據處理和分析,是在傳感器附近或設備產生數據的位置進行的,因此稱之為邊緣計算。
因此我們可以看出,邊緣計算的優點:
① 低延遲:計算能力部署在設備側附近,設備請求實時響應;
② 低帶寬運行:將工作遷移至更接近于用戶,或是數據采集終端的能力,能夠降低站點帶寬限制所帶來的影響。
③ 隱私保護:數據本地采集,本地分析,本地處理,有效減少了數據暴露在公共網絡的機會,保護了數據隱私。
當然許多同學,可能都是使用GPU服務器做視頻分析,對邊緣計算設備接觸不一定多,但是有的場景下,直接使用GPU服務器做視頻分析,存在幾個問題:
① 許多場景下,數據源(攝像頭)是分布式的,可能分布在不同的子網內,甚至分布在不同的城市,使用GPU服務器集中處理延時大、帶寬占用高、能耗高(因為傳輸的數據中大部分是無效信息);
對于分散的工地或者連鎖店店鋪等場景,如果要集中處理,不僅要占用寶貴的專線帶寬,還要內網穿透,麻煩且不經濟;
② 有的場景下使用GPU,會造成算力過程、資源浪費,比如連鎖店鋪的客流統計,每個店鋪可能只有2-4路攝像頭,少的甚至只有1路,使用GPU顯然大材小用;
③ 相比較純軟件的產品,客戶更傾向于為軟硬件一體的產品買單。
再舉一個更直觀的案例,更明顯的看出邊緣設備的優點,之前在知乎上看到的。
以波音787為例,其每一個飛行來回可產生TB級的數據。
美國每個月收集360萬次飛行記錄;監視所有飛機中的25000個引擎,每個引擎一天產生588GB的數據。
這樣一個級別的數據,如果都通過遠程,上傳到云計算的服務器中,無論對于算力和帶寬,都提出了苛刻的要求。
風力發電機裝有測量風速、螺距、油溫等多種傳感器,每隔幾毫秒測一次,用于檢測葉片、變速箱、變頻器等的磨損程度,一個具有500個風機的風場一年會產生2PB的數據。
如此級別的數據,如果實時上傳到云計算中心并產生決策,無論從算力和帶寬的角度,都提出了苛刻的要求,更不要說由于延遲而產生的即時響應問題。
面對這樣的場景,邊緣計算就體現出它的優勢了。
由于部署在設備側附近,可以通過算法即時反饋決策,并可以過濾絕大部分的數據,有效降低云端的負荷,使得海量連接和海量數據處理成為可能。
因此,選擇使用服務器還是邊緣計算設備,主要還是考慮哪種方式更符合場景需求,哪種方式更便捷更經濟。
如果應用場景需要集中分析大量數據,比如幾十路甚至上百路攝像頭,那肯定還是應當選擇x86服務器。
當然這種情況不一定只有Nvidia GPU一種選擇,比特大陸、華為、寒武紀都有PCIE的計算加速卡可以選擇;
如果應用場景分布在不同地點的節點,并且每個節點要分析的攝像頭數量在10-20路以下,那么選擇邊緣計算設備顯然更經濟更有效;
有的時候甚至可以直接選用帶AI處理芯片的智能攝像頭。
3.5 邊緣計算設備的特點
了解了選擇邊緣計算設備的原因,我們再來看一下邊緣計算設備的特點:
(1)算力有限:常常在幾T~幾十T INT8 OPS之間
表格中的前3項是NVIDIA的GPU,其峰值算力為根據CUDA核心數、主頻,折算為FP16而計算的理論值,估算公式為:
計算能力的峰值 = 單核單周期計算次數 × 處理核個數 × 主頻
后三項為NVIDIA的邊緣計算模組Jetson的不同產品,峰值算力為產品手冊中給出的參考值。
這些峰值算力雖然并不完全準確,但也基本代表了設備的算力情況。
不準確的原因主要有兩方面:
① 這些是理論值,實際中還要考慮線程調度、數據拷貝、異構同步等,實際算力肯定達不到理論值;
② 除了CUDA核心,設備內還會有其他加速單元,比如Tensor Core、DLA(深度學習加速器)。
以Jetson AGX Xavier為例,他還有48個Tensor Core,以及DLA,(2x) NVDLA Engines* | 5 TFLOPS (FP16),相當于額外的5TFLOPS算力。
因此官方手冊中會寫AGX Xavier的AI算力是32TOPS INT8(16TOPS FP16)。
(2) 功耗低:通常邊緣計算設備的功耗在5-30W,可以通過太陽能供電,進行戶外移動作業。
(3) 硬件接口豐富:便于與其他設備/系統對接
(4) 體積小,重量輕:安裝簡便靈活,便于分布式部署和擴展
4 幾種邊緣計算設備平臺
掌握了邊緣設備的一些基礎知識,我們再了解市面上常用的一些邊緣計算設備。
市場上推出商用深度學習計算加速設備的廠商其實有很多,只不過在訓練領域,主要還是英偉達占據了大部分市場份額。
除此之外,比特大陸(算豐Sophon),寒武紀(思元MLU),華為(昇騰Ascend,海思),晶晨(Versillion),依圖(QuestCore),還有英特爾(Movidius VPU),谷歌(TPU),百度,特斯拉(Dojo D1),賽靈思都有自己的深度學習處理器或者解決方案。
(1) 訓練平臺:通常以英偉達Nvidia-GPU為主;
(2)推理平臺:云端和設備端,CPU(x86 arm),GPU,NPU,TPU,FPGA,ASIC;
下圖是相關平臺的圖示:
下面,我再重點介紹一下幾種常見的邊緣計算設備。
4.1 NVIDIA Jetson
NVIDIA Jetson是NVIDIA為新一代自主機器設計的嵌入式系統,是一個AI平臺 ,這個系列已經有不少成員了。
4.1.1 硬件參數
目前Jseton系列也有很多不同的型號,下圖是不同型號的相關參數:
4.1.2 開發工具鏈
當然每個邊緣設備平臺,還有專門的開發工具鏈。
Jetson也是NVIDIA生態的一員,因此,也是基于CUDA、cuDNN以及TensorRT的。
與GPU不同,Jetson所依賴的軟件庫包是以Jetpack的形式整體打包提供的,其中包含了操作系統、CUDA、cuDNN、TensorRT、Opencv、視頻編解碼等豐富的庫包及API接口。
目前,官方最新的版本是JetPack 4.6,其內的軟件版本相關信息如下圖:
其他需要的軟件,比如支持支持CUDA的OpenCV、CUDA的Pytorch,可以通過源碼交叉編譯或者從NVIDIA的官方論壇下載。
英偉達提供了豐富的SDK包供各個領域和方向的用戶選擇,比如音視頻分析中常用的數據流分析工具包Deeptream。
開發人員可以GStreamer插件的形式自定義插件,構建個性化的視頻分析管道,通過硬件加速完成各種任務,實現深度學習任務的快速部署。
比如下圖就是一個典型的視頻分析管道:
4.2 華為 atlas
Atlas是華為基于昇騰系列AI處理器和業界主流異構計算部件,打造的智能計算平臺。
通過模塊、板卡、小站、AI服務器等豐富的產品形態,打造面向“端、邊、云”的全場景AI基礎設施方案,可廣泛用于“平安城市、智慧交通、智慧醫療、AI推理”等領域。
4.2.1 硬件參數
下圖是Atlas各個版本的相關參數及產品圖示:
4.2.2 開發工具鏈
華為atlas的開發工具鏈主要有兩部分:
(1)mind studio:這是基于昇騰AI處理器的開發工具鏈平臺,提供了基于芯片的算子開發、調試、調優以及第三方算子的開發功能。
同時還提供了網絡移植、優化和分析功能,另外在業務引擎層提供了一套可視化的AI引擎拖拽式編程服務,極大的降低了AI引擎的開發門檻。
不過mind studio是通過Web的方式向開發者提供一系列的服務,其實也不是個必需品,許多開發者在開發過程中只是用它來查看日志。
因為atlas的日志都是加密的,必須使用mind studio來查看。
(2)DDK(Device Development Kit):設備開發工具包,為開發者提供基于昇騰AI處理器的相關算法開發工具包,旨在幫助開發者進行快速、高效的人工智能算法開發。
DDK可以用于構建相關工程的編譯環境,集成了TE、DVPP、流程編排等昇騰AI處理器算法開發依賴的頭文件和庫文件、編譯工具鏈、調試調優工具以及其他工具等。
下圖是華為atlas開發工具鏈的示意圖:
需要注意的是,Atlas500小站是主從架構的,主機端host側為華為自研海思Hi3559A,從機端device側為Atlas 200 AI加速模塊,host和device上運行著2個相互獨立的系統,也就是device側的Atlas200上也是有arm cpu的。
這就導致,調試過程中有時很別扭,比如,程序運行過程中,想要查看Atlas200的打印信息,只能通過mind studio查看日志。
值得一提的是,為了高效使用Ascend 310芯片的算力,華為提供了Matrix框架來完成推理業務遷移,有點類似gstreamer的味道。
把每個功能節點抽象成流程的基本單元Engine,每個Engine對應著一個獨立的線程。
在Graph配置文件中配置Engine節點間的串接和節點屬性(運行該節點所需的參數)。
節點間數據的實際流向根據具體業務在節點中實現,通過向業務的開始節點輸入數據激活Graph。
每個Graph是一個獨立的進程。
Mind Studio也提供了可視化的界面用于配置Graph:
Atlas500智算小站整體開發體驗良好,特別是Matrix框架,將場景抽象,便于靈活地應對不同業務需求。
但device側在運行中崩潰以后問題不好排查,此外,Graph中各個Engine節點之間通信依賴的HDC如果崩潰,也會直接影響業務進程的運行。
4.3 比特大陸 Sophon SE5
比特大陸,對,就是那家做礦機起家的比特大陸,憑借其在礦機芯片領域積累的技術實力,也積極向人工智能方向發力,推出了一系列性能強勁的AI算力產品(Sophon系列),包括算力芯片、算力服務器、算力云,主要應用于區塊鏈和人工智能領域。
下圖是其官網列出的主要產品:
4.3.1 硬件參數
SOPHON SE5智算盒是一款高性能、低功耗邊緣計算產品,搭載算豐科技自主研發的第三代TPU芯片BM1684,INT8算力高達17.6TOPS,可同時處理16路高清視頻,支持38路1080P高清視頻硬件解碼與2路編碼。
4.3.2 開發工具鏈
比特大陸提供了BMNNSDK(SOPHON Neural Network SDK)一站式工具包,提供底層驅動環境、編譯器、推理部署工具等一系列軟件工具。
BMNNSDK,涵蓋了神經網絡推理階段所需的模型優化、高效運行時支持等能力,由BMNet Compiler和BMRuntime兩部分組成。
BMNet Compiler 負責對各種深度神經網絡模型(如caffemodel)進行優化和轉換,充分平衡EU運算和訪存時間,提升運算的并行度,并最終轉換成算豐科技TPU支持的bmodel模型。BMNet Compiler支持Caffe、Darknet、Tensorflow、Pytorch、MXNet等框架模型的轉換,暫不支持ONNX模型的直接轉換。
如果轉換失敗,提供BMLang編程語言,通過CPU指令或者BMKernel底層語言實現不支持的算子或層。
BMRuntime 負責驅動TPU芯片,為上層應用程序提供統一的可編程接口,使程序可以通過bmodel模型進行神經網絡推理,而用戶無需關心底層硬件實現細節。
此外,BMNNSDK重新編譯了FFmpeg和OpenCV,增加了硬件加速支持,同時提供了一套高級接口SAIL,支持通過C++、Python直接使用SAIL接口編程。
4.4 Amlogic
Amlogic,晶晨半導體是全球無晶圓半導體系統設計的領導者,為智能機頂盒、智能電視、智能家居等多個產品領域,提供多媒體SoC芯片和系統級解決方案。
下圖是搭載了其A331D芯片的智能盒子NeuBoard的相關參數,具有功耗低、性價比高的優點,有需要的同學也可以參考:
Amlogic的A311D中集成了ARM、NPU、GPU、VPU,NPU,NPU IP是由芯原微電子(Versilicon)提供的Vivante? NPU IP。
Versilicon提供了一套基于OpenVX的工具套件,Acuity Toolset幫助用戶將原生模型轉換為Vivante? NPU IP支持的模型。
Acuity Toolset支持Tensorflow、Tensorflow-Lite、Caffe、PyTorch、ONNX、TVM、IREE/MLIR等框架。
OPEN AI LAB 開源的針對嵌入式設備開發的輕量級、高性能并且模塊化引擎Tengine就支持Vivante? NPU IP。
此外,上海锘科智能科技(Neucore),Neucore也基于gstreamer開發了一套獨有的HCS框架,提供Linux和Android下的NeuSDK,可幫助客戶實現算法在CPU、NPU、GPU、DSP等多種架構的快速移植和部署。
NeuSDK中的Neucore Graph為客戶提供了一種更加便捷靈活的pipeline搭建方式,用戶可以使用SDK按照gstreamer插件的實現方式一樣實現自定義插件,并在web界面中通過拖拽式的操作快速自定義一系列的算法流程,完成任務部署。
4.5 寒武紀 MLU
中科寒武紀其實是較早布局深度學習處理器的企業之一,也是目前國際上少數幾家全面系統,掌握了通用型智能芯片及其基礎系統軟件研發和產品化核心技術的企業之一。
且能提供云邊端一體、軟硬件協同、訓練推理融合、具備統一生態的系列化智能芯片產品和平臺化基礎系統軟件。
寒武紀的產品線也比較豐富,但由于它本身是專注做芯片、模組與基礎軟件的,并不提供成品的邊緣計算設備或服務器,如果需要,可以從其合作的下游廠商處購買。
下圖是寒武紀MLU第一到第三代的相關參數:
寒武紀人工智能開發平臺(Cambricon NeuWare?)是寒武紀專門針對其云、邊、端的智能處理器產品打造的軟件開發平臺, Neuware采用端云一體的架構,可同時支持寒武紀云、邊、端的全系列產品。
下圖是寒武紀SDK的架構圖及常用的工具包:
5 邊緣計算設備的使用
5.1 邊緣計算設備的選型思路
通過前面邊緣設備的介紹,我們知道市面上有很多款邊緣計算設備。
那么針對各種不同的邊緣設備,當算法訓練完成,想要用邊緣設備部署時,如何選型?應該關注哪些參數和性能呢?
其實主要是以下幾點:
① 性能:arm核心數量和主頻、內存與AI模組專用內存、深度學習推理能力、視頻編解碼能力、jpeg編解碼以及其他視覺運算硬件加速能力。
② 價格:在性能都能滿足要求的情況下,價格自然成為選型的決定因素。
特別是同一個AI模組,其實會有多家廠商競品可供選擇。比如浪潮的EIS200和凌華的DLAP-211-JNX都是基于NVIDIA的Jetson NX模組;
③ 工具鏈:支持主流框架模型情況,算子及網絡模型支持情況,接口易用程度,SDK、技術論壇完備程度和技術支持力度;
④ 外圍接口:板載的外圍接口是否能滿足應用場景需求;
⑤ 功耗:有的客戶可能因為作業環境的限制對功耗要求比較嚴格,比如是在野外使用太陽能供電,但通常較低的功耗也意味著較低的算力。
5.2 邊緣計算設備比較
下圖是我整理的,幾種邊緣設備主要參數的對比圖:
| EIS200 | Altas 500 | Sophon SE5 | NeuBoard | NE-V-200 | |
| 實體圖 | |||||
| 設備廠商 | 浪潮 | 華為 | 比特大陸 | 锘科 | 格蘭泰克 |
| AI模組廠商 | NVIDIA | 華為 | 比特大陸 | Amlogic | 寒武紀 |
| AI模組 | Jetson NX | Atlas 200 | BM1684 | A311D | MLU220 M.2 |
| AI INT8算力 | 21TOPS | 22T/16TOPS | 17.6TOPS | 5TOPS | 8TOPS |
| CPU內存 | 8GB | 4GB | 4GB | 2GB/4GB | 4GB |
| AI內存 | 8GB | 8GB | 4GB | ||
| 存儲空間 | 16GB可擴展 | 擴展硬盤 | 32GB可擴展 | 4/8/16/32GBSD卡 | 32GB |
| OS | ubuntu18.04 | ubuntu18.04 | debian 9 | 定制linux | debian 10 |
| CPU | 6-core NVIDIA Carmel ARM?v8.2 64-bit CPU 6MB L2 + 4MB L3 | 海思Hi3559A | 8核A53@2.3GHz | 四核ARM Cortex A73 (2.2 GHz)+兩核ARM Cortex A53 (1.8 GHz) | 雙核Cortex-A72+四核Cortex-A53大小核CPU、主頻1.8GHz |
| 視頻解碼 | 2x 4K @ 60 (HEVC)12x 1080p @ 60 (HEVC)32x 1080p @ 30 (HEVC) | 16路1080P 30 FPS (2路3840*2160 60 FPS | 960fps 1080p(38路1080P@25FPS) | 4路1080P視頻流 | 16路H264/H265 1080@30幀解碼 |
| 視頻編碼 | 2x 4K @ 30 (HEVC)6x 1080p @ 60 (HEVC) | 1路1080P 30 FPS | 50fps 1080p(2路1080P@25FPS) | ||
| 工具鏈體驗 | 五顆星 | 四顆星 | 四顆星 | 三顆星 | 三顆星 |
| 技術支持度 | 四顆星 | 四顆星 | 五顆星 | 三顆星 | 三顆星 |
5.3 邊緣計算設備開發與GPU服務器開發的區別
我們再看一下,與GPU服務器相比,在邊緣計算設備上的AI應用開發部署的主要區別有:
① CPU架構不同:GPU服務器是x86架構,GPU插在主板的PCIE插槽內;
而邊緣計算設備是基于aarch64的整體設備,其中有ARM CPU和GPU以及NPU、TPU、VPU等;
② 資源有限:邊緣設備由于資源有限,底層要使用C/C++推理,程序需要充分優化,以壓榨硬件資源性能;
③ 交叉編譯:C/C++代碼直接在邊緣計算設備上編譯比較耗時,有的甚至不支持在設備中編譯,通常通過交叉編譯的方式,在宿主機上生成代碼,再拷貝到邊緣計算設備中執行;
④ 遠程調試:由于需要使用gdb server遠程調試,VSCode很好用;
⑤ 軟件安裝:邊緣計算設備通常運行的是裁剪/定制的linux,debian/ubuntu可以使用apt在線安裝庫包,但有的邊緣計算設備內的linux是精簡版的,沒有包管理工具,安裝軟件只能源碼交叉編譯;
5.4 邊緣計算設備的一般開發流程
了解了邊緣設備的內容,我們再看一下邊緣設備的一般開發流程,通常由幾部分組成:
(1)基礎平臺開發:深度學習分析引擎、業務中臺、管理平臺;
(2)模型轉換、驗證及優化:使用硬件平臺廠商提供的模型轉換工具套件將caffe、tensorflow、pytorch、mxnet、darknet、onnx等模型轉換為目標平臺模型,必要時進行模型量化以及模型finetune;對不支持的模型或層,自定義算子、插件實現
(3)視頻結構化引擎代碼適配:主要是視頻流及圖片編解碼、推理等模塊,任務管理、流程控制、前后處理等其他代碼通常都是跨平臺的;
(4)交叉編譯及測試:使用交叉編譯工具鏈編譯及調試代碼,交叉編譯工具工具鏈主要包括2部分內容,linaro gcc g++編譯及調試器和包含了目標平臺系統環境及軟件庫的所有代碼文件;
(5)業務代碼實現:針對不同場景的業務需求開發業務邏輯處理代碼;
(6)系統部署:通常使用docker部署,使用docker-compose編排多個docker容器或使用K8S管理多個分布式節點。
5.5 常見問題
當然在開發過程中,還會存在一些常見的問題,這里也羅列一些問題和解決方式:
(1)模型轉換失敗:
解決方案:
① onnx模型轉換失敗,可能是onnx和opset的版本不支持,可以更換版本嘗試;
② onnx模型轉換失敗,也可能是轉換工具對onnx某些層支持不好,可以先使用onnx-simplifier簡化模型,優化其中不必要的容易引起問題的層;
③ 如果是pytorch模型轉換失敗,需要注意pytorch有兩種類型的保存格式,一種是只有權重的,一種是帶有模型結構和權重的JIT模型;轉換工具基本都要求JIT模型,應當使用torch.jit.trace保存。
④ 使用工具鏈提供的編程語言自定義算子實現不支持的層;
⑤ 將問題反饋給硬件廠商,詢問是否有新版本的SDK或等待問題解決;
⑥ 反饋給算法同事,修改模型結構,嘗試使用其他支持的等價算子,重新訓練模型;
(2)模型推理結果不對:
解決方案:
① 檢查前后處理(包括輸入、輸出層的scale因子);
② 檢查模型轉換后輸出tensor的順序;
③ 使用工具鏈中提供的工具保存中間層結果,逐步排查解決。
(3)模型量化精度損失:
解決方案:
① 量化是一定會有精度損失的,這個無法避免;
② 數量更多和內容更均衡的量化集,可以在一定程序改善量化模型的精度;
③ 如果仍無法滿足要求,重新訓練量化后的模型(不是所有的平臺都支持)
(4)程序優化:
解決方案:
① 首先,檢查程序最耗時的部分是在哪里,找出制約性能的瓶頸:視頻解碼?任務隊列?數據拷貝?還是算力資源不夠,模型需要進一步裁剪優化?
② 然后,針對具體問題優化程序:使用更加高效的計算庫或者硬件加速接口、優化多線程多進程、改進數據結構、使用多Batch推理或者根據任務實際設置合理的處理幀率等。
總之,優化的主要原則就是減少不必要的數據拷貝、充分利用計算單元資源。
③ 通常,觀察AIPU(GPU/NPU/TPU)的利用率情況,如果一直比較平穩,說明計算資源得到了充分的利用;
如果起伏比較大,甚至有突然的高峰和低谷,說明某些時刻AIPU在等待數據;
④ 此外,某些AIPU可能對某種尺寸的數據、某些操作或特定參數的神經網絡算子做了專門優化,在設計模型時應優先選用高效的結構和參數。
比如有的AI加速芯片的,若卷積層的輸入不是8的倍數,底層會額外進行多次padding操作;stride為3的卷積核比其他卷積核要更高效;
輸入尺寸是512的倍數時的計算效率 > 256的倍數時的計算效率 > 128的倍數時的計算效率等。
6 互動分享
(1)能簡單說說交叉編譯嗎?典型場景是啥?
答:由于C/C++代碼是依賴于硬件平臺的二進制代碼,源碼需要經過編譯器編譯、鏈接,最終生成可執行的二進制代碼。
當我們在一個架構的平臺上,編譯生成在另一個架構的平臺上運行的代碼的過程,就叫交叉編譯。
交叉的意思就是編譯源碼的平臺與代碼運行的目標平臺不同,比如我們要在x86的機器上編譯生成在邊緣計算盒子aarch64上的代碼,就需要交叉編譯。
(2)分享中從性能角度比較了幾款邊緣小站,從性價比角度,你覺得哪個更好?
或者這么說, 如果讓你們公司挑選一個小站,把自有算法適配進去,以軟硬一體的標準品賣出去,你會挑選哪個盒子?
答:關于盒子的選擇,我覺得目前來說,還是Nvidia的Jetson系列比較有競爭力。
無論從價格還是生態來說,對開發者都是最友好的,同時代碼移植成本也最低。
這幾款邊緣計算設備的價格,除了華為官方的atlas500小站價格比較高,要1.2-1.6W。
amlogic的算力比較低,所以比較便宜外,其他的其實相差不是特別大,都在6000-8000,當然如果供貨量大,價格應該可以商量。
但是,NVIDIA的Jetson盒子成品雖然價格比較高,但是官方出的模組并不貴,比如NX是3500,AGX是5000多,對于初學者和個人開發者比較友好。
對于公司來講,雖然NVIDIA本該是第一選擇,但是NVIDIA畢竟是美國公司,因為收購ARM的事情,甚至還有傳言可能會放棄中國市場,所以也應該考慮這方面的風險。
國內的華為、比特大陸和寒武紀,其實都不錯,也可以考慮。
(3)在x86上的gnu工具是編譯不出aarch64的目標代碼的,需要用到對應aarch64的編譯器版本吧?這個就叫工具鏈?
答:編譯器是工具鏈中很重要的一部分,但是工具鏈中還有一部分就是目標平臺的系統環境,其中包含了程序依賴的運行庫。
這些依賴庫分為2部分:
① 一部分是屬于linux系統的基本庫,這部分庫通常都跟編譯器集成在一起;
② 另一部分是特殊的庫,比如我交叉編譯在比特大陸邊緣計算設備里的深度學習推理程序,還需要比特大陸的推理運行庫,這部分庫比特大陸會單獨提供,包含在其提供的sdk BMNNSDK中。
所以這些應該是一個整體,編譯器+系統/依賴庫。
注意:之前分享中涉及的相關代碼和圖片,可點擊查看下載。
參考文檔:
(1)Ubuntu 18.04 安裝 NVIDIA 顯卡驅動:Ubuntu 18.04 安裝 NVIDIA 顯卡驅動 - 知乎(2)驅動失敗問題:https://blog.csdn.net/Felaim/article/details/100516282
(3)信息系統的發展:信息系統的發展歷程 - 知乎
參考文檔
總結
以上是生活随笔為你收集整理的白夜:一文看懂AI项目流程及边缘设备开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兵器是天下暗器之首?
- 下一篇: 民航助行灯的变压器箱子可以封死么?