Erstellen Sie die V2-Komponenten AWS IoT Greengrass - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erstellen Sie die V2-Komponenten AWS IoT Greengrass

AWS IoT Greengrass verwendet Components, ein Softwaremodul, das auf einem AWS IoT Greengrass Kerngerät bereitgestellt wird und auf diesem ausgeführt wird. Sie brauchen (mindestens) drei Komponenten:

  1. Eine öffentliche Edge Manager AWS IoT Greengrass Agent-Komponente, die die Edge Manager-Agent-Binärdatei bereitstellt.

  2. Eine Modellkomponente, die automatisch generiert wird, wenn Sie Ihr Modell für maschinelles Lernen entweder mit der AWS SDK for Python (Boto3) API oder mit der Konsole paketieren. SageMaker Weitere Informationen finden Sie unter Eine automatisch generierte Komponente erstellen.

  3. Eine private, benutzerdefinierte Komponente zur Implementierung der Edge Manager-Agenten-Client-Anwendung und zur Vor- und Nachverarbeitung der Inference-Ergebnisse. Weitere Informationen zum Erstellen einer benutzerdefinierten Komponente finden Sie unter Eine automatisch generierte Komponente erstellen oder Benutzerdefinierte AWS IoT Greengrass Komponenten erstellen.

Eine automatisch generierte Komponente erstellen

Generieren Sie die Modellkomponente mit dem API Feld CreateEdgePackagingJobAPIund geben Sie es GreengrassV2Component für den Paketierungsauftrag in SageMaker Edge Manager anPresetDeploymentType. Wenn Sie den aufrufen CreateEdgePackagingJobAPI, verwendet Edge Manager Ihr SageMaker NEO-kompiliertes Modell in Amazon S3 und erstellt eine Modellkomponente. Die Modellkomponente wird automatisch in Ihrem Konto gespeichert. Sie können jede Ihrer Komponenten anzeigen, indem Sie zur Konsole navigieren. AWS IoT https://console.aws.amazon.com/iot/ Wählen Sie Greengrass und dann Core-Geräte aus. Die Seite enthält eine Liste der AWS IoT Greengrass wichtigsten Geräte, die mit Ihrem Konto verknüpft sind. Wenn in PresetDeploymentConfig kein Name einer Modellkomponente angegeben ist, besteht der erzeugte Standardname aus "SagemakerEdgeManager" und dem Namen des Paketerstellungsauftrags für Ihren Edge Manager-Agenten. Das folgende Beispiel zeigt, wie Sie Edge Manager angeben, um eine AWS IoT Greengrass V2-Komponente mit dem zu erstellen 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-amzn-s3-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\"}" } )

Sie können die automatisch generierte Komponente auch mit der SageMaker Konsole erstellen. Folgen Sie den Schritten 1-6 in Ein Modell verpacken (Amazon SageMaker Console)

Geben Sie den Amazon S3 S3-Bucket ein, URI in dem Sie die Ausgabe des Verpackungsauftrags und den optionalen Verschlüsselungsschlüssel speichern möchten.

Gehen Sie wie folgt vor, um die Modellkomponente zu erstellen:

  1. Wählen Sie Voreingestellte Bereitstellung aus.

  2. Geben Sie den Namen der Komponente in das Feld Name der Komponente ein.

  3. Geben Sie optional eine Beschreibung der Komponente, eine Komponentenversion, das Plattform-Betriebssystem oder die Plattformarchitektur für die Beschreibung der Komponente, die Komponentenversion, das Plattform-Betriebssystem bzw. die Plattformarchitektur ein.

  4. Wählen Sie Absenden aus.

Erstellen Sie eine benutzerdefinierte Komponente zur Begrüßung

Die benutzerdefinierte Anwendungskomponente wird für Inferences auf dem Edge-Gerät verwendet. Die Komponente ist dafür verantwortlich, Modelle in SageMaker Edge Manager zu laden, den Edge Manager-Agenten zur Inferenz aufzurufen und das Modell zu entladen, wenn die Komponente heruntergefahren wird. Bevor Sie Ihre Komponente erstellen, stellen Sie sicher, dass der Agent und die Anwendung mit Edge Manager kommunizieren können. Konfigurieren Sie dazu g. RPC Der Edge Manager-Agent verwendet Methoden, die in Protobuf Buffers und dem RPC G-Server definiert sind, um die Kommunikation mit der Client-Anwendung auf dem Edge-Gerät und der Cloud herzustellen.

Um g zu verwendenRPC, müssen Sie:

  1. Erstellen Sie einen RPC G-Stub mit der .proto-Datei, die beim Herunterladen des Edge Manager-Agenten aus dem Amazon S3 S3-Release-Bucket bereitgestellt wird.

  2. Schreiben Sie den Client-Code in Ihrer bevorzugten Sprache.

Sie müssen den Dienst nicht in einer .proto-Datei definieren. Die Service-.proto-Dateien sind in der komprimierten TAR Datei enthalten, wenn Sie die Edge Manager-Agent-Release-Binärdatei aus dem Amazon S3 S3-Release-Bucket herunterladen.

Installieren Sie g RPC und andere notwendige Tools auf Ihrem Host-Computer und erstellen Sie die RPC G-Stubs agent_pb2_grpc.py und agent_pb2.py in Python. Vergewissern Sie sich, dass Sie agent.proto in Ihrem lokalen Verzeichnis haben.

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

Der obige Code generiert die RPC G-Client- und -Serverschnittstellen anhand Ihrer .proto-Servicedefinition. Mit anderen Worten, es erstellt das RPC G-Modell in Python. Das API Verzeichnis enthält die Protobuf-Spezifikation für die Kommunikation mit dem Agenten.

Verwenden Sie als Nächstes das g, RPC API um einen Client und einen Server für Ihren Dienst zu schreiben (2). Das folgende Beispielskript, edge_manager_python_example.py, verwendet Python zum Laden, Auflisten und Entladen eines yolov3 Modells auf dem Edge-Gerät.

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_pathStellen Sie sicher, dass es auf den Namen der AWS IoT Greengrass Komponente zeigt, die das Modell enthält, wenn Sie dasselbe Client-Codebeispiel verwenden.

Sie können Ihre AWS IoT Greengrass V2 Hello World-Komponente erstellen, sobald Sie Ihre RPC G-Stubs generiert haben und Ihren Hello World-Code bereit haben. Gehen Sie hierzu wie folgt vor:

  • Laden Sie Ihr edge_manager_python_example.py, agent_pb2_grpc.py und agent_pb2.py auf Ihren Amazon-S3-Bucket hoch und notieren Sie sich deren Amazon S3-Pfad.

  • Erstellen Sie eine private Komponente in der AWS IoT Greengrass V2-Konsole und definieren Sie das Rezept für Ihre Komponente. Geben Sie Amazon S3 URI für Ihre Hello World-Anwendung und G RPC Stub im folgenden Rezept an.

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

Ausführliche Informationen zum Erstellen eines Hello World-Rezepts finden Sie in der AWS IoT Greengrass Dokumentation unter Erstellen Sie Ihre erste Komponente.