AWS IoT Greengrass Version 1 於 2023 年 6 月 30 日進入延長壽命階段。如需詳細資訊,請參閱 AWS IoT Greengrass V1 維護政策 。在此日期之後, AWS IoT Greengrass V1 不會發佈提供功能、增強功能、錯誤修正或安全修補程式的更新。在 上執行的裝置 AWS IoT Greengrass V1 不會中斷,並會繼續運作和連線至雲端。我們強烈建議您遷移至 AWS IoT Greengrass Version 2,這會新增重要的新功能,並支援其他平台 。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
如何使用 AWS Management Console設定最佳化的機器學習推論
若要遵循本教學課程中的步驟,您必須使用AWS IoT Greengrass核心 v1.10 或更新版本。
您可以使用 SageMaker 新的深度學習編譯器,可在 Tensorflow、Apache MXNet、 PyTorch、ONNX 和 XGBoost 架構,提供更小的佔用空間和更快的效能。然後,您可以下載最佳化的模型,並安裝 SageMaker Neo 深度學習執行時間,然後將它們部署到您的AWS IoT Greengrass提供更快速推論的裝置。
本教學說明如何使用AWS Management Console設定 Greengrass 群組直接在相機執行 Lambda 推論範例,同時並不需要傳送資料至雲端。推論範例會存取 Raspberry Pi 上的相機模組。在本教學課程中,您下載透過 Resnet-50 訓練並在 Neo 深度學習編譯器中最佳化的預先包裝模型。然後,使用此模型在 AWS IoT Greengrass 裝置上執行本機映像分類。
本教學課程所述以下高階執行步驟:
先決條件
為完成此教學課程您需要:
-
樹莓派 4 B 型, 或樹莓派 3 B/B+ 型號, 設置和配置與使用AWS IoT Greengrass。設定您的 Raspberry PiAWS IoT Greengrass,執行Greengrass 裝置設定Simple,或確定您已完成模組 1和模組 2的入門 AWS IoT Greengrass。
注意
樹莓派可能需要 2.5A電源
執行一般用於影像分類的深度學習架構。等級較低的電源供應器可能會導致裝置重新開機。 -
Raspberry Pi 攝影機模組 V2 - 8 百萬像素、1080p
。若要了解如何設定相機,請參閱 Raspberry Pi 文件中的連接相機 。 -
Greengrass 群組和 Greengrass 核心。若要了解如何建立 Greengrass 群組或是 Greengrass 核心,請參閱 入門 AWS IoT Greengrass。
注意
本教學課程使用 Raspberry Pi 進行,但 AWS IoT Greengrass 支援其他平台,例如 Intel Atom 和 NVIDIA Jetson TX2。如果使用 Intel Atom 範例,您可能需要安裝 Python 3.6 而不是 Python 3.7。如需如何設定裝置以便安裝 AWS IoT Greengrass Core 軟體的相關資訊,請參閱 設定其他裝置。
對於第三方平台AWS IoT Greengrass不支援,您必須在非容器化模式下執行 Lambda 函數。若要以非容器化模式執行,您必須以根執行 Lambda 函數。如需詳細資訊,請參閱選擇 Lambda 函數容器化時的考量事項及設定群組中 Lambda 函數的預設存取身分。
步驟 1:設定 Raspberry Pi
在此步驟中,請安裝 Raspbian 作業系統的更新、安裝相機模組軟體和 Python 相依性,以及啟用相機界面。
在您的 Raspberry Pi 終端機執行以下命令。
-
安裝 Raspbian 的更新。
sudo apt-get update sudo apt-get dist-upgrade
-
安裝攝影機模組的
picamera
界面和本單元其他所需的 Python 程式庫。sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picamera
驗證安裝:
-
確保您的 Python 3.7 安裝包含 pip。
python3 -m pip
如果未安裝 pip,請從 pip 網站
下載它,然後執行以下命令。 python3 get-pip.py
-
請確保您的 Python 版本是 3.7 或更高版本。
python3 --version
如果輸出中列出較早的版本,請執行下列命令。
sudo apt-get install -y python3.7-dev
-
請確定 Setuptools 和 Picamera 已安裝成功。
sudo -u ggc_user bash -c 'python3 -c "import setuptools"' sudo -u ggc_user bash -c 'python3 -c "import picamera"'
如果輸出中未包含錯誤,則表示驗證成功。
注意
如果裝置上安裝的 Python 可執行檔是
python3.7
,請針對本教學課程中的命令使用python3.7
而不是python3
。確保您的 pip 安裝對應到正確的python3.7
或python3
版本,以避免相依性錯誤。 -
-
重新啟動 Raspberry Pi。
sudo reboot
-
請開啟 Raspberry Pi 組態工具。
sudo raspi-config
-
請使用箭頭鍵開啟 Interfacing Options (連接選項) 並啟用攝影機界面。如果出現提示,請允許重新啟動裝置。
-
請使用以下命令測試攝影機建立。
raspistill -v -o test.jpg
這會在 Raspberry Pi 上開啟預覽視窗、將名為
test.jpg
的圖片儲存至現行目錄,並在 Raspberry Pi 終端機中顯示相機的相關資訊。
步驟 2:安裝 Amazon SageMaker Neo 深度學習執行時間
在此步驟中,請於 Raspberry Pi 上安裝 Neo 深度學習執行階段 (DLR)。
注意
針對本教學課程,建議您安裝 1.1.0 版。
-
遠端登入到 Raspberry Pi。
ssh pi@
your-device-ip-address
-
開啟 DLR 文件、開啟安裝 DLR
,然後找到 Raspberry Pi 裝置的 wheel URL。然後,依照指示在裝置上安裝 DLR。例如,你可以使用 pip: pip3 install
rasp3b-wheel-url
-
安裝 DLR 之後,請驗證下列組態:
-
確定
ggc_user
系統帳戶可以使用 DLR 程式庫。sudo -u ggc_user bash -c 'python3 -c "import dlr"'
-
確定 NumPy 已安裝。
sudo -u ggc_user bash -c 'python3 -c "import numpy"'
-
步驟 3:建立推論 Lambda 函數
在此步驟中,建立 Lambda 函數部署套件和 Lambda 函數。然後,發佈函數版本和建立別名。
-
在您的電腦上,從 機器學習範例 下載 Raspberry Pi 的 DLR 範例。
-
解壓縮所下載的
dlr-py3-armv7l.tar.gz
檔案。cd
path-to-downloaded-sample
tar -xvzf dlr-py3-armv7l.tar.gz解壓縮的範例套件中的
examples
目錄內包含函數程式碼和相依性。-
inference.py
是本教學課程中使用的推論程式碼。您可以使用此程式碼作為範本來建立您自己的推論函數。 -
greengrasssdk
是 1.5.0 版的AWS IoT Greengrass適用於 Python 的核心 SDK。注意
如果有新版本可用,您可以下載並升級部署套件中的 SDK 版本。如需詳細資訊,請參閱「」AWS IoT Greengrass適用於 Python 的核心 SDK
上 GitHub。
-
-
將
examples
目錄的內容壓縮成名為optimizedImageClassification.zip
的檔案。這是您的部署套件。cd
path-to-downloaded-sample
/dlr-py3-armv7l/examples zip -r optimizedImageClassification.zip .部署套件包含函數程式碼和相依性。這包括會叫用 Neo 深度學習執行階段 Python API,以利用 Neo 深度學習編譯器模型執行推論的程式碼。
注意
確保
.py
檔案和相依性皆位於目錄的根中。 -
現在,將 Lambda 函數新增至您的 Greengrass 群組。
在 Lambda 主控台頁面中,選擇函數並選擇建立函數。
-
選擇Author from scratch (從頭開始撰寫)並使用下列值來建立您的函數:
-
針對 Function name (函數名稱),請輸入
optimizedImageClassification
。 -
針對 Runtime (執行時間),選擇 Python 3.7。
適用於許可,請保留預設設定。這會建立授與基本 Lambda 權限的執行角色。此角色不為所用AWS IoT Greengrass。
-
-
選擇 Create function (建立函數)。
現在,上傳您的 Lambda 函數部署套件,並註冊處理常式。
-
在「」程式碼索引標籤下原始碼,選擇上傳來源。從下拉式選單中選擇.zip 檔案。
-
選擇您的
optimizedImageClassification.zip
部署套件,然後選擇Save。 -
在「」程式碼功能的標籤,在執行時間設定,選擇Edit (編輯),然後輸入下列值。
-
針對 Runtime (執行時間),選擇 Python 3.7。
-
對於 Handler (處理常式),輸入
inference.handler
。
選擇 Save (儲存)。
-
接著,發佈您的 Lambda 函數的第一個版本。然後,建立版本的別名。
注意
Greengrass 組可以通過別名(推薦)或版本引用 Lambda 函數。使用別名可讓您更輕鬆地管理程式碼更新,因為當函數程式碼更新時,您不需要變更訂閱資料表或群組定義。相反,您只需將別名指向新函數版本即可。
-
請從操作功能表中選擇發行新版本。
-
針對 Version description (版本描述),輸入
First version
,然後選擇 Publish (發佈)。 -
在「」optimizedImageClassification:1組態頁面,從動作功能表中,選擇建立別名。
-
在建立警示頁面上使用下列值:
-
對於 Name (名稱),輸入
mlTestOpt
。 -
針對 Version (版本) 輸入
1
。
注意
AWS IoT Greengrass不支援的 Lambda 別名$LATE版本。
-
-
選擇 Create (建立)。
現在,將 Lambda 函數新增至您的 Greengrass 群組。
步驟 4:Lambda 函數至 Greengrass 群組
在此步驟中,將 Lambda 函數新增至群組,然後設定其生命週期。
首先,將 Lambda 函數新增至您的 Greengrass 群組。
在 中AWS IoT主控台導覽窗格, 下Manage (管理),展開Greengrass 裝置,然後選擇群組 (V1)。
-
在群組組組組組組組組組組組組組組態頁面Lambda 函數」標籤,然後選擇Add。
-
選擇Lambda 函數並 SELECToptimizedImageClassification。
-
在「」Lambda 函數版本」中,選擇您所發佈版本的別名。
接著,設定 Lambda 函數的生命週期。
-
在 中Lambda 函數組態」章節,進行下列更新。
注意
建議您在不使用容器化的情況下執行 Lambda 函數,除非您的商業案例需要。這有助於啟用對設備 GPU 和攝像頭的訪問,而無需配置設備資源。如果您在沒有容器化的情況下執行,您也必須授與 root 存取權AWS IoT GreengrassLambda 函數。
-
若要在不使用容器化的情況下執行:
-
適用於系統使用者和群組,選擇
Another user ID/group ID
。適用於系統使用者 ID輸入0
。適用於系統群組 ID輸入0
。這允許您的 Lambda 函數以 root 身份執行。如需以 root 身份執行的詳細資訊,請參閱設定群組中 Lambda 函數的預設存取身分。
提示
您還必須更新
config.json
檔案,以授予存取您的 Lambda 函數的 Roambda 函數。相關程序請參閱以根身份運行 Lambda 函數。 -
適用於Lambda 函數容器化,選擇沒有容器。
如需不含容器化執行的詳細資訊,請參閱選擇 Lambda 函數容器化時的考量事項。
-
針對 Timeout (逾時),輸入
10 seconds
。 -
適用於Pinned,選擇True。
如需詳細資訊,請參閱 Greengrass Lambda 函數的生命週期組態。
-
INDECT其他參數,為Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用。
-
-
要在容器化模式下運行:
注意
除非您的商業案例需要,否則建議您在容器化模式下執行。
-
適用於系統使用者和群組,選擇使用群組預設。
-
適用於Lambda 函數容器化,選擇使用群組預設。
-
針對 Memory limit (記憶體限制),輸入
1024 MB
。 -
針對 Timeout (逾時),輸入
10 seconds
。 -
適用於Pinned,選擇True。
如需詳細資訊,請參閱 Greengrass Lambda 函數的生命週期組態。
-
INDECT其他參數,為Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用。
-
-
-
選擇新增 Lambda 函數。
步驟 5:新增 SageMaker Greengrass 群組的 Neo 最佳化模型資源
在此步驟中,建立最佳化機器學習推論模型的資源,並將其上傳到 Amazon S3 儲存貯體。然後,找到 Amazon S3 上傳的模型AWS IoT Greengrass使用 Lambda 函數控制台和建立新建立的資源。這使得函數可在核心裝置上存取其資源。
-
在您的電腦上,瀏覽至您在 步驟 3:建立推論 Lambda 函數 中解壓縮的範例套件內的
resnet50
目錄。注意
如果使用 NVIDIA Jetson 範例,則需要改用範例套件中的
resnet18
目錄。如需詳細資訊,請參閱 設定 NVIDIA Jetson TX2。cd
path-to-downloaded-sample
/dlr-py3-armv7l/models/resnet50此目錄中包含預先編譯的模型成品,其適用於利用 Resnet-50 訓練的映像分類模型。
-
將
resnet50
目錄內的檔案壓縮成名為resnet50.zip
的檔案。zip -r resnet50.zip .
-
在群組組組組組組組組組組組組態頁面AWS IoT Greengrass群組,選擇資源標籤。導覽至 Machine Learning (機器學習)區段,然後選擇 Add machine learning resource (新增機器學習資源)。在 Create a machine learning resource (建立機器學習資源) 頁面上,於 Resource name (資源名稱) 輸入
resnet50_model
。 -
適用於模型來源,選擇使用存放在 S3 中的模型,例如透過深度學習編譯器最佳化的模型。
-
INDECTS3 類型,選擇瀏覽 S3。
注意
目前,優化 SageMaker 模型會自動存放在 Amazon S3 中。您可以使用此選項在 Amazon S3 儲存貯體中找到您的最佳化模型。如需模型最佳化的詳細資訊 SageMaker,請參閱SageMaker Neo 文件。
-
選擇 Upload a model (上傳模型)。
-
在 Amazon S3 主控台標籤上,將您的 zip 檔案上傳至 Amazon S3 儲存貯體。如需相關資訊,請參閱「」。如何將檔案與資料夾上傳至 S3 儲存貯體?中的Amazon Simple Storage Service 使用者指南。
注意
您的儲存貯體名稱必須包含字串
greengrass
。選擇唯一名稱 (例如greengrass-dlr-bucket-
)。請勿在儲存貯體名稱中使用句號 (user-id
-epoch-time
.
)。 -
在 中AWS IoT Greengrass主控台標籤,找到您的 Amazon S3 儲存貯體。尋找您已上傳的
resnet50.zip
檔案,然後選擇 Select (選取)。您可能需要重新整理頁面來更新可用儲存貯體和檔案的清單。 -
In目的地路徑輸入
/ml_model
。這是 Lambda 執行階段命名空間的本機模型目的地。當您部署群組、 AWS IoT Greengrass 擷取來源模型封包,然後再擷取其內容到指定的目錄中。
注意
我們強烈建議您使用針對本機路徑提供的確切路徑。在此步驟中使用不同的本機模型目的地路徑,會導致此教學課程中提供的一些故障診斷命令不精確。如果使用不同的路徑,請設定
MODEL_PATH
環境變數,其必須使用這裡提供的確切路徑。如需環境變數的相關資訊,請參閱 AWS Lambda 環境變數。 -
如果在容器化模式下運行:
-
INDECT系統群組擁有者和檔案存取權限,選擇指定系統群組和權限。
-
選擇唯讀存取,然後選擇新增資源。
-
步驟 6:將您的相機裝置資源新增至 Greengrass 群組
在此步驟中,建立相機模組的資源,並將其與 Lambda 函數建立隸屬關係。這使得 Lambda 函數可在核心裝置上存取資源。
注意
如果您在非容器化模式下運行,AWS IoT Greengrass無需配置此設備資源即可訪問設備 GPU 和攝像頭。
-
在群組組組組組組組組組組組組組組組組態頁面資源標籤。
-
在「」本機資源標籤上選擇新增本機資源。
-
在「」新增本機資源頁面上,使用下列值:
-
針對 Resource name (資源名稱),輸入
videoCoreSharedMemory
。 -
於資源類型選擇裝置。
-
適用於本機裝置路徑輸入
/dev/vcsm
。裝置路徑為裝置資源的本機絕對路徑。此路徑只能參考
/dev
底下的字元裝置或區塊型儲存設備。 -
適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組自動新增檔案系統許可。
Group owner file access permission (群組擁有者檔案存取許可) 選項讓您授與其他檔案可存取 Lambda 的許可。如需詳細資訊,請參閱 群組擁有者檔案存取許可。
-
-
請在頁面底部,選擇新增資源。
-
來自資源」標籤上,透過選擇建立另一個本機資源Add並使用下列數值:
-
針對 Resource name (資源名稱),輸入
videoCoreInterface
。 -
於資源類型選擇裝置。
-
適用於本機裝置路徑輸入
/dev/vchiq
。 -
適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組自動新增檔案系統許可。
-
-
選擇 Add resource (新增資源)。
步驟 7:將訂閱新增到 Greengrass 群組
在此步驟中,將訂閱新增至群組。這些訂閱使得 Lambda 函數可將預測結果傳送至AWS IoT透過發佈至 MQTT 主題。
-
在群組組組組組組組組組組組組組組態頁面訂閱」索引標籤,然後選擇新增訂閱。
-
在「」建立訂閱頁面上,設定以下的來源和目標:
-
In來源類型,選擇Lambda 函數,然後選擇optimizedImageClassification。
-
InTarget type (目標類型),選擇服務,然後選擇IoT Cloud (IoT 雲端)。
-
在 中主題篩選條件輸入
/resnet-50/predictions
,然後選擇建立訂閱。
-
-
新增第二個訂閱。選擇訂閱標籤上選擇新增訂閱,並設定以下的來源和目標:
-
In來源類型,選擇服務,然後選擇IoT Cloud (IoT 雲端)。
-
InTarget type (目標類型),選擇Lambda 函數,然後選擇optimizedImageClassification。
-
在 中主題篩選條件輸入
/resnet-50/test
,然後選擇建立訂閱。
-
步驟 8:部署 Greengrass 群組
在此步驟中,將群組定義的目前版本部署到 Greengrass 核心裝置。定義包含您新增的 Lambda 函數、資源和訂閱組態。
-
請確定該AWS IoT Greengrass核心正在執行。如果需要,請在您的 Raspberry Pi 終端機執行以下命令。
-
檢查精靈是否有在運作:
ps aux | grep -E 'greengrass.*daemon'
若輸出的
root
含有/greengrass/ggc/packages/
項目,則精靈有在運作。latest-core-version
/bin/daemon 啟動協助程式:
cd /greengrass/ggc/core/ sudo ./greengrassd start
-
-
在群組組組組組組組組組組組組態頁面部署。
-
在「」Lambda 函數」頁籤上,選取IP 偵測器並選擇Edit (編輯)。
-
來自編輯 IP 偵測器設定對話方塊中,選取自動偵測並覆寫 MQTT 代理程式端點並選擇Save。
這可讓裝置自動取得核心的連接資訊,例如 IP 位址、DNS、連接埠編號。建議使用自動偵測,但是 AWS IoT Greengrass 也支援手動指定端點。只會在第一次部署群組時收到復原方法的提示。
注意
如果出現提示,請授予建立Greengrass 服務角色並將其與您的關聯AWS 帳戶在最新的AWS 區域。此角色允許AWS IoT Greengrass存取您的資源AWS服務。
此部署頁面會顯示部署時間戳記、版本 ID 和狀態。部署完成時,針對部署顯示的狀態應為已完成。
如需部署的詳細資訊,請參閱將 AWS IoT Greengrass 群組部署至 AWS IoT Greengrass 核心。如需故障診斷協助,請參閱AWS IoT Greengrass 疑難排解。
測試推論範例
現在您可以驗證部署是否已正確設定。若要測試,請訂閱 /resnet-50/predictions
主題,並將任何訊息發佈到 /resnet-50/test
主題。這會觸發 Lambda 函數,以利用您的 Raspberry 照相,並對其擷取的映像執行推論。
注意
如果使用 NVIDIA Jetson 範例,請務必改用 resnet-18/predictions
和 resnet-18/test
主題。
注意
如果 Raspberry Pi 附加監控功能,即時攝影機反饋會顯示在預覽視窗中。
-
在「」AWS IoT主控台首頁,下一步測試,選擇MQTT 測試用戶端。
-
適用於訂閱,選擇訂閱主題。使用下列數值。將剩餘選項保留為其預設值。
-
針對 Subscription topic (訂閱主題),輸入
/resnet-50/predictions
。 -
INDECT其他組態,為MQTT 承載顯示,選擇將承載顯示為字串。
-
-
選擇 Subscribe (訂閱)。
-
選擇發布到主題輸入
/resnet-50/test
作為主題名稱,然後選擇發布。 -
如果測試成功,已發佈的訊息會導致 Raspberry Pi 相機擷取映像。來自 Lambda 函數的訊息會出現在頁面底部。此訊息包含映像的預測結果,其使用的格式為:預測的類別名稱、機率,以及尖峰記憶體使用量。
設定 Intel Atom
若要在 Intel Atom 裝置上執行本教學課程,您必須提供來源映像、設定 Lambda 函數,以及新增其他本機裝置資源。若要使用 GPU 進行推論,請確定裝置上已安裝下列軟體:
-
OpenCL 1.0 版或更高版本
-
Python 3.7 和 pip
-
下載 Lambda 函數的靜態 PNG 或 JPG 映像,以用於影像分類。此範例最適合與小型映像檔案一同運作。
儲存含有
inference.py
檔案 (或於該目錄的子目錄中)目錄中的映像檔案。這是您在上傳的 Lambda 函數部署套件步驟 3:建立推論 Lambda 函數。注意
如果您使用 AWS DeepLens,則可以使用內建攝影機或掛載自己的攝影機來對所拍攝的影像執行推論,而不是對靜態影像。不過,強烈建議您先從靜態影像開始。
如果您使用攝影機,請確定
awscam
APT 套件已安裝並保持最新狀態。如需詳細資訊,請參閱「」更新您的AWS DeepLens裝置中的AWS DeepLens開發人員指南。 -
編輯 Lambda 函數的組態。請遵循 步驟 4:Lambda 函數至 Greengrass 群組 中的程序。
注意
建議您在不使用容器化的情況下執行 Lambda 函數,除非您的商業案例需要。這有助於啟用對設備 GPU 和攝像頭的訪問,而無需配置設備資源。如果您在沒有容器化的情況下執行,您也必須授與 root 存取權AWS IoT GreengrassLambda 函數。
-
若要在不使用容器化的情況下執行:
-
適用於系統使用者和群組,選擇
Another user ID/group ID
。適用於系統使用者 ID輸入0
。適用於系統群組 ID輸入0
。這允許您的 Lambda 函數以 root 身份執行。如需以 root 身份執行的詳細資訊,請參閱設定群組中 Lambda 函數的預設存取身分。
提示
您還必須更新
config.json
檔案,以授予存取您的 Lambda 函數的 Roambda 函數。相關程序請參閱以根身份運行 Lambda 函數。 -
適用於Lambda 函數容器化,選擇沒有容器。
如需不含容器化執行的詳細資訊,請參閱選擇 Lambda 函數容器化時的考量事項。
-
將 Timeout (逾時) 值增加到 2 分鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。
-
適用於Pinned,選擇True。
-
INDECT其他參數,為Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用。
-
-
要在容器化模式下運行:
注意
除非您的商業案例需要,否則建議您在容器化模式下執行。
-
將 Memory limit (記憶體限制) 值增加到 3000 MB。
-
將 Timeout (逾時) 值增加到 2 分鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。
-
適用於Pinned,選擇True。
-
INDECT其他參數,為Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用。
-
-
-
將 Neo 最佳化模型資源新增至群組。上傳您在 步驟 3:建立推論 Lambda 函數 中解壓縮的範例套件
resnet50
目錄中的模型資源。此目錄中包含預先編譯的模型成品,其適用於利用 Resnet-50 訓練的映像分類模型。遵循步驟 5:新增 SageMaker Greengrass 群組的 Neo 最佳化模型資源中的程序,但有下列更新。-
將
resnet50
目錄內的檔案壓縮成名為resnet50.zip
的檔案。 -
在 Create a machine learning resource (建立機器學習資源) 頁面上,於 Resource name (資源名稱) 輸入
resnet50_model
。 -
上傳
resnet50.zip
檔案。
-
-
如果在容器化模式下運行」中,新增必要的本機裝置資源,以授予裝置 GPU 存取權。
注意
如果您在非容器化模式下運行,AWS IoT Greengrass無需設定裝置資源即可存取裝置 GPU。
-
在群組組組組組組組組組組組組組組態頁面資源標籤。
-
在 中本機資源區段中,選擇新增本機資源。
-
定義資源:
-
針對 Resource name (資源名稱),輸入
renderD128
。 -
於資源類型選擇裝置。
-
適用於本機裝置路徑輸入
/dev/dri/renderD128
。 -
適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組自動新增檔案系統許可。
-
-
設定 NVIDIA Jetson TX2
若要在 NVIDIA Jetson TX2 上執行本教學課程,請提供來源映像、設定 Lambda 函數,以及新增更多本機裝置資源。
-
確保您的 Jetson 設備已設定好,以便您可以安裝 AWS IoT Greengrass 核心軟件並使用 GPU 進行推論。如需如何設定裝置的詳細資訊,請參閱設定其他裝置。若要使用 GPU 在 NVIDIA Jetson TX2 上進行推論,則在使用 Jetpack 4.3 裝載您的映像時,您必須在裝置上安裝 CUDA 10.0 和 cuDNN 7.0。
-
下載 Lambda 函數的靜態 PNG 或 JPG 映像,以用於影像分類。此範例最適合與小型映像檔案一同運作。
在含有
inference.py
檔案的目錄中儲存您的映像檔案。您也可以將它們儲存在此目錄的子目錄中。此目錄是您在傳傳傳傳傳傳傳傳傳的 Lambda 函數上傳的 Lambda 函數。步驟 3:建立推論 Lambda 函數。注意
您可以改為選擇在 Jetson 電路板檢測攝影機來擷取來源影像。不過,強烈建議您先從靜態影像開始。
-
編輯 Lambda 函數的組態。請遵循 步驟 4:Lambda 函數至 Greengrass 群組 中的程序。
注意
建議您在不使用容器化的情況下執行 Lambda 函數,除非您的商業案例需要。這有助於啟用對設備 GPU 和攝像頭的訪問,而無需配置設備資源。如果您在沒有容器化的情況下執行,您也必須授與 root 存取權AWS IoT GreengrassLambda 函數。
-
若要在不使用容器化的情況下執行:
-
適用於Run as (執行身分),選擇
Another user ID/group ID
。適用於UID輸入0
。適用於GUID輸入0
。這允許您的 Lambda 函數以 root 身份執行。如需以 root 身份執行的詳細資訊,請參閱設定群組中 Lambda 函數的預設存取身分。
提示
您還必須更新
config.json
檔案,以授予存取您的 Lambda 函數的 Roambda 函數。相關程序請參閱以根身份運行 Lambda 函數。 -
適用於Lambda 函數容器化,選擇沒有容器。
如需不含容器化執行的詳細資訊,請參閱選擇 Lambda 函數容器化時的考量事項。
-
將 Timeout (逾時) 值增加到 5 分鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。
-
適用於Pinned,選擇True。
-
INDECT其他參數,為Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用。
-
-
要在容器化模式下運行:
注意
除非您的商業案例需要,否則建議您在容器化模式下執行。
-
增加 Memory limit (記憶體限制) 值。若要在 GPU 模式下使用提供的模型,請至少使用 2000 MB。
-
將 Timeout (逾時) 值增加到 5 分鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。
-
適用於Pinned,選擇True。
-
INDECT其他參數,為Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用。
-
-
-
將 Neo 最佳化模型資源新增至群組。上傳您在 步驟 3:建立推論 Lambda 函數 中解壓縮的範例套件
resnet18
目錄中的模型資源。此目錄中包含預先編譯的模型成品,其適用於利用 Resnet-18 訓練的映像分類模型。遵循步驟 5:新增 SageMaker Greengrass 群組的 Neo 最佳化模型資源中的程序,但有下列更新。-
將
resnet18
目錄內的檔案壓縮成名為resnet18.zip
的檔案。 -
在 Create a machine learning resource (建立機器學習資源) 頁面上,於 Resource name (資源名稱) 輸入
resnet18_model
。 -
上傳
resnet18.zip
檔案。
-
-
如果在容器化模式下運行」中,新增必要的本機裝置資源,以授予裝置 GPU 存取權。
注意
如果您在非容器化模式下運行,AWS IoT Greengrass無需設定裝置資源即可存取裝置 GPU。
-
在群組組組組組組組組組組組組組組態頁面資源標籤。
-
在 中本機資源區段中,選擇新增本機資源。
-
定義每個資源:
-
針對 Resource name (資源名稱) 和 Device path (裝置路徑),請使用下表中的值。為表格中的每一列建立一個裝置資源。
-
於資源類型選擇裝置。
-
適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組自動新增檔案系統許可。
名稱
裝置路徑
nvhost-ctrl
/dev/nvhost-ctrl
nvhost-gpu
/dev/nvhost-gpu
nvhost-ctrl-gpu
/dev/dev/dev/devnvhost-ctrl-gpu
nvhost-dbg-gpu
/dev/dev/dev/devnvhost-dbg-gpu
nvhost-prof-gpu
/dev/dev/dev/devnvhost-prof-gpu
nvmap
/dev/nvmap
nvhost-vic
/dev/nvhost-vic
tegra_dc_ctrl
/dev/tegra_dc_ctrl
-
-
-
如果在容器化模式下運行,新增下列本機磁碟區資源以授予裝置攝影機的存取權。請遵循 步驟 5:新增 SageMaker Greengrass 群組的 Neo 最佳化模型資源 中的程序。
注意
如果您在非容器化模式下運行,AWS IoT Greengrass無需配置設備資源即可訪問設備攝像頭。
-
針對 Resource type (資源類型),選擇 Volume (磁碟區)。
-
適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組自動新增檔案系統許可。
名稱
來源路徑
目的地路徑
shm
/dev/shm
/dev/shm
tmp
/tmp
/tmp
-
-
更新您的群組訂閱以使用正確的目錄。遵循步驟 7:將訂閱新增到 Greengrass 群組中的程序,但有下列更新。
-
對於您的第一個主題篩選,請輸入
/resnet-18/predictions
。 -
對於您的第二個主題篩選,請輸入
/resnet-18/test
。
-
-
更新您的測試訂閱以使用正確的目錄。遵循測試推論範例中的程序,但有下列更新。
-
適用於訂閱,選擇訂閱主題。針對 Subscription topic (訂閱主題),輸入
/resnet-18/predictions
。 -
在
/resnet-18/predictions
頁面上,指定要發佈至其中的/resnet-18/test
主題。
-
AWS IoT Greengrass 機器學習推論故障診斷
如果測試不成功,您可以嘗試以下故障診斷的步驟。請在您的 Raspberry Pi 終端機執行此命令。
檢查錯誤日誌
-
切換到根使用者和導覽至
log
目錄。存取 AWS IoT Greengrass 日誌需要根許可。sudo su cd /greengrass/ggc/var/log
-
Check
runtime.log
任何錯誤。cat system/runtime.log | grep 'ERROR'
您也可以查看使用者定義 Lambda 函數日誌是否有任何錯誤:
cat user/
your-region
/your-account-id
/lambda-function-name
.log | grep 'ERROR'如需詳細資訊,請參閱 日誌故障診斷。
驗證 Lambda 函數已成功部署 Lambda 函數
-
列出已部署的 Lambda 的內容
/lambda
目錄。先執行命令,再取代預留位置值。cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:
region
:account
:function:function-name
:function-version
ls -la -
確認目錄包含與
optimizedImageClassification.zip
您上傳的部署套件步驟 3:建立推論 Lambda 函數。確保
.py
檔案和相依性皆位於目錄的根中。
驗證是否已成功部署推論模型
-
尋找 Lambda 執行時間過程的處理識別碼 (PID):
ps aux | grep
lambda-function-name
PID 會在輸出顯示於 Lambda 執行時間過程的第二個欄位中。
-
進入 Lambda 執行時間命名空間。執行命令前,務必先取代預留位置
pid
值。注意
此目錄及其內容皆在 Lambda 執行時間命名空間中,所以不顯示在一般 Linux 命名空間中。
sudo nsenter -t
pid
-m /bin/bash -
列出您為機器學習資源所指定的本機目錄內容。
注意
如果您的 ML 資源路徑是
ml_model
以外的路徑,,則您必須在這裡取代該路徑。cd /ml_model ls -ls
您會看到以下檔案:
56 -rw-r--r-- 1 ggc_user ggc_group 56703 Oct 29 20:07 model.json 196152 -rw-r--r-- 1 ggc_user ggc_group 200855043 Oct 29 20:08 model.params 256 -rw-r--r-- 1 ggc_user ggc_group 261848 Oct 29 20:07 model.so 32 -rw-r--r-- 1 ggc_user ggc_group 30564 Oct 29 20:08 synset.txt
Lambda 函數找不到/dev/dri/renderD128
如果 OpenCL 無法連接線到所需的 GPU 裝置,可能會發生這種情況。您必須為 Lambda 函數建立必要裝置的裝置資源。
後續步驟
接著,探索其他最佳化的模型。如需詳細資訊,請參閱 SageMaker Neo 文件。