前言
很高興有這個(gè)機(jī)會(huì)和大家分享我們總結(jié)的關(guān)于邊緣計(jì)算的架構(gòu)模式,也就是我們所說(shuō)的基于能力的系統(tǒng)架構(gòu) —— COA。
什么是 COA 呢?我想通過(guò)一個(gè)很普遍的問(wèn)題——電源問(wèn)題來(lái)解釋。電源問(wèn)題一直是移動(dòng)電腦,特別是手機(jī)用戶體驗(yàn)的一個(gè)關(guān)鍵問(wèn)題。我想每個(gè)人都有過(guò)因?yàn)槭謾C(jī)電量低而帶來(lái)不便的經(jīng)歷,有的人甚至告訴我,光看到這張圖片,就會(huì)引起某種不適。
那么我們是怎么解決這個(gè)問(wèn)題的呢?獲得持續(xù)的電力供應(yīng),是手機(jī)運(yùn)轉(zhuǎn)的一個(gè)基本要求。
我想每個(gè)人對(duì)上面這些圖片都不會(huì)陌生,機(jī)場(chǎng)的充電站、五花八門的充電寶以及各種各樣的共享電源。解決手機(jī)的供電是一個(gè)問(wèn)題,那為什么我們有這么多不同的方案呢?這是因?yàn)槭謾C(jī)獲得持續(xù)電源供應(yīng)的能力,是一個(gè)關(guān)鍵能力,我們必須用各種手段來(lái)保證,在各種場(chǎng)景下對(duì)手機(jī)的持續(xù)供電。
手機(jī)需要持續(xù)的電力供應(yīng)
如果把這個(gè)問(wèn)題抽象來(lái)看,我們可以看到手機(jī)獲得持續(xù)電力供應(yīng)的能力,是有很多不同的方案來(lái)支持的。
比如手機(jī)集成的電池,這是基本方案,如果沒(méi)有,手機(jī)也就不是手機(jī)了,就變成座機(jī)了;充電寶是一個(gè)本地方案,因?yàn)槟闶謾C(jī)需要連接在本地的充電寶實(shí)例上;而電源插座是基于服務(wù)架構(gòu)的解決方案,你把手機(jī)插在插座上,這個(gè)插座就是你訪問(wèn)電力公司電力供應(yīng)服務(wù)的接口;而在更極端的情況下,你可能還會(huì)用其他的替代電源,比如太陽(yáng)能板,甚至手搖發(fā)電機(jī)。
這個(gè)例子說(shuō)明什么呢?它說(shuō)明對(duì)于系統(tǒng)所需的關(guān)鍵能力,比如獲得持續(xù)電力的能力,我們經(jīng)常需要多個(gè)替代方案來(lái)確保能力的存在。比如您的手機(jī)沒(méi)電了,你會(huì)在乎你的電源插頭插在哪里嗎?你會(huì)在乎充電寶的形狀和顏色嗎?這些都不是關(guān)鍵。你需要的就是供電的能力,至于這個(gè)能力是不是基于服務(wù)的架構(gòu),以及這個(gè)能力是如何提供的,這都不那么關(guān)鍵。
這個(gè)例子讓我們思考,在設(shè)計(jì)程序的時(shí)候,能不能提供一種設(shè)計(jì)語(yǔ)言,讓開發(fā)者表述系統(tǒng)所需的能力,比如供電,而不是考慮系統(tǒng)能力的交付方式。無(wú)論這個(gè)能力是通過(guò)遠(yuǎn)程的服務(wù)調(diào)用本地的容器,或者是局域網(wǎng)的服務(wù)代理實(shí)現(xiàn)的功能,這些都不重要,這些都是運(yùn)維的問(wèn)題,而不是系統(tǒng)設(shè)計(jì)和開發(fā)的問(wèn)題。我們希望可以總結(jié)出一套設(shè)計(jì)模式,并在此基礎(chǔ)上建立一個(gè)工具和服務(wù)的生態(tài)系統(tǒng),這就是我們提出 COA 這個(gè)概念的初衷。需要說(shuō)明一下,COA 這個(gè)概念雖然是我們提出的,但是這種架構(gòu)并不是我們發(fā)明的,COA 是我們基于對(duì)現(xiàn)有系統(tǒng)的觀察總結(jié),在此基礎(chǔ)上,我們定義了 COA 的一些基本部件,以及這些部件可能實(shí)施的方式。
我們?cè)儆昧硗庖粋€(gè)例子對(duì) COA 的意義進(jìn)行說(shuō)明,這次我們考慮一個(gè)需要人工智能支持的程序。人工智能比如臉部識(shí)別,交互的方法也很多,您可以用固化或者半固化的硬件,比如 ASIC 或者 FPGA;您也可以通過(guò)調(diào)用已有程序庫(kù)或 SDK,比如在進(jìn)程中調(diào)用 url 來(lái)進(jìn)行物品識(shí)別;當(dāng)然您還可以用進(jìn)程外的方式,比如調(diào)用一個(gè)本地的 Docker 容器;最后您也可以調(diào)用云平臺(tái)上的服務(wù),比如微軟的機(jī)器視覺(jué)服務(wù)等等。
在這個(gè)場(chǎng)景中,獲得 AI 的能力,比如臉部識(shí)別的能力是你所關(guān)心的,而這個(gè)能力是怎么交付給你的?這也應(yīng)該是運(yùn)維的問(wèn)題。而且 AI 的模型層出不窮,對(duì)系統(tǒng)的需求也不一樣,把能力交付轉(zhuǎn)化成運(yùn)維問(wèn)題,允許您的程序可以被動(dòng)地甚至主動(dòng)地調(diào)解本身的行為,來(lái)適應(yīng)不同的部署場(chǎng)景。比如我們?cè)?jīng)有一個(gè)智能交通燈的系統(tǒng),在缺省情況下,它把高清晰的視頻傳到云上進(jìn)行識(shí)別,當(dāng)發(fā)現(xiàn)人行道上有輪椅,它就會(huì)延長(zhǎng)綠燈的時(shí)間,以保證殘障人士有充足的時(shí)間過(guò)馬路。但是如果網(wǎng)絡(luò)帶寬不允許,它就會(huì)轉(zhuǎn)換成低分辨率的圖像,而且如果網(wǎng)絡(luò)斷開了,它就會(huì)轉(zhuǎn)到一個(gè)本地的模型,本地模型精度差一些,但是還是可以提供持續(xù)識(shí)別功能的。那么對(duì)于這個(gè)系統(tǒng)來(lái)講,輪椅的識(shí)別是一個(gè)必要的能力,這個(gè)能力具體是怎么交付的,甚至在運(yùn)行的過(guò)程中是怎么選擇的,這個(gè)就應(yīng)該是一個(gè)運(yùn)維問(wèn)題。
基于能力的系統(tǒng)架構(gòu)
COA 的理念,就是把運(yùn)維問(wèn)題從開發(fā)者角度分離,所以 COA 的核心,就是讓開發(fā)者專注于能力,而不是能力的交付。如果我們有一個(gè)對(duì)能力的通用的描述、發(fā)現(xiàn)和使用的系統(tǒng),那么我們很多的系統(tǒng)就可以做到平臺(tái)無(wú)關(guān)、位置無(wú)關(guān)、甚至技術(shù)無(wú)關(guān)。以手機(jī)充電問(wèn)題為例:
平臺(tái)無(wú)關(guān):你連到國(guó)內(nèi)的插座和國(guó)外的插座這是無(wú)關(guān)的,至于對(duì)不同國(guó)家插座的電源、電壓以及插座樣式的適配,這是運(yùn)維問(wèn)題;
位置無(wú)關(guān):你用哪個(gè)插座哪個(gè)充電寶,你的手機(jī)在哪,與你程序的設(shè)計(jì)及開發(fā)也是無(wú)關(guān)的;
技術(shù)無(wú)關(guān):你的電源是電池,還是火電、水電、核電、太陽(yáng)能……,這些都無(wú)關(guān)。
COA 就是把這些能力的實(shí)施和交互的方式,徹底地從開發(fā)者這里分離出來(lái)。
我們從另外一個(gè)角度看——運(yùn)營(yíng)方面,運(yùn)營(yíng)也會(huì)有更靈活和更精確的控制。比如你隨便選擇了一家數(shù)據(jù)庫(kù)公司,然后用這個(gè)公司的 SDK 來(lái)進(jìn)行開發(fā),結(jié)果公司倒閉了,這就是個(gè)問(wèn)題。而 COA 允許你在選擇能力供應(yīng)商時(shí),同時(shí)考慮功能性和非功能性的需求。而作為運(yùn)維,您可以獨(dú)立評(píng)估選擇供應(yīng)商,然后根據(jù)不同的部署場(chǎng)景,選擇不同的能力供應(yīng)商。它可能是本地的,也可能是遠(yuǎn)程的,甚至是人工的,這都不影響程序的架構(gòu)和代碼,同時(shí)您也可以靈活選擇部署方案。另外您可以用創(chuàng)新性的替代方案來(lái)取代原來(lái)的方案,回到人工智能問(wèn)題,大概在一年前,谷歌的 BERT 還很厲害,但現(xiàn)在微軟的 GPT-3展現(xiàn)出了無(wú)與倫比的能力,有了 COA 您就可以在運(yùn)營(yíng)過(guò)程中對(duì)這個(gè)模型進(jìn)行選擇,甚至綜合多方的結(jié)果提供一個(gè)更佳的方案,這些都是一個(gè)運(yùn)維的問(wèn)題,而不是開發(fā)的問(wèn)題。
能力代理
實(shí)現(xiàn)基于能力的系統(tǒng)架構(gòu),需要幾個(gè)重要的系統(tǒng)部件,第一個(gè)就是能力代理。能力代理是指通過(guò)代理的方式,把能力供應(yīng)者的細(xì)節(jié)封裝起來(lái)。能力代理具有如下功能:
第一,根據(jù)環(huán)境的變化選取能力的提供者。比如上文提到的輪椅檢測(cè)方案,根據(jù)網(wǎng)絡(luò)帶寬的情況和網(wǎng)絡(luò)連接的情況,能力代理可以動(dòng)態(tài)地選擇不同的能力提供者,然后能力提供者在此基礎(chǔ)上可以提供更多的優(yōu)化功能。
第二,提供本地緩存,不需要所有的服務(wù)都是遠(yuǎn)程調(diào)用;它可以批處理,把分散的處理做成小的批次,然后統(tǒng)一提交給服務(wù)器;甚至它還可以做一些其他的,例如壓縮、加密等中間件的功能。
第三,在本地環(huán)境里,比如在一個(gè)局域網(wǎng)內(nèi),如果能力代理之間可以相互發(fā)現(xiàn),我們就可以實(shí)現(xiàn)更高級(jí)的功能——伙伴間的動(dòng)態(tài)調(diào)用。例如,在智能家居環(huán)境中,用普通的手機(jī)進(jìn)行比較復(fù)雜的圖形計(jì)算時(shí),我可以把這個(gè)能力臨時(shí)代理給我的游戲機(jī),通過(guò)游戲機(jī)的 GPU 功能來(lái)進(jìn)行圖像處理,就可以實(shí)現(xiàn)伙伴間的動(dòng)態(tài)調(diào)用過(guò)程。
第四,基于功能性和非功能性需求動(dòng)態(tài)發(fā)現(xiàn)提供者。能力代理的發(fā)現(xiàn)功能和我們普通所說(shuō)的服務(wù)發(fā)現(xiàn)的過(guò)程不太一樣。因?yàn)樵诎l(fā)現(xiàn)能力的過(guò)程中,我們可以同時(shí)考慮功能性和非功能性的需求。比如在發(fā)現(xiàn)一個(gè)能力供應(yīng)商的時(shí)候,我們不但要考慮系統(tǒng)的性能、表現(xiàn),甚至供應(yīng)商本身的資質(zhì)也是我們考慮的要素。
能力發(fā)現(xiàn)
說(shuō)到能力發(fā)現(xiàn),還要解釋它和服務(wù)發(fā)現(xiàn)有什么不同。傳統(tǒng)范疇的服務(wù)發(fā)現(xiàn),是基于語(yǔ)法的發(fā)現(xiàn),比如說(shuō)我要做一個(gè)相加的服務(wù),我可能通過(guò)服務(wù)發(fā)現(xiàn)的模式,找到一個(gè)相加的服務(wù),它有相加的名字,但是我無(wú)法知道相加服務(wù)是不是真的在進(jìn)行加法的計(jì)算。
而能力發(fā)現(xiàn)模式是由用戶來(lái)提交他所要實(shí)現(xiàn)能力的意圖,然后系統(tǒng)根據(jù)意圖進(jìn)行語(yǔ)義上的發(fā)現(xiàn),通過(guò)發(fā)現(xiàn)的過(guò)程可以真正發(fā)現(xiàn)一個(gè)可以進(jìn)行相加計(jì)算的服務(wù)。然后我們可以把非功能性的因素也考慮進(jìn)來(lái),比如它的 SLA、安全性、供應(yīng)商資質(zhì)等,所以能力發(fā)現(xiàn)實(shí)際上是一個(gè)比較復(fù)雜的系統(tǒng)。
我認(rèn)為,能力發(fā)現(xiàn)應(yīng)該是一個(gè)基于多向量(包括功能性和非功能性向量)的幾率發(fā)現(xiàn)系統(tǒng)。但是在生產(chǎn)部署環(huán)境中,基于幾率的發(fā)現(xiàn)系統(tǒng),很可能是不能滿足需要的。因此,我們就設(shè)計(jì)了,在發(fā)現(xiàn)之后可以通過(guò)一個(gè)固化過(guò)程,把所發(fā)現(xiàn)的供應(yīng)商,提供成一個(gè)特定的能力組合,在能力組合的基礎(chǔ)上,您可以提供比較明確的版本的控制和供應(yīng)商的控制。能力發(fā)現(xiàn)也需要我們提供表達(dá)用戶意圖的方式,通過(guò)一個(gè)通用的詞庫(kù),基于自然語(yǔ)言的方式來(lái)實(shí)現(xiàn)對(duì)于用戶意圖的解析。
示例:lets 系統(tǒng)
在 COA 的基礎(chǔ)上,我們?cè)O(shè)想了一個(gè)系統(tǒng)——lets,上圖展示了用 lets 進(jìn)行編程的一些示例。
臉部識(shí)別:我們可以通過(guò) lets 命令行:lets detect face→輸入圖片→輸出圖片,系統(tǒng)就可以對(duì)輸入圖片進(jìn)行臉部識(shí)別,然后再輸出圖片上疊加臉部的方框;
物品追蹤:在 python 里進(jìn)行物品追蹤,需要導(dǎo)入 lets 程序包,然后 lets track orange,在 cameraStream1 的視頻流上進(jìn)行橙子的追蹤;
文字總結(jié):比如用 C# 編程的時(shí)候,用 lets class 來(lái)調(diào)用 summarize(方法:lets summarize 輸入文本→產(chǎn)生輸出文本),對(duì)一段文字進(jìn)行總結(jié)。
這就是我們?cè)O(shè)想的 lets 系統(tǒng)在使用時(shí)在開發(fā)者上的體驗(yàn)。大家可以看到,我們把 AI 的能力完全封裝在 proxy 的后面,對(duì)于開發(fā)者來(lái)說(shuō), AI 的能力到底是遠(yuǎn)程的服務(wù),還是本地的容器,還是本地的 SDK,這些都不重要。你所需要的就是描述你程序所要實(shí)現(xiàn)的功能,然后通過(guò) COA 的 proxy 把這些功能呈現(xiàn)給你的程序。作為運(yùn)維來(lái)說(shuō),它可以根據(jù)具體的部署場(chǎng)景來(lái)選擇功能具體的交付方式。
完整 COA 系統(tǒng)架構(gòu)
完整的 COA 系統(tǒng),可能還需要很多其他組件,由于篇幅原因,本文只提到了 COA 系統(tǒng)架構(gòu)的部分組件。COA 并不是我們的發(fā)明,而是我們對(duì)一些現(xiàn)有程序,特別是一些基于邊緣計(jì)算的系統(tǒng)模式的總結(jié),我們希望可以和大家一起創(chuàng)建一個(gè)比較通用的 COA 架構(gòu)系統(tǒng),來(lái)實(shí)現(xiàn)我們所設(shè)想的通用模塊,可以使 COA 的應(yīng)用程序更容易地開發(fā)和使用。
-
FPGA
+關(guān)注
關(guān)注
1630文章
21768瀏覽量
604623 -
asic
+關(guān)注
關(guān)注
34文章
1205瀏覽量
120600 -
人工智能
+關(guān)注
關(guān)注
1792文章
47492瀏覽量
239176
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論