CreateAmazon IoT GreengrassV2 组件 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

CreateAmazon IoT GreengrassV2 组件

Amazon IoT Greengrass使用组件,一个软件模块,部署到并在Amazon IoT Greengrass核心设备。你将需要(至少)三个组件:

  1. 公共边缘管理器代理Amazon IoT Greengrass组件。

  2. 将机器学习模型打包时自动生成的模型组件Amazon SDK for Python (Boto3)API 或使用 SageMaker 控制台。

  3. 推理应用程序的私有自定义组件。

Edge Manager AgentAmazon IoT Greengrass组件 (1) 部署边缘管理器代理二进制文件。

当您使用Amazon SDK for Python (Boto3)API 或 SageMaker 控制台。有关如何生成模型组件的信息,请参阅。自动生成的组件.

私有自定义组件 (3) 是用于实现 Edge Manager Agent 客户端应用程序以及对推理结果进行任何预处理和后处理的应用程序。有关如何创建自定义组件的详细信息,请参阅。自动生成的组件要么创建自定义Amazon IoT Greengrass组件.

自动生成的组件

使用生成模型组件CreateEdgePackagingJobAPI 并指定GreengrassV2Component(对于 ) SageMaker 边缘管理器打包作业 API 字段PresetDeploymentType. 当你打电话给CreateEdgePackagingJobAPI、边缘管理器将您的 SageMaker Neo 编译模型带到 Amazon S3 中并创建模型组件。模型组件将自动存储在您的账户中。您可以通过导航到Amazon IoT控制台https://console.aws.amazon.com/iot/. SelectGreengrass然后选择核心实例设备。该页面有一个列表Amazon IoT Greengrass与您的账户关联的核心设备。如果未在中指定模型组件名称PresetDeploymentConfig,生成的默认名称包括"SagemakerEdgeManager"和你的名称 SageMaker 边缘管理器打包作业。以下示例演示如何指定 Edge Manager 以创建Amazon IoT GreengrassV2 组件与CreateEdgePackagingJobAPI。

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 = 'edge-manager-demo-bucket' # 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 控制台。按照中的步骤 1-6 操作Package 模型(Amazon SageMaker 控制台)

输入要存储打包作业输出和可选加密密钥的 Amazon S3 存储桶 URI。

完成以下操作以创建模型组件:

  1. 选择预设部署.

  2. 指定组件名称组件名称字段中返回的子位置类型。

  3. (可选)提供组件、组件版本、平台操作系统或平台体系结构的说明组件描述组件版本平台 OS, 和平台架构,。

  4. 选择 Submit(提交)

创建 Hello World 自定义组件

自定义应用程序组件用于在边缘设备上执行推理。该组件负责将模型加载到 SageMaker 边缘管理器,调用 Edge Manager 代理进行推理,然后在组件关闭时卸载模型。在创建组件之前,请确保代理和应用程序可以与 SageMaker Edge Manager。要执行此操作,请配置gRPC. 这些区域有: SageMaker Edge Manager 代理使用 Protobuf 缓冲区和 gRPC 服务器中定义的方法来与边缘设备和云上的客户端应用程序建立通信。

要使用 GrPC,您必须:

  1. 使用从 Amazon S3 发行存储桶下载 Edge Manager 代理时提供的 .proto 文件创建 gRPC 存根。

  2. 用你喜欢的语言编写客户端代码。

不需要在 .proto 文件 (1) 中定义服务。下载时,服务 .proto 文件包含在压缩的 TAR 文件中 SageMaker Edge Manager 代理从 Amazon S3 发行存储桶中发布二进制文件。

在主机上安装 gRPC 和其他必要的工具并创建 gRPC 存根agent_pb2_grpc.pyagent_pb2.py在 Python 中。确保你有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 服务定义 (2) 生成 gRPC 客户端和服务器接口。换句话说,它在 Python 中创建 GrPC 模型。API 文件夹包含用于与代理进行通信的 Protobuf 规范。

接下来,使用 gRPC API 为您的服务编写客户端和服务器 (2)。以下示例脚本,edge_manager_python_example.py,使用 Python 加载、列出和卸载yolov3模型到边缘设备。

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指向的名字Amazon IoT Greengrass如果您使用相同的客户端代码示例,则包含模型的组件。

您可以创建Amazon IoT GreengrassV2 Hello World 组件一旦你生成了 gRPC 存根并准备好了你的 Hello World 代码。为此,请执行以下操作:

  • 上传您的edge_manager_python_example.pyagent_pb2_grpc.py, 和agent_pb2.py将其记下 Amazon S3 存储桶,然后记下其 Amazon S3 路径。

  • 在中创建私有组件Amazon IoT GreengrassV2 控制台并定义组件的配方。在以下配方中为您的 Hello World 应用程序和 gRPC 存根指定 Amazon S3 URI。

    --- 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 食谱的详细信息,请参阅创建您的第一个组件中的Amazon IoT Greengrass文档中)。