如何設定使用 AWS 管理主控台機器學習推論 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

如何設定使用 AWS 管理主控台機器學習推論

若要遵循本教學課程中的步驟,您必須使用 AWS IoT Greengrass 核心 v1.10 or later。

您可以在 Greengrass 核心裝置本機上使用本機產生的資料來執行機器學習 (ML) 推論。如需要求和限制的詳細資訊,請參閱 執行機器學習推論

本指南說明如何使用 AWS 管理主控台 設定 Greengrass 群組直接在相機執行 Lambda 推論應用程式辨識映像,同時並不需要傳送資料至雲端。推論應用程式會在 Raspberry Pi 上存取攝影機模組,並使用開放原始碼 SqueezeNet 模型執行推論。

本教學課程所述以下高階執行步驟:

Prerequisites

為完成此教學課程您需要:

注意

本教學課程使用 Raspberry Pi 進行,但 AWS IoT Greengrass 支援其他平台,例如 Intel AtomNVIDIA Jetson TX2。在 Jetson TX2 的範例中,您可以使用靜態影像,而非相機的串流影像。如果使用 Jetson TX2 範例,您可能需要安裝 Python 3.6 而不是 Python 3.7。如需如何設定裝置以便安裝 AWS IoT Greengrass Core 軟體的相關資訊,請參閱 設定其他裝置

對於 AWS IoT Greengrass 不支援的第三方平台,您必須在非容器化模式中執行 Lambda 函數。若要在非容器化模式中執行,您必須以根身分執行 Lambda 函數。如需詳細資訊,請參閱 選擇 Lambda 函數容器化時的注意事項在群組中設定 Lambda 函數的預設存取身分

步驟 1: 設定 Raspberry Pi

在此步驟中,請安裝 Raspbian 作業系統的更新、安裝相機模組軟體和 Python 相依性,以及啟用相機界面。

在您的 Raspberry Pi 終端機執行以下命令。

  1. 安裝 Raspbian 的更新。

    sudo apt-get update sudo apt-get dist-upgrade
  2. 安裝攝影機模組的 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.7python3 版本,以避免相依性錯誤。

  3. 重新啟動 Raspberry Pi。

    sudo reboot
  4. 請開啟 Raspberry Pi 組態工具。

    sudo raspi-config
  5. 請使用箭頭鍵開啟 Interfacing Options (連接選項) 並啟用攝影機界面。如果出現提示,請允許重新啟動裝置。

  6. 請使用以下命令測試攝影機建立。

    raspistill -v -o test.jpg

    這會在 Raspberry Pi 上開啟預覽視窗、將名為 test.jpg 的圖片儲存至現行目錄,並在 Raspberry Pi 終端機中顯示相機的相關資訊。

步驟 2: 安裝 MXNet 架構

在此步驟中,請於您的 Raspberry Pi 上安裝 MXNet 程式庫。

  1. 遠端登入到 Raspberry Pi。

    ssh pi@your-device-ip-address
  2. 打開 MXNet 文件,打開 安裝 MXNet,並依照指示在裝置上安裝 MXNet。

    注意

    我們建議您安裝 1.5.0 版,並從本教學課程的來源建置 MXNet,以避免裝置衝突。

  3. 安裝 MXNet 之後,驗證下列組態:

    • 請確定 ggc_user 系統帳號可以使用 MXNet 架構。

      sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
    • 確定已安裝 NumPy。

      sudo -u ggc_user bash -c 'python3 -c "import numpy"'

步驟 3: 建立 MXNet 模型套件

在此步驟中,請建立模型套件,其中包含要上傳至 MXNet 的範例預先訓練 Amazon S3 模型。AWS IoT Greengrass 可以使用 Amazon S3 中的模型套件,但前提是您使用 tar.gz 或 zip 格式。

  1. 在您的電腦上,從 MXNet 下載 Raspberry Pi 的 機器學習範例 範例。

  2. 解壓縮所下載的 mxnet-py3-armv7l.tar.gz 檔案。

  3. 請導覽至 squeezenet 目錄。

    cd path-to-downloaded-sample/mxnet-py3-armv7l/models/squeezenet

    此目錄中的 squeezenet.zip 檔案是您的模型套件。它包含影像分類模型的 SqueezeNet 開放原始碼模型成品。之後,將此模型套件上傳至 Amazon S3。

步驟 4: 建立並發佈 Lambda 函數

在此步驟中,建立 Lambda 函數部署套件和 Lambda 函數。然後,發佈函數版本和建立別名。

首先,建立 Lambda 函數部署套件。

  1. 在您的電腦上,瀏覽至您在 步驟 3: 建立 MXNet 模型套件 中解壓縮的範例套件內的 examples 目錄。

    cd path-to-downloaded-sample/mxnet-py3-armv7l/examples

    examples 目錄包含函數程式碼和相依性。

    • greengrassObjectClassification.py 是本教學課程中使用的推論程式碼。您可以使用此程式碼作為範本來建立您自己的推論函數。

    • greengrasssdk 是 1.5.0 版的 適用於 Python 的 AWS IoT Greengrass Core SDK。

      注意

      如果有新版本可用,您可以下載並升級部署套件中的 SDK 版本。如需詳細資訊,請參閱 適用於 Python 的 AWS IoT Greengrass Core SDK 於 GitHub.

  2. examples 目標壓縮到名為 greengrassObjectClassification.zip 的檔案。 這是您的部署套件。

    zip -r greengrassObjectClassification.zip .
    注意

    確保 .py 檔案和相依性皆位於目錄的根中。

     

    接下來,建立 Lambda 函數。

  3. 在 AWS IoT 主控台 的導覽窗格中,選擇 Greengrass,然後選擇 Groups (群組)

    
            的導覽窗格反白顯示群組。AWS IoT 主控台
  4. 請選擇您想要新增 Lambda 函數的 Greengrass 群組。

  5. 在群組組態頁面上,選擇 Lambdas,然後選擇 Add Lambda.

    
            此群組頁面反白顯示 Lambda 和新增的 Lambdas。
  6. Add a Lambda to your Greengrass Group (新增 Lambda 到 Greengrass 群組) 頁面上,選擇 Create new Lambda. 這會打開 AWS Lambda 主控台。

    
            [新增 Lambda 至 Greengrass 群組] 頁面反白顯示 [建立新的 Lambda]。
  7. 選擇 Author from scratch 並使用下列值來建立您的函數:

    • 針對 Function name (函數名稱) 輸入 greengrassObjectClassification

    • 針對 Runtime (執行時間),選擇 Python 3.7

    用於 Permissions (許可) 時,請保留預設設定。這樣便會建立負責授予 Lambda 許可的執行角色。這個角色不會提供 AWS IoT Greengrass 使用。

  8. 選擇 Create function.

    
            [建立函數] 頁面反白顯示 [建立函數]。

     

    現在,上傳您的 Lambda 部署套件和註冊處理常式。

  9. Configuration (組態) 索引標籤上,對於 Function code (函數程式碼)greengrassObjectClassification 函數,使用下列數值:

    • 針對 Code entry type (程式碼項目類型),選擇 Upload a .zip file (上傳 .zip 檔案)

    • 針對 Runtime (執行時間),選擇 Python 3.7

    • 對於 Handler (處理常式),輸入 greengrassObjectClassification.function_handler

  10. 選擇 Upload.

    
            [函數程式碼] 章節反白顯示 [上傳]。
  11. 選擇您的 greengrassObjectClassification.zip 部署套件。

  12. 選擇 Save (儲存)。

     

    接著,發佈您 Lambda 函數的第一個版本。然後,建立版本的別名

    注意

    Greengrass 群組可根據別名 (建議) 或版本來引用 Lambda 函數。使用別名可讓管理程式碼更新更為容易,因為您不必在函式程式碼更新時變更訂閱表或群組定義。反之,您只需要將別名指向新的函式版本即可。

  13. 請從操作功能表中選擇發行新版本

    
            從功能表中選擇發行新版本的選項
  14. 針對 Version description (版本描述),輸入 First version,然後選擇 Publish.

  15. : 1greengrassObjectClassification 組態頁面的 Actions (動作) 功能表中,選擇 Create alias (建立鋸齒)

    
            從操作功能表中選擇建立別名的選項。
  16. 建立警示頁面上使用下列值:

    • 對於 Name (名稱),輸入 mlTest

    • 針對 Version (版本) 輸入 1

    注意

    AWS IoT Greengrass 不支援 $LATEST 版本的 Lambda 別名。

  17. 選擇 Create (建立)

    
            [建立新的函數] 頁面反白顯示 [建立]。

    現在,將 Lambda 函數新增至您的 Greengrass 群組。

步驟 5: 將 Lambda 函數新增至 Greengrass 群組

在此步驟中,新增 Lambda 函數到群組,然後設定其生命週期和環境變數。

首先,將 Lambda 函數新增至您的 Greengrass 群組。

  1. 請在 AWS IoT 主控台 開啟群組組態頁面。

  2. 選擇 Lambdas,然後選擇 Add Lambda.

    
            此群組頁面反白顯示 Lambda 和新增的 Lambdas。
  3. Add a Lambda to your Greengrass Group (新增 Lambda 到 Greengrass 群組) 頁面上,選擇 Use existing Lambda.

    
            [新增 Lambda] 至 [您的 Greengrass 群組] 頁面反白顯示 [使用現有的 Lambda]。
  4. 選擇 greengrassObjectClassification,然後選擇 Next.

  5. Select a Lambda version (選取 Lambda 版本) 頁面上,選擇 Alias:mlTest,然後選擇 Finish.

     

    接著,設定生命週期和環境變數的 Lambda 函數。

  6. Lambdas 頁面上,選擇 greengrassObjectClassification 函數。Lambda

    
            Lambdas 頁面反白顯示 greengrassObjectClassification Lambda 函數。
  7. greengrassObjectClassification 組態頁面上,選擇 Edit (編輯)

  8. Group-specific Lambda configuration (群組專屬 Lambda 組態) 頁面上,進行下列更新。

    注意

    除非商業案例需要,否則建議您執行 Lambda 函數,無需容器化。這有助於存取您的裝置 GPU 和攝影機,而無需設定裝置資源。如果您以無容器方式執行,則還必須授予 AWS IoT Greengrass Lambda 函數的根存取權。

    1. 不使用容器化執行 :

      • 針對 Run as (執行身分),選擇 Another user ID/group ID。 針對 UID,輸入 0。 針對 GUID,輸入 0

        這可讓您的 Lambda 函數以根身分執行。如需以 root 身分執行的詳細資訊,請前往在群組中設定 Lambda 函數的預設存取身分

        提示

        您還必須更新 config.json 檔案,以授予 Lambda 函數的根存取權。如需程序,請參見以 Root 身分執行 Lambda 函數

      • 針對 Containerization (容器化),選擇 No container (無容器)

        如需執行而不容器化的詳細資訊,請前往 選擇 Lambda 函數容器化時的注意事項

      • 針對 Timeout (逾時),輸入 10 seconds

      • 針對 Lambda lifecycle (Lambda 生命週期) - 選擇 Make this function long-lived and keep it running indefinitely (將此函數設定為長時間存留且無限期持續執行)

        如需更多詳細資訊,請參閱「Greengrass Lambda 函數的生命週期組態」。

      • 針對 Read access to /sys directory (對 /sys 目錄的讀取存取),選擇 Enable (啟用)

    2. 改為在容器化模式中執行:

      注意

      除非業務案例需要,否則不建議在容器化模式中執行。

      • 針對 Run as (執行身分),選擇 Use group default (使用群組預設值)

      • 針對 Containerization (容器化),選擇 Use group default (使用群組預設值)

      • 針對 Memory limit (記憶體限制),輸入 96 MB

      • 針對 Timeout (逾時),輸入 10 seconds

      • 針對 Lambda lifecycle (Lambda 生命週期) - 選擇 Make this function long-lived and keep it running indefinitely (將此函數設定為長時間存留且無限期持續執行)

        如需更多詳細資訊,請參閱「Greengrass Lambda 函數的生命週期組態」。

      • 針對 Read access to /sys directory (對 /sys 目錄的讀取存取),選擇 Enable (啟用)

  9. Environment variables (環境變數) 下,建立索引鍵值對。與 Raspberry Pi 上 MXNet 模型互動的函數需要索引鍵/值組。

    對於該索引鍵,請使用 MXNET_ENGINE_TYPE。對於值,請使用 NaiveEngine。

    注意

    在您自己的使用者定義 Lambda 函數,您可以選擇性地在您的函數程式碼中設定環境變數。

  10. 保留所有其他屬性的預設值,並選擇 Update (更新)

步驟 6: 新增資源至 Greengrass 群組

在此步驟中,建立攝影機模組和 ML 推論模型的資源,並讓資源與 Lambda 函數建立隸屬關係。這使得 Lambda 函數可在核心裝置上存取資源。

注意

如果您在非容器化模式中執行 AWS IoT Greengrass, 可以存取您的裝置 GPU 和攝影機,而不需要設定這些裝置資源。

首先,為攝影機資源建立兩個本機裝置:一個使用共用記憶體,另一個使用裝置界面。如需本機資源存取的詳細資訊,請參閱使用 Lambda 函數和連接器存取本機資源

  1. 在群組設定頁面上,選擇 Resources (資源)

    
            此群組組態頁面反白顯示 [資源]。
  2. Local (本機) 索引標籤上,選擇 Add a local resource (新增本機資源)

  3. Create a local resource (建立本機資源) 頁面上,使用下列值:

    • 針對 Resource name (資源名稱),輸入 videoCoreSharedMemory

    • 針對 Resource type (資源類型),選擇 Device (裝置)

    • 針對 Device path (裝置路徑),輸入 /dev/vcsm

      裝置路徑為裝置資源的本機絕對路徑。此路徑只能參閱 /dev 底下的字元裝置或區塊型儲存設備。

    • 群組擁有者檔案存取許可,選擇將擁有資源的 Linux 群組自動新增至作業系統群組許可

      群組擁有者檔案存取權限選項讓您授與其他檔案可存取 Lambda 程序的許可。如需更多詳細資訊,請參閱「群組擁有者檔案存取許可」。

    
            [建立本機資源] 頁面提供已編輯資源的屬性。
  4. 請在 Lambda 函數聯合底下選擇選取

  5. 選擇 greengrassObjectClassification,再選擇 Read and write access (讀取和寫入存取),然後選擇 Done (完成)

    
            Lambda 函數聯合屬性反白顯示 [Done (完成)]。

    接著,請您新增本機裝置資源給攝影機界面的資源。

  6. 選擇 Add another resource (新增另一個資源)

  7. Create a local resource (建立本機資源) 頁面上,使用下列值:

    • 針對 Resource name (資源名稱),輸入 videoCoreInterface

    • 針對 Resource type (資源類型),選擇 Device (裝置)

    • 針對 Device path (裝置路徑),輸入 /dev/vchiq

    • 群組擁有者檔案存取許可,選擇將擁有資源的 Linux 群組自動新增至作業系統群組許可

    
            [建立本機資源] 頁面提供已編輯資源的屬性。
  8. 請在 Lambda 函數聯合底下選擇選取

  9. 選擇 greengrassObjectClassification、讀取和寫入存取,然後選擇 Done (完成)

  10. 請在頁面底部選擇儲存

 

現在,請將推論模型做為機器學習資源。此步驟也會上傳 squeezenet.zip 模型套件至 Amazon S3。

  1. 在群組的 Resources (資源) 頁面上,選擇 Machine Learning (機器學習),接著選擇 Add a machine learning resource (新增機器學習資源)

  2. Create a machine learning resource (建立機器學習資源) 頁面上,於 Resource name (資源名稱) 輸入 squeezenet_model

    
            新增機器學習模型頁面和已更新的屬性。
  3. 針對 Model source (模型來源),選擇 Upload a model in S3 (在 S3 中上傳模型)

  4. Model from S3 (來自 S3 的模型) 下,選擇 Select (選取)

  5. 選擇 Upload a model (上傳模型)。這會在 Amazon S3 主控台開啟新標籤。

  6. 在 Amazon S3 主控台索引標籤中,將 squeezenet.zip 檔案上傳至 Amazon S3 儲存貯體。如需詳細資訊,請查看 如何將檔案與資料夾上傳至 S3 儲存貯體? 中的 。。Amazon Simple Storage Service 主控台使用者指南

    注意

    若要讓儲存貯體可供存取,y我們的儲存貯體名稱必須包含字串 。greengrass 選擇唯一名稱 (例如 greengrass-bucket-user-id-epoch-time)。請勿在儲存貯體名稱中使用句號 (.)。

  7. 在 AWS IoT Greengrass 主控台標籤中,找到並選擇您的 Amazon S3 儲存貯體。尋找您已上傳的 squeezenet.zip 檔案,然後選擇 Select (選取)。您可能需要選擇 Refresh (重新整理) 以更新可用儲存貯體和檔案的清單。

  8. Local path (本機路徑) 輸入 /greengrass-machine-learning/mxnet/squeezenet

    此為 Lambda 執行階段命名空間的本機模型目的地。當您部署群組、 AWS IoT Greengrass 擷取來源模型封包,然後再擷取其內容到指定的目錄中。本教學課程範例的 Lambda 函數已設為使用此路徑 (在 model_path 變數)。

  9. Identify resource owner and set access permissions (識別資源擁有者並設定存取權限) 下,選擇 No OS group (無作業系統群組)

  10. 請在 Lambda 函數聯合底下選擇選取

  11. 選擇 greengrassObjectClassification,再選擇 Read-only access (唯讀存取),然後選擇 Done (完成)

  12. 選擇 Save (儲存)。

使用 SageMaker 訓練模型

此教學課程中使用的模型可以於 Amazon S3 存取,但您也可以輕鬆地使用 SageMaker 模型。AWS IoT Greengrass 主控台內建 SageMaker 整合,因此您不必手動將這些模型上傳至 Amazon S3。如需使用 SageMaker 模型的要求與限制之詳細資訊,請參閱支援的模型來源

使用 SageMaker 模型:

  • 針對 Model source (模型來源),選擇 Use an existing SageMaker model (使用現有模型),然後選擇模型的培訓任務名稱。

  • 針對 Local path (本機路徑),輸入 Lambda 函數尋找模型的目錄路徑。

步驟 7: 新增描述到 Greengrass 群組

在此步驟中,新增訂閱到群組。此訂閱透過發佈到 MQTT 主題讓 Lambda 函數傳送預測結果給 AWS IoT。

  1. 在群組組態頁面上,選擇 Subscriptions (子指令碼),然後選擇 Add Subscription.

    
            此群組頁面反白顯示 [訂閱] 和 [新增訂閱]。
  2. Select your source and target (選擇您的來源和目標) 頁面設定來源和目標,如下所示:

    1. Select a source (選取來源) 中,選擇 Lambdas,然後選擇 greengrassObjectClassification。

    2. Select a target (選取目標) 中,選擇 Services (服務),然後選擇 Cloud (雲端)IoT。

    3. 選擇 Next.

      
                [選擇您的來源和目標] 頁面反白顯示 [Next (下一個)]。
  3. Filter your data with a topic (使用主題篩選您的資料) 頁面上,於 Topic filter (主題篩選條件) 輸入 hello/world,然後選擇 Next (下一步)

    
            [Next (下一步)] 反白顯示的 [使用主題篩選您的資料] 頁面。
  4. 選擇 Finish.

步驟 8: 部署 Greengrass 群組

在此步驟中,將群組定義的目前版本部署到 Greengrass 核心裝置。定義包含您新增的 Lambda 函數、資源和訂閱組態。

  1. 請確定正在執行 AWS IoT Greengrass 核心。如果需要,請在您的 Raspberry Pi 終端機執行以下命令。

    1. 檢查精靈是否有在運作:

      ps aux | grep -E 'greengrass.*daemon'

      若輸出中包含 /greengrass/ggc/packages/1.11.0/bin/daemon 適用的 root 項目,則表精靈正在運作。

      注意

      路徑的版本取決於安裝在您的核心裝置中的 AWS IoT Greengrass 核心軟體版本。

    2. 啟動精靈:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 在群組組態頁面選擇 Deployment (部署),從操作功能表選擇 Deploy (部署)

    
            此群組頁面反白顯示 [Deployment (部署)] 和 [Deploy (部署)]。
  3. Configure how devices discover your core (設定裝置如何探索您的核心) 頁面上,選擇 Automatic detection.

    這可讓裝置自動取得核心的連接資訊,例如 IP 位址、DNS、連接埠編號。建議使用自動偵測,但是 AWS IoT Greengrass 也支援手動指定端點。只會在第一次部署群組時收到復原方法的提示。

    
            [設定裝置探索您的核心的方式] 頁面反白顯示 [自動偵測]。
    注意

    出現提示時,請授予建立 Greengrass 服務角色的許可,並在目前 AWS 區域中建立該角色與 AWS 帳戶的關聯。此角色允許 AWS IoT Greengrass 在 AWS 服務中存取您的資源。

    部署頁面會顯示部署時間戳記、版本 ID 和狀態。部署完成時,針對部署顯示的狀態應為 Successfully completed (成功完成)

    如需部署的詳細資訊,請參閱 將 AWS IoT Greengrass 群組部署至 AWS IoT Greengrass 核心。如需故障診斷協助,請參閱疑難排解 AWS IoT Greengrass 的問題

步驟 9: 測試推論應用程式

現在您可以驗證部署是否已正確設定。若要測試,請訂閱 hello/world 主題並檢視 Lambda 函數所發佈的預測結果。

注意

如果 Raspberry Pi 附加監控功能,即時攝影機反饋會顯示在預覽視窗中。

  1. 在 AWS IoT 主控台 中,選擇 Test (測試)

    
            中的導覽窗格反白顯示測試。AWS IoT 主控台
  2. 訂閱使用以下值:

    • 對於訂閱主題,請使用 hello/world。

    • 針對 MQTT payload display (MQTT 承載顯示),選擇 Display payloads as strings (將承載顯示為字串)

  3. 選擇 Subscribe to topic.

    如果測試成功,Lambda 函數的訊息會顯示於頁面底部。每個訊息含有搜尋映像的前 5 個預測結果,使用格式:成功率、預估類別 ID,和對應的類別名稱。

    
            訂閱頁面顯示測試結果的訊息資料。

AWS IoT Greengrass 機器學習推論故障診斷

如果測試不成功,您可以嘗試以下故障診斷的步驟。請在您的 Raspberry Pi 終端機執行此命令。

檢查錯誤日誌

  1. 切換到根使用者和導覽至 log 目錄。存取 AWS IoT Greengrass 日誌需要根許可。

    sudo su cd /greengrass/ggc/var/log
  2. system 目錄中,勾選 runtime.logpython_runtime.log

    user/region/account-id 目錄中,勾選 greengrassObjectClassification.log

    如需更多詳細資訊,請參閱「日誌故障診斷」。

Unpackinguntime.log 中的 r 錯誤

runtime.log 包含類似以下的錯誤,請確認您的 tar.gz 來源模型套件有一個父目錄。

Greengrass deployment error: unable to download the artifact model-arn: Error while processing. Error while unpacking the file from /tmp/greengrass/artifacts/model-arn/path to /greengrass/ggc/deployment/path/model-arn, error: open /greengrass/ggc/deployment/path/model-arn/squeezenet/squeezenet_v1.1-0000.params: no such file or directory

如果您的套件不包含包含模型檔案的父資料夾,請使用下列命令來重新封裝模型:

tar -zcvf model.tar.gz ./model

例如:

─$ tar -zcvf test.tar.gz ./test ./test ./test/some.file ./test/some.file2 ./test/some.file3
注意

此命令結尾請勿含有 /*

 

驗證 Lambda 函數已成功部署

  1. 列出 /lambda 目錄中已部署的 Lambda 內容。先執行命令,再取代預留位置值。

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. 確認目錄包含與您在步驟 4: 建立並發佈 Lambda 函數上傳之 greengrassObjectClassification.zip 部署套件相同的內容。

    確保 .py 檔案和相依性皆位於目錄的根中。

 

驗證推論模型已成功部署

  1. 尋找 Lambda 函數執行時間過程的處理識別碼 (PID):

    ps aux | grep 'lambda-function-name*'

    PID 會在輸出顯示於 Lambda 執行時間過程的第二個欄位中。

  2. 請進入 Lambda 執行時間命名空間。請務必取代預留位置 pid 值,再執行命令。

    注意

    此目錄與其內容皆在 Lambda 執行階段命名空間中,所以不顯示在一般 Linux 命名空間中。

    sudo nsenter -t pid -m /bin/bash
  3. 列出您為機器學習資源所指定的本機目錄內容。

    cd /greengrass-machine-learning/mxnet/squeezenet/ ls -ls

    您會看到以下檔案:

    32 -rw-r--r-- 1 ggc_user ggc_group   31675 Nov 18 15:19 synset.txt 32 -rw-r--r-- 1 ggc_user ggc_group   28707 Nov 18 15:19 squeezenet_v1.1-symbol.json 4832 -rw-r--r-- 1 ggc_user ggc_group 4945062 Nov 18 15:19 squeezenet_v1.1-0000.params

後續步驟

接著,請探索其他推論應用程式。AWS IoT Greengrass 會提供其他可用於本機推論的 Lambda 函數。您可以在 步驟 2: 安裝 MXNet 架構 的預先編譯程式庫資料中夾找到範例套件。

設定 Intel Atom

若要在 Intel Atom 裝置上執行本教學課程,您必須提供來源映像、設定 Lambda 函數,以及新增其他本機裝置資源。若要使用 GPU 進行推論,請確定裝置上已安裝下列軟體:

  • OpenCL 1.0 版或更新版本

  • Python 3.7 和 pip

    注意

    如果您的裝置是用 Python 3.6 預先建置的,則可以改為建立 Python 3.7 的符號連結。如需更多詳細資訊,請參閱「步驟 2」。

  • NumPy

  • OpenCV Wheels 上的

  1. 下載 Lambda 函數的靜態 PNG 或 JPG 映像,以用於影像分類。此範例最適合與小型映像檔案一同運作。

    儲存含有 greengrassObjectClassification.py 檔案 (或於該目錄的子目錄中)目錄中的映像檔案。這是您在步驟 4: 建立並發佈 Lambda 函數上傳的 Lambda 函數部署套件。

    注意

    如果您使用 AWS DeepLens,則可以使用內建攝影機或掛載自己的攝影機來對所拍攝的影像執行推論,而不是對靜態影像。不過,強烈建議您先從靜態影像開始。

    如果您使用攝影機,請確定 awscam APT 套件已安裝並保持最新狀態。如需詳細資訊,請前往《 開發人員指南DeepLens》中的更新您的 AWS AWS DeepLens 裝置

  2. 如果您不是使用 Python 3.7,請務必建立從 Python 3.x 到 Python 3.7 的符號連結。這會將您的裝置設定為使用 Python 3 與 AWS IoT Greengrass。執行以下命令來找到您的 Python 安裝:

    which python3

    執行以下命令來建立符號連結:

    sudo ln -s path-to-python-3.x/python3.x path-to-python-3.7/python3.7

    重新啟動裝置。

  3. 編輯 Lambda 函數的組態。請遵循 步驟 5: 將 Lambda 函數新增至 Greengrass 群組 中的程序。

    注意

    除非商業案例需要,否則建議您執行 Lambda 函數,無需容器化。這有助於存取您的裝置 GPU 和攝影機,而無需設定裝置資源。如果您以無容器方式執行,您也必須授予 AWS IoT Greengrass Lambda 函數的根存取權。

    1. 不使用容器化執行 :

      • 針對 Run as (執行身分),選擇 Another user ID/group ID。 針對 UID,輸入 0。 針對 GUID,輸入 0

        這可讓您的 Lambda 函數以根身分執行。如需以 root 身分執行的詳細資訊,請前往在群組中設定 Lambda 函數的預設存取身分

        提示

        您還必須更新 config.json 檔案,以授予 Lambda 函數的根存取權。對於程序 ,請參閲以 Root 身分執行 Lambda 函數

      • 針對 Containerization (容器化),選擇 No container (無容器)

        如需執行而不容器化的詳細資訊,請前往 選擇 Lambda 函數容器化時的注意事項

      • Timeout (逾時) 值更新為 5 秒鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。

      • 對於 Read access to /sys Directory (讀取存取 /sys Directory),選擇 Enable.

      • 針對 Lambda lifecycle (Lambda 生命循環),選擇 Make this function long-lived and keep it running indefinitely.

    2. 改為在容器化模式中執行:

      注意

      除非業務案例需要,否則不建議在容器化模式中執行。

      • Timeout (逾時) 值更新為 5 秒鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。

      • 對於 Read access to /sys Directory (讀取存取 /sys Directory),選擇 Enable.

      • 針對 Lambda lifecycle (Lambda 生命循環),選擇 Make this function long-lived and keep it running indefinitely.

  4. 如果以容器化模式執行,請新增所需的本機裝置資源以授與對裝置 GPU 的存取權。

    注意

    如果您在非容器化模式中執行 AWS IoT Greengrass,則無須設定裝置資源, 就能存取您的裝置 GPU。

    1. 在群組設定頁面上,選擇 Resources (資源)

      
                此群組組態頁面反白顯示 [資源]。
    2. Local (本機) 索引標籤上,選擇 Add a local resource (新增本機資源)

    3. 定義資源:

      • 針對 Resource name (資源名稱),輸入 renderD128

      • 針對 Resource type (資源類型),選擇 Device (裝置)

      • 針對 Device path (裝置路徑),輸入 /dev/dri/renderD128

      • 群組擁有者檔案存取許可,選擇將擁有資源的 Linux 群組自動新增至作業系統群組許可

      • Lambda 函數隸屬,授予讀寫存取給您的 Lambda 函數。

設定 NVIDIA Jetson TX2

若要在 NVIDIA Jetson TX2 進行此教學課程,請提供來源映像和設定 Lambda 函數。如果您使用的是 GPU,請您還必須新增本機裝置。

  1. 確保您的 Jetson 設備已設定好,以便您可以安裝 AWS IoT Greengrass 核心軟體。如需如何設定裝置的詳細資訊,請參閱設定其他裝置

  2. 打開 MXNet 文件,移至 在 Jetson 上安裝 MXNet,然後依照指示在 Jetson 裝置上安裝 。MXNet

    注意

    如果您想要從來源建置 MXNet,請按照指示來建置共用程式庫。編輯 config.mk 檔案中的下列設定,以便與 Jetson TX2 裝置搭配使用:

    • 新增 -gencode arch=compute-62, code=sm_62CUDA_ARCH 設定。

    • 開啟 CUDA。

      USE_CUDA = 1
  3. 下載 Lambda 函數的靜態 PNG 或 JPG 映像,以用於影像分類。該應用程式最適合與小型映像檔案一同運作。或者,您可以在 Jetson 電路板檢測攝影機來擷取來源映像。

    在含有 greengrassObjectClassification.py 檔案的目錄中儲存您的映像檔案。您也可以將它們儲存在此目錄的子目錄中。此目錄是您在步驟 4: 建立並發佈 Lambda 函數上傳的 Lambda 函數部署套件。

  4. 建立從 Python 3.7 到 Python 3.6 的符號連結,以搭配使用 Python 3 與 AWS IoT Greengrass。執行以下命令來找到您的 Python 安裝:

    which python3

    執行以下命令來建立符號連結:

    sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7

    重新啟動裝置。

  5. 請確定 ggc_user 系統帳號可以使用 MXNet 架構:

    “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
  6. 編輯 Lambda 函數的組態。請遵循 步驟 5: 將 Lambda 函數新增至 Greengrass 群組 中的程序。

    注意

    除非商業案例需要,否則建議您執行 Lambda 函數,無需容器化。這有助於存取您的裝置 GPU 和攝影機,而無需設定裝置資源。如果您以無容器方式執行,則還必須授予 AWS IoT Greengrass Lambda 函數的根存取權。

    1. 不使用容器化執行 :

      • 針對 Run as (執行身分),選擇 Another user ID/group ID。 針對 UID,輸入 0。 針對 GUID,輸入 0

        這可讓您的 Lambda 函數以根身分執行。如需以 root 身分執行的詳細資訊,請前往在群組中設定 Lambda 函數的預設存取身分

        提示

        您還必須更新 config.json 檔案,以授予 Lambda 函數的根存取權。如需程序,請參見以 Root 身分執行 Lambda 函數

      • 針對 Containerization (容器化),選擇 No container (無容器)

        如需執行而不容器化的詳細資訊,請前往 選擇 Lambda 函數容器化時的注意事項

      • 對於 Read access to /sys Directory (讀取存取 /sys Directory),選擇 Enable.

      • Environment variables (環境變數) 下,將以下金鑰值對新增至您的 Lambda 函數。這會設定 AWS IoT Greengrass 以使用 MXNet 架構。

        Key

        數值

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

    2. 改為在容器化模式中執行:

      注意

      除非業務案例需要,否則不建議在容器化模式中執行。

      • 增加 Memory limit (記憶體限制) 值。請使用 500 MB 的 CPU 或至少 2000 MB 的 GPU。

      • 對於 Read access to /sys directory (讀取存取 /sys 資料庫),選擇 Enable.

      • Environment variables (環境變數) 下,將以下金鑰值對新增至您的 Lambda 函數。這會設定 AWS IoT Greengrass 以使用 MXNet 框架。

        Key

        數值

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

  7. 如果以容器化模式執行,請新增下列本機裝置資源,以便將存取權限授予裝置 GPU。請遵循 步驟 6: 新增資源至 Greengrass 群組 中的程序。

    注意

    如果您在非容器化模式中執行 AWS IoT Greengrass,則無須設定裝置資源, 就能存取您的裝置 GPU。

    對於每個資源:

    • 針對 Resource type (資源類型),選擇 Device (裝置)

    • 群組擁有者檔案存取許可,選擇將擁有資源的 Linux 群組自動新增至作業系統群組許可

    • Lambda 函數隸屬,授予讀寫存取給您的 Lambda 函數。

       

      名稱

      裝置路徑

      nvhost-ctrl

      /dev/nvhost-ctrl

      nvhost-gpu

      /dev/nvhost-gpu

      nvhost-ctrl-gpu

      /dev/nvhost-ctrl-gpu

      nvhost-dbg-gpu

      /dev/nvhost-dbg-gpu

      nvhost-prof-gpu

      /dev/nvhost-prof-gpu

      nvmap

      /dev/nvmap

      nvhost-vic

      /dev/nvhost-vic

      tegra_dc_ctrl

      /dev/tegra_dc_ctrl

  8. 若在容器化模式中執行,請新增下列本機磁碟區資源,將存取權授予您的裝置攝影機。請遵循 步驟 6: 新增資源至 Greengrass 群組 中的程序。

    注意

    如果您在非容器化模式中執行 AWS IoT Greengrass, 可以存取您的裝置攝影機,而不需要設定磁碟區資源。

    • 針對 Resource type (資源類型),選擇 Volume (磁碟區)

    • 群組擁有者檔案存取許可,選擇將擁有資源的 Linux 群組自動新增至作業系統群組許可

    • Lambda 函數隸屬,授予讀寫存取給您的 Lambda 函數。

       

      名稱

      來源路徑

      目的地路徑

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp