如何設定使用 AWS Management Console機器學習推論 - AWS IoT Greengrass

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 或更新版本。

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

本教學說明如何使用AWS Management Console設定 Greengrass 群組,以執行 Lambda 推論應用程式辨識來自相機之映像的 Lambda 推論應用程式辨識映像,同時並不需要傳送資料至雲端。推論應用程式在 Raspberry Pi 存取攝影機模組,並使用開放原始碼執行推論SqueezeNet模型。

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

先決條件

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

注意

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

對於第三方平台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 模型套件

在此步驟中,請建立模型套件,並於其中包含要上傳到 Amazon Simple Storage Service (Amazon S3)。AWS IoT Greengrass可以使用 Amazon S3 的模型套件,但前提是您使用 tar.gz 或 zip 格式。

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

  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 版的AWS IoT Greengrass適用於 Python 的核心開發套件。

      注意

      如果有新版本可用,您可以下載並升級部署套件中的 SDK 版本。如需詳細資訊,請參閱「」AWS IoT Greengrass核心開發套件上 GitHub。

  2. examples 目錄的內容壓縮成名為 greengrassObjectClassification.zip 的檔案。這是您的部署套件。

    zip -r greengrassObjectClassification.zip .
    注意

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

     

    接著,建立 Lambda 函數。

  3. 來自AWS IoT控制台,選擇函數建立函數

  4. 選擇Author from scratch (從頭開始撰寫)並使用以下值來建立您的函數:

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

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

    適用於許可下一步,請保留預設設定。這會建立授與基本 Lambda 權限的執行角色。此角色不為所用AWS IoT Greengrass。

  5. 選擇 Create function (建立函數)。

     

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

  6. 選擇您的 Lambda 函數,並上傳您的 Lambda 函數部署套件。

    1. 在「」程式碼標籤的下碼來源碼,選擇上傳來源。從下拉式選單中選擇.zip 檔案

      突出顯示 .zip 文件的從下拉列表中上傳。
    2. 選擇上傳,然後選擇您的greengrassObjectClassification.zip部署套件。然後選擇 Save (儲存)

    3. 在「」程式碼功能的標籤,在執行時間設定,選擇Edit (編輯),然後輸入下列值。

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

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

      選擇 Save (儲存)。

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

    注意

    Greengrass 組可以通過別名(推薦)或版本引用 Lambda 函數。使用別名可讓您更輕鬆地管理程式碼更新,因為當函數程式碼更新時,您不需要變更訂閱資料表或群組定義。相反,您只需將別名指向新函數版本即可。

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

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

  9. 在「」greengrassObjectClassification:1組態頁面,從動作功能表中,選擇建立別名

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

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

    • 針對 Version (版本) 輸入 1

    注意

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

  11. 選擇 Save (儲存)。

     

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

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

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

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

  1. 在 中AWS IoT主控台導覽窗格, 下Manage (管理),展開Greengrass 裝置,然後選擇Group (V1)

  2. 從群組組組組組態頁面上,選擇Lambda 函數索引標籤。

  3. 在 下方我的 Lambda 函數區段中,選擇Add

  4. 對於Lambda 函數,選擇greengrassObjectClassification

  5. 對於Lambda 函數版本,選擇別名:MLTest

     

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

  6. 在「」Lambda 函數組態區段中,進行以下更新。

    注意

    建議您在不使用容器化的情況下執行 Lambda 函數,除非業務案例需要。這有助於啟用對設備 GPU 和攝像頭的訪問,而無需配置設備資源。如果您在沒有容器化的情況下執行,您也必須授與 root 存取權AWS IoT GreengrassLambda 函數。

    1. 若要在不使用容器化的情況下執行:

    2. 要在容器化模式下運行:

      注意

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

      • 適用於系統使用者和群組,選擇使用群組預設

      • 適用於Lambda 函數容器化,選擇使用群組預設

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

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

      • 適用於Pinned,選擇True

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

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

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

    注意

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

  8. 保留所有其他屬性的預設數值,並選擇新增 Lambda 函數

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

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

注意

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

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

  1. 在群組組組組組態頁面上,選擇資源索引標籤。

  2. 在 中本機資源區段中,選擇新增本機資源

  3. 在「」新增本機資源頁面上,使用下列值:

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

    • 資源類型選擇裝置

    • 適用於本機裝置路徑輸入/dev/vcsm

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

    • 適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組許可

      所以此系統群組擁有者和檔案存取權限選項讓您授與其他檔案可存 Lambda 的許可。如需詳細資訊,請參閱 群組擁有者檔案存取許可

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

  5. 選擇新增本機資源

  6. 在「」新增本機資源頁面上,使用下列值:

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

    • 資源類型選擇裝置

    • 適用於本機裝置路徑輸入/dev/vchiq

    • 適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組許可

  7. 請在頁面底部選擇新增資源

 

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

  1. 在「」資源您群組的索引標籤,在Machine Learning區段中,選擇新增 Machine learning 資源

  2. 在「」新增機器學習資源(已建立!) 頁面資源名稱輸入squeezenet_model

  3. 適用於模型來源,選擇使用存放在 S3 中的模型,例如透過深度學習編譯器最佳化的模型

  4. 適用於S3 URI,輸入儲存 S3 儲存貯體的路徑。

  5. 選擇 Browse S3 (瀏覽 S3)。這會在 Amazon S3 主控台開啟新標籤。

  6. 在 Amazon S3 主控台標籤上,上傳 Amazon S3 主控台標籤squeezenet.zip檔案到 S3 儲存貯體。如需相關資訊,請參閱「」。如何將檔案和資料夾上傳至 S3 儲存貯體?中的Amazon Simple Simple Simple Simple Service

    注意

    若要讓 S3 儲存貯貯貯貯貯體可供存貯貯貯貯貯體可供存貯貯貯貯體可供存貯貯greengrass並於其中包含的區域與您使用的相同區域AWS IoT Greengrass。選擇唯一名稱 (例如 greengrass-bucket-user-id-epoch-time)。請勿在儲存貯體名稱中使用句號 (.)。

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

  8. 針對 Destination path (目的地路徑),輸入 /greengrass-machine-learning/mxnet/squeezenet

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

  9. Under系統群組擁有者和檔案存取權限,選擇沒有系統群組

  10. 選擇 Add resource (新增資源)

使用 SageMaker 訓練模型

本教學課程中使用 Amazon S3 中存取的模型,但您可以輕鬆使用 SageMaker 模型。所以此AWS IoT Greengrass控制台有內置 SageMaker 整合,因此您不必手動將這些模型上傳到 Amazon S3。使用的要求與限制 SageMaker 模型,請參閱支援的模型來源

若要使用 SageMaker MODEL:

  • 適用於模型來源,選擇使用訓練過的模型AWS SageMaker,然後選擇模型的培訓任務的名稱。

  • 適用於目的地路徑」下,輸入 Lambda 函數尋找模型的目錄路徑。

步驟 7:新增訂閱到 Greengrass 群組

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

  1. 在群組組組組組態頁面上,選擇訂閱」索引標籤,然後選擇新增訂閱

  2. 在「」訂閱詳細資訊頁面上,設定以下的來源和目標:

    1. In來源類型,選擇Lambda 函數,然後選擇greengrassObjectClassification

    2. InTarget type (目標類型),選擇服務,然後選擇IoT Cloud (IoT 雲端)

  3. In主題篩選條件輸入hello/world,然後選擇建立訂閱

步驟 8:部署 Greengrass 群組

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

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

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

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

      若輸出的 root 含有 /greengrass/ggc/packages/1.11.6/bin/daemon 項目,則精靈有在運作。

      注意

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

    2. 啟動協助程式:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 在群組組組組組組態頁面上,選擇部署

    此群組頁面反白顯示 [Deployment (部署)] 和 [Deploy (部署)]。
  3. 在 中Lambda 函數」標籤的」系統 Lambda 函數區段中,選取IP 偵測器並選擇Edit (編輯)

  4. 在 中編輯 IP 偵測器設定對話方塊中,選取自動偵測並覆寫 MQTT 代理程式端點

  5. 選擇 Save (儲存)。

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

    注意

    如果出現提示,授予建立Greengrass 服務角色並將其與您的關聯AWS 帳戶在最新的AWS 區域。此角色允許AWS IoT Greengrass存取您的資源AWS服務。

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

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

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

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

注意

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

  1. 在 中AWS IoT控制台,下測試,選擇MQTT 測試用戶端

  2. 訂閱使用以下值:

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

    • Under其他組態,為了MQTT 承載顯示,選擇將承載顯示為字串

  3. 選擇 Subscribe (訂閱)

    如果測試成功,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

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

拆箱錯入runtime.log

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

如果您的套件沒有含有模型檔案的主目錄,請使用以下命令重新包裝e模型:

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 內容/lambda目錄。先執行命令,再取代預留位置值。

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. 確認目錄包含與greengrassObjectClassification.zip您上傳的部署套件步驟 4:建立並發佈 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. 列出您為機器學習資源所指定的本機目錄內容。

    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 on Wheels

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

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

    注意

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

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

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

    注意

    建議您在不使用容器化的情況下執行 Lambda 函數,除非業務案例需要。這有助於啟用對設備 GPU 和攝像頭的訪問,而無需配置設備資源。如果您在沒有容器化的情況下執行,您也必須授與 root 存取權AWS IoT GreengrassLambda 函數。

    1. 若要在不使用容器化的情況下執行:

      • 適用於系統使用者和群組,選擇Another user ID/group ID。適用於系統使用者 ID輸入0。適用於系統群組 ID輸入0

        這允許您的 Lambda 函數以 root 身份執行。如需以 root 身份執行的詳細資訊,請參閱設定群組中 Lambda 函數的預設存取身分

        提示

        您還必須更新config.json檔案,授予存取您的 Lambda 函數的根目錄。如需程序,請參閱以根身份運行 Lambda 函數

      • 適用於Lambda 函數容器化,選擇沒有容器

        如需在不使用容器化的詳細資訊,請參閱選擇 Lambda 函數容器化時的考量事項

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

      • UnderPinned,選擇True

      • Under其他參數,為了Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用

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

    2. 要在容器化模式下運行:

      注意

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

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

      • 適用於Pinned,選擇True

      • Under其他參數,為了Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用

  3. 如果在容器化模式下運行」中,新增必要的本機裝置資源,以授予裝置 GPU 存取權。

    注意

    如果您在非容器化模式下運行,AWS IoT Greengrass無需設定裝置資源即可存取裝置 GPU。

    1. 在群組組組組組態頁面上,選擇資源索引標籤。

    2. 選擇新增本機資源

    3. 定義資源:

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

      • 適用於資源類型,選擇本機裝置

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

      • 適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組許可

      • 適用於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 檔案的目錄中儲存您的映像檔案。您也可以將它們儲存在此目錄的子目錄中。此目錄是您在上傳的 Lambda 函數部署套件步驟 4:建立並發佈 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 和攝像頭的訪問,而無需配置設備資源。如果您在沒有容器化的情況下執行,您也必須授與 root 存取權AWS IoT GreengrassLambda 函數。

    1. 若要在不使用容器化的情況下執行:

      • 適用於系統使用者和群組,選擇Another user ID/group ID。適用於系統使用者 ID輸入0。適用於系統群組 ID輸入0

        這允許您的 Lambda 函數以 root 身份執行。如需以 root 身份執行的詳細資訊,請參閱設定群組中 Lambda 函數的預設存取身分

        提示

        您還必須更新config.json檔案,授予存取您的 Lambda 函數的根目錄。如需程序,請參閱以根身份運行 Lambda 函數

      • 適用於Lambda 函數容器化,選擇沒有容器

        如需在不使用容器化的詳細資訊,請參閱選擇 Lambda 函數容器化時的考量事項

      • Under其他參數,為了Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用

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

        索引鍵

        數值

        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。

      • Under其他參數,為了Read access to /sys directory (對 /sys 目錄的讀取存取),選擇已啟用

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

        索引鍵

        數值

        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。

    對於每個資源:

    • 資源類型選擇裝置

    • 適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組許可

       

      名稱

      裝置路徑

      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 (磁碟區)

    • 適用於系統群組擁有者和檔案存取權限,選擇為擁有資源的系統群組許可

       

      名稱

      來源路徑

      目的地路徑

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp