大家好,非常感謝大家來到這裡,參加我們的這個talk首先我們想做一下自我教授我叫陳檢君,來自VMF的Alcord所謂的CTO辦公室我又屬於下面的一個鼓舞我們鼓舞主要關注在這樣短期的一到三年的一個口音 innovation跟我們的indeproduct team或者我們的partner,或者我們的custom去一起伺服一些新的項目,或者新的solution這幾年我主要工作在GT學習、邊緣計算還有一些相對low-level的訓練化技術的探索、研究那今天還有我的另外一位同事那丁平也請做一下介紹吧好的,謝謝田君我叫袁定平然後我現在是在VMF的MAP比喻工作然後我現在主要是工作在VMF的那個TKGI,一個GTKG的產品上面然後主要的方向的話是network in這個方向然後我大概就謝謝他,謝謝好,那回到這裡呢我們今天給大家帶來的是Round wide medication on Kubernetes Edge Class那是關於我們運行這個WebAssembly的Application在Edge的Kubernetes Class的一些心得和一些想法吧那真的是這樣安排的首先還是想幫助大家去回顧一下這個WebAssembly畢竟WebAssembly還是在比較早期的階段對很多人來說可能還是比較新那之後呢會談一下為什麼Edge computing需要WebAssembly那接下來呢,再回去談一下我們的這個死路省最後說一下我們接下來回去做些什麼東西好,那談到這個WebAssembly那WebAssembly也沒有Web它確實跟Web也有關係那剛開始呢也是了為了Web的下一代開發那他希望能讓各種語言編寫代碼no能在這個Web裡面去運行那這裡這張圖帶也可以看到其實這些主流的瀏覽器都已經支持了這個WebAssembly但實際上WebAssembly得到大家的關注的一個很重要的原因是它已經不侷限於Web它已經很擴張了很多其他的一些語音美譽怎麼去講呢那首先我們看一下它的定義吧那WebAssembly is binary instruction formatfor a stack-based virtual machine那是一個針對於佔虛擬機運行的一個阿金紙指令規範那阿金紙指令規範呢它確實定義的大概這樣五類一百多條指令那為什麼是在佔虛擬機運呢因為不同於這個Physical CPU那我們一般的CPU會把這個運行的操作數放在它的集中器裡面去也許是專用也許是通用然後進行一個運算但是呢WebAssembly卻不能這樣做那它只能把這個操作數放在運行室的站上所以是這樣一個站的運行環境那無論是其餘這個Web還是現在擴展其他一些應用那WebAssembly都可以帶來一些高可疑之性還有相對性能的提升還有安全性的一些增強也非常好的一些特性那接下來我想有這麼一個推特那這個呢是來自這個Solomon Hex大家知道它是Docker的一個推特他在2019年呢他這樣推特的說如果在2008年如果我們有這個WebAssembly還有WessyWessy稍微推說那我就不需要去做Docker那這裡我並不是說WebAssembly可以去取代Docker只是希望大家認識到這麼幾點一個是這樣的一個推特會讓你看到WebAssembly它的一個前提它的一個地位它的一個重要性那第二點更重要的事情那你已經看到了WebAssembly跟Docker這樣一個很像的一個比較那你會理解到WebAssembly在軟件站在一個位置這有助於你更加準確的理解WebAssembly接下來談一下WebAssembly其他一些東西剛才也說到這個WessyWessy是這個WebAssembly System Interface它呢是這個WebAssembly突破Web音譯的一個很關鍵的東西那如果WebAssembly不運用性在這個瀏覽器裡面去它必然要跟速度進行交互那就需要一定讓一個接口那Wessy就是做這樣的事情那通過Wessy以後你可以跟蘇主席的比如說這個文件系統網絡還有其他一些資源進行的交互這是一個很重要的一部分那WebAssembly不讓他們關於這個WebAssembly運行的一些情況首先WebAssembly我們提到它是二斤指定規範所以它有這個二斤指格式實際上它有這個文木格式還有內存格式那二斤指格式和文木格式的關係就類似於這支二斤指格式就相當於這個目標文件可知性文件文本格式就相當於這個匯編語言它能這樣或者編有或者當主有這樣的有關的關係那WebAssembly的運行基本上分為這麼一個三個階段一個是解碼另外一個是驗證最後是執行首先阿俊於某塊會解碼到內存格式然後在驗證階段我們會對代碼進行一個分析因為阿俊的某塊包含了大量的內心信息所以我們是可以通過一些靜態分析去發現一些代碼的問題之後是對代碼的執行再細分析還會分為實力化和含書教育剛才我們談到的運行的一些狀況我們通常會依賴於這樣的一個WebAssembly的round time去做那OpenSource的社區實際上已經很多這樣的一些實現像Ride of Time我們這裡也不做一一的具體分析或者對比它們每個都有自己的一些特點或者追求的一些設計目標WebAssembly的Workload雖然也是需要去管理和編排的前段我們提到了WebAssembly跟Docker的這樣一個橫向對比的關係這樣的一個等同的一個位置然後很多人會想到那我們會不會用Kubernetes編排這個Docker一樣去編排WebAssembly的Workload呢確實有這樣的一個項目叫CrossNet實際上它是用Rust寫的一個Kubernetes然後之後晶片會做更詳細的介紹那談完WebAssembly我們再看一下這個Edge Computing吧Edge Computing也是這幾天不用活的一個逃皮大家可能經過了什麼無聯絡肺炎計算還有5G等等都關聯了一塊那相對於Cloud ComputingEdge Computing簡單來說它的意思是說在數據產生的地方或者是接近數據產生的地方去做數據的分析或者處理這樣好處就是可以real-time的一些response或者還有考慮到數據的私有性專屬性還有網絡待快的邀請等等的特點需要Edge Computing那談到Edge Computing不得不提的是AEAAEA在Edge Computing裡面扮演很重要的一個角色特別是可以說是這個Edge Computing的一個work load那對此Gate也有所實現從2018年開始它的Reply提到它的一個程序梯Edge的程序梯是從5到10年一直到後來2到5年一直到現在這個我的黃色區域是一個NOW的一個階段那Edge Computing裡面我為什麼要去考慮WebAssembly為什麼我們需要WebAssembly在Edge Computing首先想想這個Edge Computing的一些特點或者它的一些問題那邊緣端這些設備首先它的資源積存資源就比較少然後它又需要很好的性能又需要考慮安全性因為需要支持很多這種所謂的Safety critical use of case同時還要考慮到這種一支系統因為它就有支持不同的運件平台不同的CPU attached那在這些問題我們會為它看WebAssembly有的東西首先我們已經提到的WebAssembly可以給我們這種small的這種Print會帶到很好的一種那NATIVE application的這種performance特別是剛才我們提到AN實際上它不但對吹牛影響的部分做一個優化它實際上可以幫助你做GTG學習的任何階段比如說數據的預先處理然後結果的一些處理還有導入真的都可以通過WebAssembly做一些優化加速安全隔離WebAssembly可以確認是可以訪問的設備看完我們的資源Portability那麼通過WebAssembly這樣一個相對同一致的binary就意味著我們可以把它播出在不同的運件平台上去即使回到GTG學習可能以前你的平台不能被一些主流的GTG學習框架學支持比如說正式後路patterge那現在通過WebAssembly我們可以把AI帶到你的運件平台上去那回到這裡大家可能非常地明白我確實把WebAssembly非常的適合那我們設計我們的一個force那我們的目標是在想帶Azure再設計一個這種Kubernetes class然後為什麼推這樣做呢那大家知道在Kalabonet裡面去因為容器和微服我那Kubernetes實際上已經是這種資源調度編排的一個行業標準雖然Azurnet跟Kalabonet不太一樣比如說這種小計算節點或者是這種異購計算平台或者面向接入的網絡或者弱化的網絡環境但是它依然需要管理而且它的問題很嚴重所以呢我們想如果能把Kubernetes帶到Azure端解決這個統一管理的問題同時有可能還會把原原生的一些變態性也帶到Azure端這是一個非常好的事但是畢竟Azure內體跟Kalabonet內體還是有很大的區別確實也面臨了那些問題前面可能也提到了像這種資源收限一度的架構或者real time所幸的是社區已經有很多這樣的工作在Azure端Kubernetes的項目上我們的鎖路是是這樣希望是在Azure端去構建一個虎裹的Kubernetes這裏面有關鍵的三點第一個呢我們是讓Webassembly跟content的原料去併從並不是像前面說到的我讓Webassembly去要替換刀口這樣原因有兩個首先大家有知道Webassembly它畢竟是一個提供了一個阿金紙它並不是提供一個這種system另外一個很重要的原因是很多大部分的基本上還是基於融洩這樣的架構或者都是依賴有這樣的一個環境我們需要這樣的軟件工作在一起就需要這樣一個併從的方式架點是Lavage or Secure三寶鍵的實現雖然Webassembly的本身它可能會比較secure或者比較Lavage但是它依賴的上下方環境我們依然需要去把它做一個質量級或者是安全的一些考慮第三個是我們現在可以用Crossed Net去部署一些Webassembly Cloud我們但是需要跟這個Age的Crossed Net的實現做一個基層這樣才能夠丟得我出來我們這樣的一個很好的solution接下來我去談一下我們的這個solution所需要的一些component首先LinqtLinqt是來自Bulk這是幫助你打造機一個容器的一個系統通過一個壓冒文件你可以競爭你需要的這個hello的一個內心和版本甚至還有你boot的service或者system service那這樣的話可以幫你打造一個質量級小型化安全的一個系統最關鍵的是所有的東西都是在component所以我們把它Webassembly部署在這樣的環境非常地便利也非常地安全那TWM是針對AR來做的TWM本身實質上它是一個短裂端的一個作為優化的Graph Compiler那它的這個位置就相當於是在上層的這些主流級缺血框架比如說像Zenith Flow Pactos最下面就是Lolive的Labry或者Divide Scrawl中間這個computation graph裡面的部分這樣的一個位置它的主要目的是對一些processing做一些優化比如說Forward或者Backward還有Pass Over這個computation graph基本上可以說不斷的Lavro進行一些優化那對於TWM來說它主要的這個邊緣過程會有這麼三步一個是Pult還Lower還CochinImpult呢是剛才說的把這些普遍順的一些model來自不同的積極的框架進行一個轉換轉換成一個相對high-level的intermediateintermediate rotation叫做Relay然後我們會把Relay再轉成這個相對Lolive的一些intermediate rotation那最後Cochin會幫我們做一些memory education然後把它Map實現到幾層的硬件平台上那通過TWM我們又可以把不同的積極學問的宣傳程冒險進行加速優化適配到幾層的硬件平台上從而對積極學習進行一個加速那它對這個Web7也是支持接下來的其他部分我將教育精品去來介紹好 精品你去介紹好 謝謝提琴接下來由我為大家分享K3S以及Keras Lite如何在我們的方案中使用首先K3S是一個certified K8S發行板意思就是它已經pass了K8S官方的conformance test基本上所有的商用的K8S發行板都需要去pass這個conformance test然後再跟K8S的這個feature parity對比上它的這個official的說明是almost all the feature也就是它基本上都支持即使它是專為物鏈網以及邊緣端優化而存在的下面的這張圖是給我們展示了它的內部架構基本上K8S所謂的組件它都有但這裡有一個很大的區別就是K8S的每個組件是一個單獨的Banarray但K3S所謂的組件都編譯在一個Banarray裡面這也導致它的部署方式跟K8S有很大的區別就是簡單很多在部署的時候只需要一條命令就可以把整個control plan給部署好然後這個時候它會在etc目錄下來生成兩個文件一個是我的命的這個cube config它部署在它是在會我們後面部署KerasLate節點的時候會用的還有一個是K3S的Agen的節點可以用來join到這個集群裡面需要用到這個token然後在部署Agen的時候用的是跟control plan同樣的Banarray而且是同樣的命令只不過傳入的那個參數不一樣當你部署完以後你就可以像使用K8S一樣使用Cubo Cata來訪問這個KerasLate並且部署和管理work load前面說了K3S是專為Agen computing優化的它第一個就是部署檢的第二個我們可以看到它佔用了資源非常少這裡我用它跟Vanina的K8SKerasLate的Banarray sets對比你看整個K3S的Banarray它只有47兆但是K8S僅僅APS over就有120兆然後control manager以及CubeLate都非常大總共加起來有469兆基本上是K3S的10倍這裡我也把這個KerasLate的Banarray列出來了它只有46兆有了K3S我們就可以輕鬆的把work load部署到A階段但它針對的都是我們常受的這種基於container的這種work load的我們怎麼把A階段部署在A階段部署這個webassembling的work load呢接下來我們就需要接住於KerasLate這個項目首先KerasLate是一個專為K8S在KerasLate裡面原生的運行webassembling程序設計和實現的目前它已經是一個CNC F的sandbox項目我們知道其實如果你非要在普通的KerasLate裡面去運行這個webassembling程序或者work load的話你其實可以把這個Westman Rush runtime封裝到一個base image裡面container image裡面然後讓程序跑的這個帶有Westman runtime的container裡基本上也能達到我們目的但是KerasLate它的存在不僅僅是為了跑一下這個webassembling的程序它的實現其實是一個Rust library的形式存在的一方面它可以用來證明Rust的語言也能在這個K8S的生態裡面實現一些非常基礎的功能另外一方面它會運行各種其他形式的work load提供了一個非常可擴展的框架我們後面可以提到因為它非常可擴展其實它能運行在非常多的平台上面只需要很簡單的適配就可以它就能在EU的這些K8S Engine就是這些雲幅物上提供的K8S Engine裡面自動的provision出能夠運行webassembling的work load下面都是它目前可以支持的一些platform大家可以看到有EKS,GKE等等這裡面的鏈接裡面有非常詳細的一些guidance教你如何去部署新的節點然後其實KerasLate它的口擴展性主要來源於兩個方面一個是它設計的一個provider機制另外它還有一套plug-in的機制今天我們介紹的是webassembling所以主要看一下它的providers首先它有一個默認的provider就是第一個VAS它這個provider其實是在VASM time這個round time上做了一層封裝然後第二個是VASM cloud這個產品它也為KerasLate開發了單獨的round time實現了一套GKEVASM cloud它自己其實實現了一套基於我前面介紹的基於container封裝調度的VASM程序的platform但是它是為了優化為了性能所以它也基於KerasLate實現了一套原生的provider這樣在VASM cloud裡面它裡面有一種概念叫actor這種actor就類似於container它就能被KerasLate直接的調度和部署實際上KerasLate不只是能部署WebAssembly程序它也能部署符合CRI的container所以它是可以直接在一個class同時運行WebAssembly和container workload的右邊的這個圖這張截圖裡面是我的環境裡面直接運行KerasLate的節點以及在節點上跑到workload的從第一個可以看到KerasLate的運行只需要接受一個bootstrap的config file默認端口是3000然後這個banner就在就會在某個VM上面運行起來然後這個時候你需要approve一下certific然後它就會它就能join這個KerasLate裡面然後這個時候你用codecard的命令就能看到這個node的詳細信息最後我們可以在它裡面部署一個簡單的WebAssembly程序這裡我部署了一個simple server這個port的manifest裡面需要注意的是你需要在這個manifest裡面設置一下tolerations因為KerasLate的node默認是有tent的當這個port運行起來之後你就可以像使用正常的codecard命令去獲取這個workload的標準輸出以及它的運行狀態基本上它的運行跟普通的container運行是一樣的那提到webAssembly runtime以及agicomputing你就不得提一下webAssembly agi實際上webAssembly agi現在也在實現基於它自身的KerasLate provider等這個fature GA之後那麼KerasLate也就可以直接部署記憶webAssembly agi運行的所有的一些程序或者是工作負責既然providers這麼重要下面讓我們看一下KerasLate是如何提供這個providers框架的首先KerasLate的主要職責是運行workload或者把workload調度到其他的excutor上去運行然後監控這個workload的生命周期把細節暴露給KerasLate以便用戶可以使用通用的codecard命令來獲取這些workload的運行狀態這裡我列出了一個實現一個providers你需要實現哪些接口第一個是獲取providers的狀態然後是允許providers去收集並上傳當前load的一些信息然後有初始壞pod的狀態然後還有一個下檔接口這個接口它是指的KerasLate這個load的下檔它是跟pod無關的然後是跟pod相關的兩個接口主要就是execa和logslogs獲取pod運行的logexeca可以在pod類執行一些command最後三個它不是function它定義的是三個treattreat是Ross的語言的一個獨有的概念就是可以把它當作一種類型吧實際上整個providers它這個接口自己也是一個treat然後另外這三個單獨列出來的treat它是需要單獨支持的它是跟pod的volume以及device plug-in相關從這裡我們可以看出來實現一個providers其實並不複雜而且它提供的接口目前還不多比如像codecard的pod for world或者attach或者cp這種命令它是沒有的但實際上因為它還沒有release 1.0版本目前最新的版本是1.0的RF2版本所以它其實它並不會提供全部的接口不過這個對於運行webos summoner程序已經夠了既然CROSS列的可以運行webos summoner程序那它能不能運行在A級段呢肯定是可以的因為Ross的語言本身對CROSS platform的這種交叉編譯的支持就非常好我們下面看一下如何讓CROSS列的運行在A級段借助於CROSS列的CROSS這個項目可以很容易的把一個X86上EU的項目編譯運行到其他CPU上如果我們需要讓CROSS列的運行到比如數碑派上面假設這個數碑派上安裝了是一個wubuntu的系統那只需要在它的那個tome文件裡面加上下面這個編譯選項它就能generate出直接在數碑派上運行的banner way如果你想使用其他系統不是wubuntu比如R-Py系統來更進一步的降低資源消耗你可以通過定制CROSS工具的這個base container image在裡面安裝OpenSSL並且接住於Z格工具來編譯出適合於R-Py系統的banner way之所以使用R-Py系統會稍微複雜一點是因為R-Py系統它本身沒有提供GCC那現在我們有了k3s可以在A級段部署集群然後用CROSS列的來跑微博送給程序那把前面的這些技術綜合一下就得到我們最後的一個技術方案大家可以看到在最底層我們可以同時支持X86以及ARM價格的物理設備上面是一層HyperBuzzer然後k3s Master的節點它是可以直接部署在普通的服務器上也可以部署在GUNINUS CATE的服務器上相關的A級的節點我們可以把它分別部署的其他的設備上其中某些node仍然是運行著k3s自己的這種A級的服務它用來跑一些普通的workloader但另外的節點可以用來運行CROSS列的節點這裡又根據它的CROSS列提供的Provider不同我們可以把它分成G usm time的這種workloader以及G usm edge的workloaderG usm edge的workloader的話可以用來跑AI的一些工作負債比如跑一些前面提到的TVM相關的一些程序那他們的底層都可以使用GUNINUS CATE這些node VM的系統然後來進一步降低資源消耗整個方案就如圖所示了然後雖然我在slides裡面寫但需要提到的一點是CROSS列目前並沒有支持k8s的network model所以如果在這個CROSS裡面跑一些是有很複雜的調用關係的這些微服務那麼這裡面的一些服務發現以及DNS等其他的這些fature的話是需要用戶自己在應用程序裡面處理的但如果是AI的workloader我覺得這個應該不用考慮以上就是我這邊的全部分享接下來有鐵軍分享我們的後續計劃以及對未來的一些展望謝謝好,謝謝DNS我前面總編一下其實我們的方案大家會在這裡會看到它會比較靈活然後可以根據你的應檢平台或者你的requirement去不同的進行一個進之化最後想談一下我們接下來做什麼就是在我們這個實踐的部署或者是探討任務發現還有一些事需要我們接下來去關注一下首先我們想支持更多的一些Wide runtime或者是所謂的Provider剛才DNS說的有些實現但是我們需要更多的Wide runtime的實現幫助我們支持更多Wide assembly的一些軟件或者是功能另外一個考慮到生態的這樣一個環境我們還是需要跟一些Open source的Azure-Project的基層比如這裡我説的有Azure-X FoundryAzure-X Foundry是一種靠我們的Azure-Computing platform也是來自Linux FoundationEVE也是一樣EVE一樣特別強調一下它是Azure-Project Edition安靜的這樣一個縮寫它說對於Azure Application進行一個開發部署編排特別是它提到它會支持這種container cluster VM還正式用力客腦它的這個概念非常符合我們的這樣的一個預期我們的作為它作為我們的一個房地上是接下來需要去看到一個點最後是我們雖然現在用Linux Kit進行我們這個Web Simulator一個Faster Secure這樣的一個方向我們想可能還可以再進一步比如說用這種定制化的Umicrnau請量Umicrnau去裝載Web Simulator也有這樣的一些項目在做我們會去看有這種繼承的可能性差不多今天這就是我們的Talk謝謝大家如果大家有什麼具體問題可以通過這些郵件的地址來找到我們進行進一步的探討謝謝大家