建立 AWS IoT Greengrass V2 元件 - Amazon SageMaker AI

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

建立 AWS IoT Greengrass V2 元件

AWS IoT Greengrass 使用 元件,這是部署到 並在 AWS IoT Greengrass 核心裝置上執行的軟體模組。您需要 (至少) 三個元件:

  1. 部署 Edge Manager 代理程式二進位的公有 Edge Manager 代理程式 AWS IoT Greengrass 元件

  2. 當您使用 或 AI 主控台封裝機器學習模型時自動產生的模型元件。 AWS SDK for Python (Boto3) API SageMaker 如需相關資訊,請參閱 建立自動產生的元件

  3. 採用 Edge Manager 代理程式用戶端應用程式的私有自訂元件,並對推論結果執行任何前處理和後處理。如需如何建立自訂元件的詳細資訊,請參閱建立自動產生的元件建立自訂 AWS IoT Greengrass 元件

建立自動產生的元件

使用 產生模型元件,CreateEdgePackagingJobAPI並GreengrassV2Component指定 SageMaker Edge Manager 封裝任務API欄位 PresetDeploymentType。當您呼叫 CreateEdgePackagingJob 時API,Edge Manager 會在 Amazon S3 中採用 SageMaker AI Neo 編譯的模型,並建立模型元件。模型元件會自動儲存在您的帳戶中。您可以導覽至 AWS IoT 主控台 來檢視任何元件https://console.aws.amazon.com/iot/選取綠色,然後選取核心裝置。此頁面有與您帳戶相關聯的 AWS IoT Greengrass 核心裝置清單。如果未在 PresetDeploymentConfig 中指定模型元件名稱,則產生的預設名稱由 "SagemakerEdgeManager" 和 Edge Manager 代理程式封裝任務的名稱組成。下列範例示範如何使用 指定 Edge Manager 來建立 a AWS IoT Greengrass V2 CreateEdgePackagingJob 元件API。

import sagemaker import boto3 # Create a SageMaker client object to make it easier to interact with other AWS services. sagemaker_client = boto3.client('sagemaker', region=<YOUR_REGION>) # Replace with your IAM Role ARN sagemaker_role_arn = "arn:aws:iam::<account>:role/*" # Replace string with the name of your already created S3 bucket. bucket = 'amzn-s3-demo-bucket-edge-manager' # Specify a name for your edge packaging job. edge_packaging_name = "edge_packag_job_demo" # Replace the following string with the name you used for the SageMaker Neo compilation job. compilation_job_name = "getting-started-demo" # The name of the model and the model version. model_name = "sample-model" model_version = "1.1" # Output directory in S3 where you want to store the packaged model. packaging_output_dir = 'packaged_models' packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir) # The name you want your Greengrass component to have. component_name = "SagemakerEdgeManager" + edge_packaging_name sagemaker_client.create_edge_packaging_job( EdgePackagingJobName=edge_packaging_name, CompilationJobName=compilation_job_name, RoleArn=sagemaker_role_arn, ModelName=model_name, ModelVersion=model_version, OutputConfig={ "S3OutputLocation": packaging_s3_output, "PresetDeploymentType":"GreengrassV2Component", "PresetDeploymentConfig":"{\"ComponentName\":\"sample-component-name\", \"ComponentVersion\":\"1.0.2\"}" } )

您也可以使用 SageMaker AI 主控台建立自動產生的元件。依照封裝模型 (Amazon SageMaker AI 主控台)中的步驟 1-6 執行

輸入您要存放封裝任務輸出和選用加密金鑰的 Amazon S3 儲存貯URI體。

完成下列步驟以建立模型元件:

  1. 選擇預設部署

  2. 元件名稱欄位中指定元件的名稱。

  3. 選擇性地分別提供元件、元件版本、平台作業系統或元件說明元件版本平台作業系統平台架構的描述。

  4. 選擇提交

建立一個 Hello World 自訂元件

自訂應用程式元件可用來在 Edge 裝置上執行推論。元件負責將模型載入 SageMaker Edge Manager、叫用 Edge Manager 代理程式進行推論,以及在元件關閉時卸載模型。在建立元件之前,請確保代理程式和應用程式可以與 Edge Manager 通訊。若要這樣做,請設定 gRPC。Edge Manager 代理程式使用 Protobuf Buffers 和 gRPC 伺服器中定義的方法,與邊緣裝置和雲端上的用戶端應用程式建立通訊。

若要使用 gRPC,您必須:

  1. 使用從 Amazon S3 發行儲存貯體下載 Edge Manager 代理程式時提供的 .proto 檔案建立 gRPC stub。

  2. 使用您喜歡的語言編寫客戶端代碼。

您不需要在 .proto 檔案中定義服務。當您從 Amazon S3 發行儲存貯體下載 Edge Manager 代理程式發行二進位檔時,服務 .proto 檔案會包含在壓縮TAR檔案中。

在主機機器上安裝 gRPC 和其他必要工具,並在 Python agent_pb2.py中建立 gRPC 短根agent_pb2_grpc.py和 。確保您的本機目錄中有 agent.proto

%%bash pip install grpcio pip install grpcio-tools python3 -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. agent.proto

上述程式碼會從 .proto 服務定義產生 gRPC 用戶端和伺服器介面。換句話說,它會在 Python 中建立 gRPC 模型。API 目錄包含用於與代理程式通訊的 Protobuf 規格。

接著,使用 gRPC API為您的服務寫入用戶端和伺服器 (2)。下列範例指令碼 edge_manager_python_example.py,使用 Python 將 yolov3 模型載入、列出和卸載至 Edge 裝置。

import grpc from PIL import Image import agent_pb2 import agent_pb2_grpc import os model_path = '<PATH-TO-SagemakerEdgeManager-COMPONENT>' agent_socket = 'unix:///tmp/aws.greengrass.SageMakerEdgeManager.sock' agent_channel = grpc.insecure_channel(agent_socket, options=(('grpc.enable_http_proxy', 0),)) agent_client = agent_pb2_grpc.AgentStub(agent_channel) def list_models(): return agent_client.ListModels(agent_pb2.ListModelsRequest()) def list_model_tensors(models): return { model.name: { 'inputs': model.input_tensor_metadatas, 'outputs': model.output_tensor_metadatas } for model in list_models().models } def load_model(model_name, model_path): load_request = agent_pb2.LoadModelRequest() load_request.url = model_path load_request.name = model_name return agent_client.LoadModel(load_request) def unload_model(name): unload_request = agent_pb2.UnLoadModelRequest() unload_request.name = name return agent_client.UnLoadModel(unload_request) def predict_image(model_name, image_path): image_tensor = agent_pb2.Tensor() image_tensor.byte_data = Image.open(image_path).tobytes() image_tensor_metadata = list_model_tensors(list_models())[model_name]['inputs'][0] image_tensor.tensor_metadata.name = image_tensor_metadata.name image_tensor.tensor_metadata.data_type = image_tensor_metadata.data_type for shape in image_tensor_metadata.shape: image_tensor.tensor_metadata.shape.append(shape) predict_request = agent_pb2.PredictRequest() predict_request.name = model_name predict_request.tensors.append(image_tensor) predict_response = agent_client.Predict(predict_request) return predict_response def main(): try: unload_model('your-model') except: pass print('LoadModel...', end='') try: load_model('your-model', model_path) print('done.') except Exception as e: print() print(e) print('Model already loaded!') print('ListModels...', end='') try: print(list_models()) print('done.') except Exception as e: print() print(e) print('List model failed!') print('Unload model...', end='') try: unload_model('your-model') print('done.') except Exception as e: print() print(e) print('unload model failed!') if __name__ == '__main__': main()

如果您使用相同的用戶端程式碼範例,請確保model_path指向包含模型的 AWS IoT Greengrass 元件名稱。

產生 gRPC 短根且準備好 Hello World 程式碼後,您就可以建立 AWS IoT Greengrass V2 Hello World 元件。若要這麼做:

  • 將您的edge_manager_python_example.pyagent_pb2_grpc.pyagent_pb2.py 上傳到您的 Amazon S3 儲存貯體,並記下他們的 Amazon S3 路徑。

  • 在 AWS IoT Greengrass V2 主控台中建立私有元件,並定義元件的配方。將 Amazon S3 指定URI至您的 Hello World 應用程式,並在下列配方中指定 gRPC stub。

    --- RecipeFormatVersion: 2020-01-25 ComponentName: com.sagemaker.edgePythonExample ComponentVersion: 1.0.0 ComponentDescription: Sagemaker Edge Manager Python example ComponentPublisher: Amazon Web Services, Inc. ComponentDependencies: aws.greengrass.SageMakerEdgeManager: VersionRequirement: '>=1.0.0' DependencyType: HARD Manifests: - Platform: os: linux architecture: "/amd64|x86/" Lifecycle: install: |- apt-get install python3-pip pip3 install grpcio pip3 install grpcio-tools pip3 install protobuf pip3 install Pillow run: script: |- python3 {artifacts:path}/edge_manager_python_example.py Artifacts: - URI: <code-s3-path> - URI: <pb2-s3-path> - URI: <pb2-grpc-s3-path>

如需建立 Hello World 配方的詳細資訊,請參閱 AWS IoT Greengrass 文件中的建立您的第一個元件