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

若我們提供該指南英語版本的翻譯,在有任何牴觸的狀況下請以英文版本的指南為主。其透過機器翻譯提供翻譯。

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

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

您可以使用 SageMaker Neo 深度學習編譯器 將 Tensorflow、Apache MXNet、PyTorch、ONNX 和 XgBoost 架構中的原生機器學習推論模型預測效率最佳化,以獲得更小的佔用空間和更快的效能。然後,您可以下載優化模型並安裝 SageMaker Neo 深度學習執行時間 並將它們部署到 AWS IoT Greengrass 提供更快推論的設備。

本教程介紹如何使用 AWS 管理主控台 要配置Greengrass組以運行 Lambda 推論示例,可以在本地識別攝像頭的圖像,而不會將數據發送到雲。推論範例會存取 Raspberry Pi 上的相機模組。在本教學中,您將下載透過 Resnet-50 訓練並在 . 中最佳化的預先包裝模型。Neo 深度學習編譯器. 然後,使用此模型在 AWS IoT Greengrass 裝置上執行本機映像分類。

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

Prerequisites

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

注意

本教程使用樹莓派,但是 AWS IoT Greengrass 支持其他平臺,例如 IntelAtomNVIDIAJetsonTX2. 如果使用 Intel Atom 範例,您可能需要安裝 Python 3.6 而不是 Python 3.7。如需如何設定裝置以便安裝 AWS IoT Greengrass Core 軟體的相關資訊,請參閱 。設定其他裝置.

對於第三方平臺, AWS IoT Greengrass 不支持,您必須運行 Lambda 非容器化模式下的功能。要在非容器化模式下運行,必須運行您的 Lambda 功能爲root。如需詳細資訊,請參閱選擇 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. 使用箭頭鍵打開 接口選項 並啓用攝像頭接口。如果出現提示,請允許重新啟動裝置。

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

    raspistill -v -o test.jpg

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

步驟 2. 安裝亞馬遜SagemakerNEO深層學習運行時間

在此步驟中,請於 Raspberry Pi 上安裝 Neo 深度學習執行時間 (DLR)。

注意

針對本教學課程,建議您安裝 1.1.0 版。

  1. 遠端登入到 Raspberry Pi。

    ssh pi@your-device-ip-address
  2. 打開DLR文檔,打開 安裝DLR,並找到樹莓派設備的輪子URL。然後,依照指示在裝置上安裝 DLR。例如,你可以使用 pip:

    pip3 install rasp3b-wheel-url
  3. 安裝 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 功能。然後,發佈函數版本和建立別名。

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

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

    cd path-to-downloaded-sample tar -xvzf dlr-py3-armv7l.tar.gz

    解壓縮的範例套件中的 examples 目錄內包含函數程式碼和相依性。

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

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

      注意

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

  3. 壓縮 examples 名稱中名爲 optimizedImageClassification.zip...這是您的部署包。

    cd path-to-downloaded-sample/dlr-py3-armv7l/examples zip -r optimizedImageClassification.zip .

    部署套件包含函數程式碼和相依性。這包括調用 Neo 深度學習執行時間 PythonAPI以執行與 Neo 深度學習編譯器 型號。

    注意

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

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

    在 AWS IoT 主控台,在導航窗格中,選擇 格林草格,然後選擇 .

    
            在 AWS IoT 主控台 以突出顯示的組。
  5. 請選擇您想要新增 Lambda 函數的 Greengrass 群組。

  6. 在組配置頁面上,選擇 羔羊皮,然後選擇 Add Lambda.

    
            此群組頁面反白顯示 Lambda 和新增的 Lambdas。
  7. 將Lambda添加至您的Greengrass組 頁面,選擇 Create new Lambda這會開啟 AWS Lambda 主控台。

    
            [新增 Lambda 至 Greengrass 群組] 頁面反白顯示 [建立新的 Lambda]。
  8. 選擇 。Author from scratch 並使用以下值創建您的職能:

    • 對於 功能名稱,輸入 optimizedImageClassification.

    • 對於 運行時,選擇 蟒蛇皮3.7.

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

    
            Create function (建立函數) 頁面的 Basic information (基本資訊) 區段。
  9. 選擇 。Create function.

 

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

  1. 配置 選項卡 optimizedImageClassification 功能, 功能代碼,使用以下值:

    • 對於 代碼輸入類型,選擇 上傳.zip文件.

    • 對於 運行時,選擇 蟒蛇皮3.7.

    • 對於 處理程,輸入 inference.handler.

  2. 選擇 。Upload.

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

  4. 選擇 保存.

 

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

注意

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

  1. 操作 菜單,選擇 發佈新版本.

    
            從功能表中選擇發行新版本的選項
  2. 對於 版本描述,輸入 First version,然後選擇 Publish.

  3. OptimizEdiMagEclassification:1 配置頁面,從 操作 菜單,選擇 創建別名.

    
            從操作功能表中選擇建立別名的選項。
  4. 創建新別名 頁面,使用以下值:

    • 對於 名稱,輸入 mlTestOpt.

    • 對於 版本,輸入 1.

    注意

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

  5. 選擇 創建.

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

步驟 4. 添加 Lambda GreengrassGroup的職能部門

在此步驟中,將 Lambda 函數新增至群組,然後設定其生命週期。

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

  1. 將Lambda添加至您的Greengrass組 頁面,選擇 Use existing Lambda.

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

  3. 選擇Lambda版本 頁面,選擇 別名:MLTESTOPT,然後選擇 Finish.

 

接著,設定 Lambda 函數的生命週期。

  1. 羔羊皮 頁面,選擇 OptimizEdimagEclassification Lambda 功能。

    
            Lambdas 頁面反白顯示 optimizedImageClassification Lambda 函數。
  2. OptimizEdimagEclassification 配置頁面,選擇 編輯.

  3. 組特定Lambda配置 頁面,進行以下更新。

    注意

    我們建議您運行 Lambda 無需容器化功能,除非您的業務案例要求。這有助於啓用對設備GPU和攝像頭的訪問,而無需配置設備資源。如果您運行的是沒有容器化的操作,則您還必須授予root訪問權限 AWS IoT Greengrass Lambda 功能。

    1. 運行無容器化:

    2. 要在容器化模式下運行,請執行以下操作:

      注意

      我們不建議在容器化模式下運行,除非您的業務案例要求。

      • 對於 運行爲,選擇 使用組默認.

      • 對於 容器化,選擇 使用組默認.

      • 對於 內存限制,輸入 1024 MB.

      • 對於 超時,輸入 10 seconds.

      • 對於 Lambda 生命周,選擇 使這種功能長久以來保持無限期運行.

        如需詳細資訊,請參閱Greengrass Lambda 函數的生命週期組態.

      • 對於 對/sys目錄的讀取訪問,選擇 啓用.

  4. 選擇 更新.

步驟 5. 添加A SageMaker 新優化的模型資源到GreengrassGroup

在此步驟中,建立最佳化機器學習推論模型的資源,並將其上傳到 Amazon S3 儲存貯體。然後,找到 Amazon S3 已上傳的模型中已上傳的模 AWS IoT Greengrass 控制檯和附屬機構, Lambda 功能。這使得函數可在核心裝置上存取其資源。

  1. 在計算機上,導航到 resnet50 您未拉鍊的樣品包中的目錄 步驟 3. 建立推論 Lambda 函數.

    注意

    如果使用 NVIDIA Jetson 範例,則需要改用範例套件中的 resnet18 目錄。如需詳細資訊,請參閱設定 NVIDIA Jetson TX2.

    cd path-to-downloaded-sample/dlr-py3-armv7l/models/resnet50

    此目錄中包含預先編譯的模型成品,其適用於利用 Resnet-50 訓練的映像分類模型。

  2. 壓縮內部文件 resnet50 名稱中名爲 resnet50.zip.

    zip -r resnet50.zip .
  3. 在組配置頁面上 AWS IoT Greengrass 組,選擇 資源. 導航到 機器學習 部分並選擇 添加機器學習資源. 在 創建機器學習資源 頁面, 資源名稱,輸入 resnet50_model.

    
            新增機器學習模型頁面和已更新的屬性。
  4. 對於 模型來源,選擇 在S3上傳模型.

  5. 下方 S3型號,選擇 選擇.

    注意

    目前,優化 SageMaker 模型自動存儲在 Amazon S3. 您可以使用此選項在 Amazon S3 儲存貯體中找到您的最佳化模型。有關模型優化的更多信息,請參閱 SageMaker,請參閱 SageMaker NEO文檔.

  6. 選擇 上傳模型.

  7. 在 Amazon S3 控制檯選項卡,將ZIP文件上傳到 Amazon S3 桶。有關信息,請參閱 如何將文件和文件夾上傳到S3桶中? Amazon Simple Storage Service 主控台使用者指南.

    注意

    您的桶名稱必須包含字符串 greengrass...選擇唯一名稱(如 greengrass-dlr-bucket-user-id-epoch-time)。不要使用週期(.)中的)。

  8. 在 AWS IoT Greengrass 控制檯選項卡,找到並選擇您的 Amazon S3 桶。找到您的上傳內容 resnet50.zip 文件,然後選擇 選擇. 您可能需要重新整理頁面來更新可用儲存貯體和檔案的清單。

  9. 本地路徑,輸入 /ml_model.

    
            更新過的本機路徑。

    此為 Lambda 執行階段命名空間的本機模型目的地。當您部署群組、 AWS IoT Greengrass 擷取來源模型封包,然後再擷取其內容到指定的目錄中。

    注意

    我們強烈建議您使用針對本機路徑提供的確切路徑。在此步驟中使用不同的本機模型目的地路徑,會導致此教學課程中提供的一些故障診斷命令不精確。如果使用不同的路徑,請設定 MODEL_PATH 環境變數,其必須使用這裡提供的確切路徑。有關環境變量的信息,請參閱 AWS Lambda 環境變量.

  10. 下方 識別資源所有者並設置訪問權限,選擇 無操作系統組.

  11. 下方 Lambda功能關聯,選擇 選擇.

  12. 選擇 OptimizEdimagEclassification,選擇 只讀訪問,然後選擇 完成.

  13. 選擇 保存.

步驟 6. 將您的攝像機設備資源添加到GreengrassGroup

在此步驟中,建立相機模組的資源,並將它與 Lambda 函數建立隸屬關係。這使得 Lambda 函數可在核心裝置上存取資源。

注意

如果您在非容器化模式下運行, AWS IoT Greengrass 無需配置此設備資源,可訪問您的設備GPU和攝像頭。

  1. 在組配置頁面上,選擇 資源.

    
            此群組組態頁面反白顯示 [資源]。
  2. 本地 選項卡,選擇 添加本地資源.

  3. 創建本地資源 頁面,使用以下值:

    • 對於 資源名稱,輸入 videoCoreSharedMemory.

    • 對於 資源類型,選擇 設備.

    • 對於 設備路徑,輸入 /dev/vcsm.

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

    • 對於 組所有者文件訪問權限,選擇 自動添加擁有資源的Linux組的OS組權限.

      TheThethe 組所有者文件訪問權限 選項允許您將其他文件訪問權限授予 Lambda 過程。如需詳細資訊,請參閱群組擁有者檔案存取許可.

    
            [建立本機資源] 頁面提供已編輯資源的屬性。
  4. 下方 Lambda功能關聯,選擇 選擇.

  5. 選擇 OptimizEdimagEclassification,選擇 讀取和寫入訪問,然後選擇 完成.

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

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

  6. 在頁面底部,選擇 添加另一個資源.

  7. 創建本地資源 頁面,使用以下值:

    • 對於 資源名稱,輸入 videoCoreInterface.

    • 對於 資源類型,選擇 設備.

    • 對於 設備路徑,輸入 /dev/vchiq.

    • 對於 組所有者文件訪問權限,選擇 自動添加擁有資源的Linux組的OS組權限.

    
            [建立本機資源] 頁面提供已編輯資源的屬性。
  8. 下方 Lambda功能關聯,選擇 選擇.

  9. 選擇 OptimizEdimagEclassification,選擇 讀取和寫入訪問,然後選擇 完成.

  10. 選擇 保存.

步驟 7。添加訂閱GreengrassGroup

在此步驟中,將訂閱新增至群組。這些訂閱啓用 Lambda 將預測結果發送到 AWS IoT 發佈至MQTT主題。

  1. 在組配置頁面上,選擇 訂閱,然後選擇 Add Subscription.

    
            此群組頁面反白顯示 [訂閱] 和 [新增訂閱]。
  2. 選擇您的源和目標 頁面,配置源和目標,如下所示:

    1. 選擇一個源,選擇 羔羊皮,然後選擇 OptimizEdimagEclassification.

    2. 選擇目標,選擇 服務,然後選擇 物聯網雲.

    3. 選擇 。Next.

      
                [選擇您的來源和目標] 頁面反白顯示 [Next (下一個)]。
  3. 使用主題篩選您的數據 頁面, 可選主題過濾器,輸入 /resnet-50/predictions,然後選擇 Next.

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

  5. 新增第二個訂閱。在 選擇您的源和目標 頁面,配置源和目標,如下所示:

    1. 選擇一個源,選擇 服務,然後選擇 物聯網雲.

    2. 選擇目標,選擇 羔羊皮,然後選擇 OptimizEdimagEclassification.

    3. 選擇 。Next.

  6. 使用主題篩選您的數據 頁面, 可選主題過濾器,輸入 /resnet-50/test,然後選擇 Next.

  7. 選擇 。Finish.

步驟 8。部署 Greengrass 群組。

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

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

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

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

      如果輸出包含A root 進入 /greengrass/ggc/packages/latest-core-version/bin/daemon,後臺程序正在運行。

    2. 啟動精靈:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 在組配置頁面上,選擇 部署,並且 操作 菜單,選擇 部署.

    
            此群組頁面反白顯示 [Deployment (部署)] 和 [Deploy (部署)]。
  3. 配置設備如何發現您的核心 頁面,選擇 Automatic detection.

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

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

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

    TheThethe 部署 頁面顯示部署時間戳、版本ID和狀態。完成後,部署顯示的狀態應爲 已成功完成.

    
            已反白成功部署狀態的 Deployments (部署) 頁面。

    有關部署的更多信息,請參閱 將 AWS IoT Greengrass 群組部署至 AWS IoT Greengrass 核心... 如需故障診斷協助,請參閱故障診斷 ​AWS IoT Greengrass

測試推論範例

現在您可以驗證部署是否已正確設定。要測試,您訂閱 /resnet-50/predictions 併發布任何信息 /resnet-50/test 主題。這會觸發 Lambda 函數,以利用 Pi Raspberry 照相,並對其擷取的映像執行推論。

注意

如果使用NVIDIAJetson示例,請確保使用 resnet-18/predictionsresnet-18/test 主題。

注意

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

  1. 在 AWS IoT 主控台 主頁,選擇 測試.

    
            在 AWS IoT 主控台 測試突出顯示。
  2. 對於 訂閱,選擇 Subscribe to a Topic使用下列數值。將剩餘選項保留為其預設值。

    • 對於 訂閱主題,輸入 /resnet-50/predictions.

    • 對於 MQTT有效載荷顯示,選擇 將工資負載顯示爲字符串.

  3. 選擇 。Subscribe to topic.

  4. /resnet-50/predictions 頁面,指定 /resnet-50/test 要發佈的主題。選擇 。Publish to topic.

  5. 如果測試成功,已發佈的訊息會導致 Raspberry Pi 相機擷取映像。來自 Lambda 函數的訊息會出現在頁面底部。此訊息包含映像的預測結果,其使用的格式為:預測的類別名稱、機率,以及尖峰記憶體使用量。

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

設定 Intel Atom

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

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

    儲存含有 inference.py 檔案 (或於該目錄的子目錄中)目錄中的映像檔案。這位於 Lambda 您上傳的功能部署包 步驟 3. 建立推論 Lambda 函數.

    注意

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

    如果您使用攝影機,請確定 awscam APT 套件已安裝並保持最新狀態。有關詳細信息,請參閱 更新AWSDeeplens設備AWS DeepLens 開發人員指南.

  2. 編輯 Lambda 函數的組態。請遵循 中的程序。步驟 4. 添加 Lambda GreengrassGroup的職能部門.

    注意

    我們建議您運行 Lambda 無需容器化功能,除非您的業務案例要求。這有助於啓用對設備GPU和攝像頭的訪問,而無需配置設備資源。如果您運行的是沒有容器化的操作,則您還必須授予root訪問權限 AWS IoT Greengrass Lambda 功能。

    1. 運行無容器化:

      • 對於 運行爲,選擇 Another user ID/group ID...對於 UID,輸入 0...對於 GUID,輸入 0.

        這允許您的 Lambda 要以root用戶身份運行的函數。如需更多關於以root用戶身份運行的信息,請參閱 在群組中設定 Lambda 函數的預設存取身分.

        提示

        您還必須更新您的 config.json 授予根訪問權限 Lambda 功能。對於程序,請參閱 以 Root 身分執行 Lambda 函數.

      • 對於 容器化,選擇 無容器.

        有關無容器化運行的更多信息,請參閱 選擇 Lambda 函數容器化時的注意事項.

      • 增加 超時 值爲2分鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。

      • 對於 對/sys目錄的讀取訪問,選擇 Enable.

      • 對於 λ生命週期,選擇 Make this function long-lived and keep it running indefinitely.

    2. 要在容器化模式下運行,請執行以下操作:

      注意

      我們不建議在容器化模式下運行,除非您的業務案例要求。

      • 增加 內存限制 值爲3000MB。

      • 增加 超時 值爲2分鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。

      • 對於 對/sys目錄的讀取訪問,選擇 Enable.

      • 對於 λ生命週期,選擇 Make this function long-lived and keep it running indefinitely.

  3. 將 Neo 最佳化模型資源新增至群組。上傳模型資源 resnet18 您未拉鍊的樣品包目錄 步驟 3. 建立推論 Lambda 函數. 此目錄中包含預先編譯的模型成品,其適用於利用 Resnet-18 訓練的映像分類模型。遵循步驟 5. 添加A SageMaker 新優化的模型資源到GreengrassGroup中的程序,但有下列更新。

    • 壓縮內部文件 resnet18 名稱中名爲 resnet18.zip.

    • 創建機器學習資源 頁面, 資源名稱,輸入 resnet18_model.

    • 上傳 resnet18.zip 檔案。

  4. 如果在容器化模式下運行,添加必要的本地設備資源,以授予對您設備GPU的訪問。

    注意

    如果您在非容器化模式下運行, AWS IoT Greengrass 可以訪問您的設備GPU而不配置設備資源。

    1. 在組配置頁面上,選擇 資源.

      
                此群組組態頁面反白顯示 [資源]。
    2. 本地 選項卡,選擇 添加本地資源.

    3. 定義資源:

      • 對於 資源名稱,輸入 renderD128.

      • 對於 資源類型,選擇 設備.

      • 對於 設備路徑,輸入 /dev/dri/renderD128.

      • 對於 組所有者文件訪問權限,選擇 自動添加擁有資源的Linux組的OS組權限.

      • 對於 Lambda功能關聯,授予 讀取和寫入訪問 您的 Lambda 功能。

設定 NVIDIA Jetson TX2

若要在 NVIDIA Jetson TX2 上執行本教學課程,請提供來源映像、設定 Lambda 函數,以及新增更多本機裝置資源。

  1. 確保您的 Jetson 設備已設定好,以便您可以安裝 AWS IoT Greengrass 核心軟件並使用 GPU 進行推論。如需如何設定裝置的詳細資訊,請參閱設定其他裝置. 若要使用 GPU 在 NVIDIA Jetson TX2 上進行推論,則在使用 Jetpack 4.3 裝載您的映像時,您必須在裝置上安裝 CUDA 10.0 和 cuDNN 7.0。

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

    在含有 inference.py 檔案的目錄中儲存您的映像檔案。您也可以將它們儲存在此目錄的子目錄中。此目錄位於 Lambda 您上傳的功能部署包 步驟 3. 建立推論 Lambda 函數.

    注意

    您可以改為選擇在 Jetson 電路板檢測攝影機來擷取來源影像。不過,強烈建議您先從靜態影像開始。

  3. 編輯 Lambda 函數的組態。請遵循 中的程序。步驟 4. 添加 Lambda GreengrassGroup的職能部門.

    注意

    我們建議您運行 Lambda 無需容器化功能,除非您的業務案例要求。這有助於啓用對設備GPU和攝像頭的訪問,而無需配置設備資源。如果您運行的是沒有容器化的操作,則您還必須授予root訪問權限 AWS IoT Greengrass Lambda 功能。

    1. 運行無容器化:

      • 對於 運行爲,選擇 Another user ID/group ID...對於 UID,輸入 0...對於 GUID,輸入 0.

        這允許您的 Lambda 要以root用戶身份運行的函數。如需更多關於以root用戶身份運行的信息,請參閱 在群組中設定 Lambda 函數的預設存取身分.

        提示

        您還必須更新您的 config.json 授予根訪問權限 Lambda 功能。對於程序,請參閱 以 Root 身分執行 Lambda 函數.

      • 對於 容器化,選擇 無容器.

        有關無容器化運行的更多信息,請參閱 選擇 Lambda 函數容器化時的注意事項.

      • 增加 超時 值爲5分鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。

      • 對於 λ生命週期,選擇 Make this function long-lived and keep it running indefinitely.

      • 對於 對/sys目錄的讀取訪問,選擇 Enable.

    2. 要在容器化模式下運行,請執行以下操作:

      注意

      我們不建議在容器化模式下運行,除非您的業務案例要求。

      • 增加 內存限制 值。若要在 GPU 模式下使用提供的模型,請至少使用 2000 MB。

      • 增加 超時 值爲5分鐘。這可確保請求不會太旱逾時。設定完成後,執行推論需要幾分鐘的時間。

      • 對於 λ生命週期,選擇 Make this function long-lived and keep it running indefinitely.

      • 對於 對/sys目錄的讀取訪問,選擇 Enable.

  4. 將 Neo 最佳化模型資源新增至群組。上傳模型資源 resnet18 您未拉鍊的樣品包目錄 步驟 3. 建立推論 Lambda 函數. 此目錄中包含預先編譯的模型成品,其適用於利用 Resnet-18 訓練的映像分類模型。遵循步驟 5. 添加A SageMaker 新優化的模型資源到GreengrassGroup中的程序,但有下列更新。

    • 壓縮內部文件 resnet18 名稱中名爲 resnet18.zip.

    • 創建機器學習資源 頁面, 資源名稱,輸入 resnet18_model.

    • 上傳 resnet18.zip 檔案。

  5. 如果在容器化模式下運行,添加必要的本地設備資源,以授予訪問您設備GPU的權限。

    注意

    如果您在非容器化模式下運行, AWS IoT Greengrass 可以訪問您的設備GPU而不配置設備資源。

    1. 在組配置頁面上,選擇 資源.

      
                此群組組態頁面反白顯示 [資源]。
    2. 本地 選項卡,選擇 添加本地資源.

    3. 定義每個資源:

      • 對於 資源名稱設備路徑,使用下表中的值。為表格中的每一列建立一個裝置資源。

      • 對於 資源類型,選擇 設備.

      • 對於 組所有者文件訪問權限,選擇 自動添加擁有資源的Linux組的OS組權限.

      • 對於 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

  6. 如果在容器化模式下運行,添加以下本地卷資源以授予對設備攝像頭的訪問權限。請遵循 中的程序。步驟 5. 添加A SageMaker 新優化的模型資源到GreengrassGroup.

    注意

    如果您在非容器化模式下運行, AWS IoT Greengrass 可以訪問您的設備攝像頭,而不配置設備資源。

    • 對於 資源類型,選擇 體積.

    • 對於 組所有者文件訪問權限,選擇 自動添加擁有資源的Linux組的OS組權限.

    • 對於 Lambda功能關聯,授予 讀取和寫入訪問 您的 Lambda 功能。

       

      名稱

      來源路徑

      目的地路徑

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp

  7. 更新您的群組訂閱以使用正確的目錄。遵循步驟 7。添加訂閱GreengrassGroup中的程序,但有下列更新。

    • 對於您的第一個主題篩選,請輸入 /resnet-18/predictions.

    • 對於您的第二個主題篩選,請輸入 /resnet-18/test.

  8. 更新您的測試訂閱以使用正確的目錄。遵循測試推論範例中的程序,但有下列更新。

    • 對於 訂閱,選擇 Subscribe to a Topic...對於 訂閱主題,輸入 /resnet-18/predictions.

    • /resnet-18/predictions 頁面,指定 /resnet-18/test 要發佈的主題。

故障排 AWS IoT Greengrass ML推斷

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

檢查錯誤日誌

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

    sudo su cd /greengrass/ggc/var/log
  2. 檢查 runtime.log 是否有任何錯誤。

    cat system/runtime.log | grep 'ERROR'

    您也可以查看使用者定義 Lambda 函數日誌是否有任何錯誤:

    cat user/your-region/your-account-id/lambda-function-name.log | grep 'ERROR'

    如需詳細資訊,請參閱日誌故障診斷.

 

驗證是否已成功部署 Lambda 函數

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

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. 驗證目錄是否包含與 optimizedImageClassification.zip 您在 步驟 3. 建立推論 Lambda 函數.

    確保 .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. 列出您為機器學習資源所指定的本機目錄內容。

    注意

    如果您的 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文檔.