本文分享自華為雲社群《KubeEdge-Ianvs v0.2 釋出:終身學習支援非結構化場景》,作者: 雲容器大未來。
在邊緣計算的浪潮中,AI是邊緣雲乃至分散式雲中最重要的應用。隨著邊緣裝置的廣泛使用和效能提升,將人工智慧相關的部分任務部署到邊緣裝置已經成為必然趨勢。KubeEdge-Ianvs 子專案,作為業界首個分散式協同AI基準測試平臺,基於 KubeEdge-Sedna 為演演算法及服務開發者提供全場景可延伸的分散式協同AI基準測試,以研發、衡量和優化分散式協同AI系統。
然而在邊緣裝置中部署靜態的AI模型往往不足以應對複雜多變的真實世界環境,因此終身學習能力對於邊緣AI模型來說變得越來越重要。為了方便邊緣AI演演算法研究者開發及測試終身學習演演算法在真實世界環境中的效果,KubeEdge-Ianvs 在新版本的更新中釋出了支援終身學習正規化的相關演演算法的研發與測試功能。
本篇文章為大家闡釋相關背景和Ianvs終身學習架構,並以 Ianvs 雲機器人終身學習測試為例對 Ianvs 終身學習的特性進行介紹。歡迎關注 Ianvs 專案,持續獲得第一手獨家公開資料集與完善基準測試配套。
開源專案GitHub地址:https://github.com/kubeedge/ianvs
邊緣裝置所處的環境通常是不穩定的,環境變化會導致資料分佈的大幅變化,即資料漂移。資料漂移會顯著降低模型準確性。為了解決資料漂移問題,邊緣裝置需要具備動態更新模型的能力,以適應環境變化。下圖展示了一個典型的終身學習演演算法流程框架。在該框架中,終身學習任務被定義為:已處理 N 個任務,將陸續處理 M 個任務。如何維護知識庫並利用其中的模型處理這些任務是關鍵。
終身學習的流程分為四步,首先根據之前已處理的 N 個任務初始化雲端的知識庫中的已知任務處理模型;然後在遇到新的任務時,從雲端知識庫中選取合適的模型部署到邊緣端處理任務,如果新任務是已知的任務則更新原來的模型,如果遇到了未知任務則重新訓練新的模型用於處理該任務;在邊緣端處理好該任務後,對雲端知識庫進行更新;最後遇到新任務時重複前兩步操作。通過以上流程可以確保邊緣部署的模型具備終身學習的能力,從而可以應對資料漂移等問題帶來的影響。
目前終身學習演演算法相關測試工具發展較慢,目前比較成熟的測試工具只有 ContinualAI 推出的 Avalanche。Avalanche 支援的特性如下:
Avalanche 支援的特性非常豐富,但是對於終身學習演演算法開發者來說 Avalanche 還存在一些侷限性:
因此目前業界亟需一個更好的終身學習測試 benchmarking 工具,Ianvs 釋出的非結構化終身學習新特性可以很好的解決上述問題。
終身學習近年來得到了越來越多的關注,越來越多的邊緣智慧從業者認識到了終身學習的重要性。但是終身學習相比其他 AI 演演算法來說有著更高的研究門檻,經過我們的調研發現終身學習研發存在模型訓練流程複雜、演演算法效果難以衡量和演演算法落地應用困難三大挑戰。
第一個挑戰是終身學習模型訓練流程較為複雜,比如對於一個剛入門終身學習的同學來說,可能對終身學習演演算法流程中的未知任務識別模組比較感興趣,但是要想完整實現終身學習還需要填補任務定義、任務分配等模組,而這對於剛入門的同學不太友好,想復現別人的工作還需要去額外完成其他終身學習模組。
針對這一挑戰,KubeEdge-Ianvs 中對終身學習全生命週期的各個模組都進行了設計,包括並不限於任務定義、任務分配、未知任務識別和未知任務處理等多個終身學習核心演演算法模組,各個模組之間是解耦合的,使用者可以只研究自己感興趣的模組,其他模組採用預設設定即可跑通終身學習實驗。
第二個挑戰是終身學習演演算法效果衡量困難,不同論文中的終身學習演演算法由於其測試流程不一樣難以比較其工作的優劣。同時大部分論文的工作都是在 MNIST、CIFAR10 這些非真實資料集上進行的實驗,由於缺乏在真實世界資料集上的測試,演演算法在現實世界中的實際應用效果往往要大打折扣。
針對這一挑戰,KubeEdge-Ianvs 中對終身學習的測試流程進行了統一,提供 BWT、FWT 等公認的終身學習系統指標,方便衡量演演算法效果。同時 KubeEdge-Ianvs 開源了 Cloud-Robotics 等真實世界終身學習資料集,並配套了對應的執行樣例,使用者可以直接開箱使用該真實世界資料集測試自己提出的演演算法的效果。
第三個挑戰是終身學習演演算法落地較為困難,演演算法研發與實際部署之間存在一定鴻溝。使用者訓練好的模型需要進一步封裝才能實際在生產環境上使用。
針對這一挑戰,KubeEdge-Ianvs 在開發時就考慮到了和其姊妹專案 KubeEdge-Sedna 開源服務平臺是配套相容關係,因此在 KubeEdge-Ianvs上研發的終身學習演演算法可以直接遷移到 KubeEdge-Sedna平臺上實現落地部署,解決了從研發到落地最後一公里的問題。
總而言之,Ianvs 終身學習優勢包括:
覆蓋終身學習全生命週期,包括任務定義、任務分配、未知任務識別和未知任務處理等多個模組,各個模組是解耦合的;
統一化的測試流程,系統內建權威的終身學習測試指標,並且支援測試結果的視覺化;並提供真實世界資料集用於終身學習測試,能更好測試終身學習演演算法在真實環境的效果;
和 KubeEdge-Sedna 終身學習相相容,研發演演算法可以快捷遷移到 Sedna 上實現落地部署。
Ianvs 在去年釋出的 0.1.0 版本中已具備支援單任務學習正規化和增量學習正規化的演演算法研發與測試,在新版的 Ianvs 中增加了支援對終身學習正規化的相關演演算法的研發與測試的功能,同時也為終身學習演演算法測試提供了新的開源資料集。主要新特性如下:
Ianvs 終身學習具體架構如下圖所示,主要包括任務定義、任務分配、未知任務識別和未知任務處理等模組,覆蓋終身學習全生命週期。
對於已處理任務,Ianvs 通過任務定義模組,將已知任務抽象成若干個模型儲存進雲端知識庫中。在遇到新任務時,Ianvs 首先通過未知任務識別模組判斷推理樣本屬於未知任務還是已知任務。若是已知任務,則從雲端知識庫中排程對應模型部署在邊側處理該任務,同時基於已知任務樣本對模型進行增量更新。若是未知任務,則 Ianvs 通過未知任務處理模組處理該任務,利用外部系統標註並重新訓練新的模型用於處理該任務。處理完成後,新的任務模型或是更新後的已知任務模型再重新整合至雲端知識庫中。
為了方便初學者使用 Ianvs,在 Ianvs 倉庫中的 examples/robot/ 資料夾下提供了一個可以直接執行的樣例https://github.com/kubeedge/ianvs/examples/robot/ , 詳細的教學在第三節。
Ianvs 對終身學習測試流程進行了統一,主要參考了 NIPS2017 的論文 「Gradient Episodic Memory for Continual Learning」,復現了其中提出的 BWT 和 FWT 指標,用於評價終身學習演演算法的抗遺忘能力和未知任務泛化能力。
Ianvs 還開源了 Cloud-Robotics 等真實世界資料集,並提供了配套的可以開箱即用的實驗程式碼,幫助使用者快速上手 Ianvs 終身學習。
資料集官網連結:https://kubeedge-ianvs.github.io/
如下圖所示,Ianvs 中終身學習演演算法實現的元件與 Sedna 上終身學習演演算法實現的元件是相相容的,因此在 Ianvs 上研發測試的演演算法可以無障礙遷移部署到 Sedna 上,方便相關從業人員實地部署演演算法。
在這章中我們通過執行 Ianvs 終身學習的 cloud-robotics 樣例向大家講解 Ianvs 終身學習的基本流程。Ianvs 安裝流程以及終身學習更詳細的介紹可以參考:Ianvs-lifelong-learning-tutorial
相關連結:https://ianvs.readthedocs.io/en/latest/
1)首先我們需要設定好 Cloud-Robotics 的資料集,先建立資料集的資料夾,注意如果你把資料集放到別的位置,本教學中的部分路徑設定也要一併修改。
mkdir /data
cd /data
mkdir datasets
cd datasets
Cloud-Robotics 資料集可以根據該資料集專屬網站的指示操作獲得,連結:https://kubeedge-ianvs.github.io/download.html
2)下載完成後解壓資料集:unzip cloud-robotics.zip
3)設定好資料集後,我們可以準備執行範例程式碼了。Cloud-Robotics 範例執行的程式碼放在 /ianvs/project/ianvs/examples/robot/lifelong_learning_bench/ 下,我們首先要設定 python 路徑(這裡如果 Ianvs 安裝位置不一樣的話需要更改路徑):
export PYTHONPATH=$PYTHONPATH:/ianvs/project/ianvs/examples/robot/lifelong_learning_bench/testalgorithms/rfnet/RFNet
4)然後我們檢查一下 yaml 檔案的資訊:
5)上圖 benchmarkjob.yaml 中 workplace 是存放模型訓練輸出的路徑,可以改成你需要的路徑。
6)上圖 testenv-robot.yaml 中 train_url 和 test_url 是資料集索引的路徑,如果你的資料集存放位置和教學不一樣,則需要修改 train_url 和 test_url 的路徑。
7)在上圖 rfnet_algorithm.yaml 中可以根據你的需求新增測試的終身學習演演算法,比如任務定義、任務分配等演演算法。本樣例中提供了一個簡單的範例。
8)其他的組態檔暫時沒有需要調整的。接下來我們就可以執行範例程式碼了:
cd /ianvs/project/ianvs
ianvs -f examples/robot/lifelong_learning_bench/benchmarkingjob.yaml
在模型終身學習任務結束後你可以看到以下內容,包括 BWT、FWT 等終身學習系統衡量指標:
9)出現以上顯示結果,則成功跑通了一個 Ianvs 終身學習樣例!
如果讀者對於本次版本釋出的更多細節感興趣,歡迎查閱 Ianvs v0.2 Release Note:https://github.com/kubeedge/ianvs/releases/tag/v0.2.0
後續 KubeEdge SIG AI 將釋出系列文章,陸續具體介紹終身學習全面升級的特性,歡迎各位讀者繼續關注社群動態。
[1] 開源專案GitHub地址:https://github.com/kubeedge/ianvs
[2] 資料集官網連結:https://kubeedge-ianvs.github.io/
[3] Ianvs 安裝流程以及終身學習更詳細的介紹連結:https://ianvs.readthedocs.io/en/latest/
[4] Cloud-Robotics 資料集:https://kubeedge-ianvs.github.io/download.html
[5] Ianvs v0.2 Release Note:https://github.com/kubeedge/ianvs/releases/tag/v0.2.0