一、一些概念
在正式開啟AWS邊緣智能之前,我們先了解一些基礎(chǔ)概念:
1.1邊緣智能(Edge Intelligence,EI)是指在“終端側(cè)”部署人工智能。為什么只在云端做推理不行?眾所周知,人工智能(AI)正在成為改變各行各業(yè)的通用技術(shù)。此前絕大部分AI是依賴云端實(shí)現(xiàn)的,因?yàn)樵贫擞懈S富的算力、GPU資源、機(jī)器學(xué)習(xí)平臺等。隨著AI芯片和邊緣算力的不斷發(fā)展,EI已成為未來的趨勢。
1.2邊緣計(jì)算定義:OpenStack基金會對外發(fā)布的白皮書《邊緣計(jì)算–跨越傳統(tǒng)數(shù)據(jù)中心》對“邊緣計(jì)算”這一概念進(jìn)行了清晰的闡述,邊緣計(jì)算是為應(yīng)用開發(fā)者和服務(wù)提供商在網(wǎng)絡(luò)的邊緣側(cè)提供云服務(wù)和IT環(huán)境服務(wù),“邊緣”指的是位于管理域的邊緣,盡可能地靠近數(shù)據(jù)源或用戶。其目標(biāo)是在靠近數(shù)據(jù)輸入或用戶的地方提供計(jì)算、存儲和網(wǎng)絡(luò)帶寬。但不同的行業(yè)對應(yīng)邊緣計(jì)算的定義可能不同。基于物聯(lián)網(wǎng)技術(shù)的行業(yè)更多的邊緣側(cè)旨在設(shè)備端。
1.3 Jetson Nano是NVIDIA推出邊緣AI的開發(fā)板,GPU使用NVIDIA Maxwell?架構(gòu),配備128個NVIDIA CUDA?核心,開發(fā)者們可以基于Jetson Nano開發(fā)很多EI的應(yīng)用。
Jetson Nano Developer Kit
1.4邊緣計(jì)算與IoT云平臺,邊緣計(jì)算與云計(jì)算平臺將是共生互補(bǔ)。邊緣計(jì)算并不會取代云計(jì)算,而是通過邊緣側(cè)的算力,讓傳統(tǒng)的云計(jì)算框架進(jìn)一步去中心化,在邊緣側(cè)完成部分計(jì)算工作,然后將結(jié)果匯聚到云端進(jìn)行統(tǒng)一處理。云端也可以通過OTA,模型的訓(xùn)練后的下放與邊緣端集成到一起。云端仍舊可以處理時間不敏感的應(yīng)用場景,通過數(shù)據(jù)的匯聚以及云端的大數(shù)據(jù)分析進(jìn)一步為業(yè)務(wù)的決策提供數(shù)據(jù)支撐。
二、場景描述:
在本篇博客中,我們將通過AWS Greengrass和Jetson Nano實(shí)現(xiàn)圖片的分類,AWS Greengrass通過Lambda處理圖像分類的消息與調(diào)用本地的SageMaker訓(xùn)練好的Neo模型,然后通過Topic把圖像分類的結(jié)果發(fā)送至AWS IoT Core。其中邊緣推理部分使用了Greengrass ML inference。本篇博客以樂高恐龍圖像分類作為開啟EI亦或AIoT應(yīng)用的開端。
恐龍圖片分類素材
三、技術(shù)架構(gòu):
AWS EI image classification
AWS IoT Greengrass可將AWS無縫擴(kuò)展至邊緣設(shè)備,因此可以在本地操作其生成的數(shù)據(jù),同時仍可將云用于管理、分析和持久存儲。借助AWS IoT Greengrass,邊緣設(shè)備可以運(yùn)行AWS Lambda函數(shù)、Docker容器,基于機(jī)器學(xué)習(xí)模型執(zhí)行預(yù)測、使設(shè)備數(shù)據(jù)保持同步以及與其他設(shè)備安全通信–甚至在沒有連接Internet的情況下也可實(shí)現(xiàn)這些功能。
Amazon SageMaker是一種完全托管的機(jī)器學(xué)習(xí)服務(wù)。借助Amazon SageMaker,數(shù)據(jù)科學(xué)家和開發(fā)人員可以快速輕松地構(gòu)建和訓(xùn)練機(jī)器學(xué)習(xí)模型,然后直接將模型部署到托管的生產(chǎn)就緒環(huán)境中。它提供了一個集成Jupyter Notebook的實(shí)例,供您輕松訪問數(shù)據(jù)源以便進(jìn)行探索和分析,因此您無需管理服務(wù)器。
Amazon SageMaker Ground Truth是數(shù)據(jù)標(biāo)注的服務(wù),為機(jī)器學(xué)習(xí)模型構(gòu)建高品質(zhì)的訓(xùn)練數(shù)據(jù)集。
Amazon SageMaker Neo使機(jī)器學(xué)習(xí)模型訓(xùn)練一次即可在云和邊緣站點(diǎn)中的任何環(huán)境運(yùn)行。Neo可自動優(yōu)化TensorFlow、Apache MXNet、PyTorch、ONNX和XGBoost模型以部署在ARM、Intel和Nvidia處理器上,減少移植所需的時間和工作。但需要注意一點(diǎn)的是,Neo當(dāng)前支持的是從TensorFlow、MXNet或PyTorch導(dǎo)出的圖像分類模型,以及XGBoost模型。
本篇具體實(shí)現(xiàn)的流程如下圖,在最后的參考鏈接會附有源代碼和對應(yīng)的庫:
AWS EI Demo流程圖
四、AWS EI實(shí)驗(yàn)步驟:
4.1圖片標(biāo)注(SageMaker GroundTruth)
在這次試驗(yàn)中,我們將使用SageMaker GroundTruth的服務(wù)來標(biāo)注由樂高恐龍組成的圖像訓(xùn)練集。
步驟如下:
將未標(biāo)注的數(shù)據(jù)集上傳到S3上
在Sagemaker GroundTruth中創(chuàng)建一個私有的Labeling workforce
創(chuàng)建一個GroundTruth Labeling job
使用GroundTruth平臺來標(biāo)注圖片
分析結(jié)果
4.1.1下載未標(biāo)注的數(shù)據(jù)集:
在這一步中,我們將未標(biāo)注的數(shù)據(jù)集下載到本地,然后upload到剛剛創(chuàng)建的存儲桶中作為SageMaker GroundTruth的數(shù)據(jù)輸入。這個數(shù)據(jù)集中包含388個文件,其中包含6大分類(Brachiosaurus,Dilophosaurus,Spinosaurus,Stegosaurus,Triceratops and Unknown)。
數(shù)據(jù)集下載地址:
https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/lego_dinosaurs_dataset.zip
或者
https://sagemaker-nvidia-webinar.s3.amazonaws.com/lego_dinosaurs_dataset.zip
將未標(biāo)注的數(shù)據(jù)集上傳到S3上:
在ap-northeast-1區(qū)域中創(chuàng)建一個S3存儲桶并給存儲桶唯一的命名.(比如,ground-truth-labelling-job-initials-20200112)
·將download的數(shù)據(jù)集上傳到剛剛創(chuàng)建的桶中。(因?yàn)橄旅娴牟襟E我們需要做人工標(biāo)注,所以建議將6大類的樂高恐龍分別選取2-3張作為需要標(biāo)注的數(shù)據(jù)集即可)
·在設(shè)置權(quán)限這一步保持默認(rèn)即可,然后完成設(shè)置。
4.1.2在GroundTruth中創(chuàng)建一個私有的Labeling workforce
這一步驟中我們將通過Sagemaker GroundTruth創(chuàng)建一個圖像分類任務(wù)在ap-northeast-1。
·打開AWS控制臺>Amazon SageMaker>標(biāo)簽工作人員(Labeling workforces)
·選擇私有(Private)的標(biāo)簽然后創(chuàng)建私有團(tuán)隊(duì)(Create private team)
·給私有標(biāo)注的工作組命名
·填寫一個有效的郵箱地址
·…
·創(chuàng)建私有團(tuán)隊(duì)
創(chuàng)建私有團(tuán)隊(duì)
·當(dāng)創(chuàng)建成功后,我們的郵箱會收到來自于no-reply verificationemail.com發(fā)來的驗(yàn)證郵件,這個郵件包含了我們創(chuàng)建workforce的用戶名和臨時密碼。
創(chuàng)建workforce
·使用log in的連接和臨時密碼登陸到標(biāo)注控制臺進(jìn)行標(biāo)注。
·此時會要求我們更改臨時密碼。
·因?yàn)槲覀冞€沒有分配給worker(我們自己)標(biāo)注任務(wù),此時標(biāo)注任務(wù)是空的,下一步我們將分配給自己標(biāo)注樂高恐龍的標(biāo)注任務(wù)。
4.1.3創(chuàng)建一個GroundTruth Labeling job
這一步驟就是我們創(chuàng)建一個標(biāo)注的任務(wù),然后分配給workforce。
·打開AWS控制臺>Amazon SageMaker>標(biāo)記任務(wù)(Labeling jobs)
·Step1:指定任務(wù)詳細(xì)信息中:
—定義任務(wù)名稱(記住任務(wù)名稱,我們在notebook中的代碼會用到)
—創(chuàng)建清單文件(manifest),輸入S3訓(xùn)練數(shù)據(jù)集的路徑,注意要以/結(jié)尾。For e.g.:s3:///<prefix/foldername>/
創(chuàng)建manifest
—IAM角色,在測試環(huán)境中我們可以允許它訪問所有的S3 bucket,當(dāng)然我們可以指定它可以訪問特定S3 bucket。
—任務(wù)類型,我們選擇圖像分類。
任務(wù)類型
·Step2:選擇工作人員并配置工具
選擇“私有(Private)”>“私有團(tuán)隊(duì)(Private teams)在下拉框中我們已經(jīng)在1.2創(chuàng)建過的”>“取消自動標(biāo)記”>“其他配置中工作人員數(shù)量為1”>“圖像分類標(biāo)記工具中添加6個標(biāo)簽:Brachiosaurus,Dilophosaurus,Spinosaurus,Stegosaurus,Triceratops and Unknown”
·返回標(biāo)注作業(yè)的頁面查看jobs的狀態(tài),此時我們的郵箱會有no-reply verificationemail.com發(fā)來的郵件,內(nèi)容是分配給我1個jobs需要完成。
4.1.4用GroundTruth平臺來標(biāo)注圖片
這一步驟就是人工標(biāo)注的過程,因?yàn)榍懊嫖覀円呀?jīng)節(jié)選出13張有代表的圖像,我們下面就對這13張圖像進(jìn)行標(biāo)注即可。如下圖:
當(dāng)標(biāo)注完成后,我們返回到Sagemaker平臺上??梢愿櫂?biāo)記任務(wù)的狀態(tài)以及進(jìn)度。
4.1.5結(jié)果驗(yàn)證
我們可以用sublime text打開在output中的/manifests/output.manifest文件,它是一個json文件包含一些被標(biāo)記圖片的metadata.比如:
Manifests格式
4.2模型訓(xùn)練與優(yōu)化
這一步我們主要的目的就是通過Amazon SageMaker notebook編寫訓(xùn)練模型的代碼,通過代碼來調(diào)用云計(jì)算的資源,比如機(jī)器學(xué)習(xí)類型的instance。它將執(zhí)行數(shù)據(jù)訓(xùn)練,并將訓(xùn)練和優(yōu)化好的模型以Amazon SageMaker Neo導(dǎo)出。下一步將Amazon SageMaker Neo模型部署到Jetson Nano的設(shè)備上。如果不想對模型進(jìn)行訓(xùn)練的話可以到參考鏈接處下載訓(xùn)練好的模型。
這個notebook主要是展示端到端機(jī)器學(xué)習(xí)的工作流程
·使用Sagemaker GroundTruth創(chuàng)建的標(biāo)簽數(shù)據(jù)集。然后將數(shù)據(jù)集分為訓(xùn)練和驗(yàn)證。
·使用Sagemaker容器訓(xùn)練模型
·使用Sagemaker Neo優(yōu)化模型
4.2.1下載代碼ipynb并導(dǎo)入到SageMaker notebook中
圖像分類代碼https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/sagemaker_image_classification-Copy1.ipynb
注意不要使用參考鏈接中的github上的代碼。
創(chuàng)建Amazon SageMaker筆記本
4.2.2部分代碼解析
·在OUTPUT_MANIFEST要輸入Sagemaker GroundTruth的output路徑,前面的步驟已經(jīng)驗(yàn)證過output的manifest的json格式。
代碼解析-1
·在創(chuàng)建Sagemaker訓(xùn)練任務(wù)的時候,請根據(jù)自己數(shù)據(jù)集訓(xùn)練的個數(shù)來調(diào)整超參數(shù)(hyperparamerter)和訓(xùn)練instance的類型(InstanceType)如下:
代碼解析-2
·在InputDataConfig替換AttributeNames為自己定義的name,比如:
“AttributeNames”:[“source-ref”,”groundtruth-labeling-job-20191209-clone”]
·啟動訓(xùn)練作業(yè),我們可以在Sagemaker notebook中查看到結(jié)果,也可以返回到Sagemaker控制臺的訓(xùn)練任務(wù)中看到訓(xùn)練的狀態(tài)。訓(xùn)練的時間長短取決于訓(xùn)練實(shí)例類型、數(shù)據(jù)集大小、超參數(shù)的定義。
Sagemaker notebook的訓(xùn)練狀態(tài)
Sagemaker console的訓(xùn)練狀態(tài)
·通過使用Sagemaker Neo來優(yōu)化壓縮模型給終端Jetson Nano使用,導(dǎo)出的模型路徑我們要記錄一下,在下一步驟部署GreenGrass的時候會用到。
模型導(dǎo)出
小結(jié):
回顧一下我們的Demo流程圖,我們一起完成了第一部分:圖片標(biāo)注和第二部分模型訓(xùn)練與優(yōu)化。下一章是我們的另一個重點(diǎn),開始構(gòu)建邊緣環(huán)境與執(zhí)行邊緣推理。
AWS EI Demo流程圖