Buat Komponen AWS IoT Greengrass V2 - Amazon SageMaker AI

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Buat Komponen AWS IoT Greengrass V2

AWS IoT Greengrass menggunakan komponen, modul perangkat lunak yang digunakan dan berjalan pada perangkat AWS IoT Greengrass inti. Anda membutuhkan (minimal) tiga komponen:

  1. AWS IoT Greengrass Komponen Edge Manager Agent publik yang menyebarkan agentbinary Edge Manager.

  2. Komponen model yang dibuat secara otomatis saat Anda mengemas model pembelajaran mesin dengan AWS SDK for Python (Boto3) API atau dengan konsol SageMaker AI. Untuk informasi, lihat Buat komponen yang dibuat secara otomatis.

  3. Komponen pribadi dan kustom untuk mengimplementasikan aplikasi klien agen Edge Manager, dan melakukan pra-pemrosesan dan pasca-pemrosesan hasil inferensi. Untuk informasi selengkapnya tentang cara membuat komponen kustom, lihat Buat komponen yang dibuat secara otomatis atau Membuat AWS IoT Greengrass komponen kustom.

Buat komponen yang dibuat secara otomatis

Buat komponen model dengan CreateEdgePackagingJobAPI dan tentukan GreengrassV2Component bidang API pekerjaan pengemasan SageMaker Edge ManagerPresetDeploymentType. Saat Anda memanggil CreateEdgePackagingJob API, Edge Manager mengambil model SageMaker AI Neo yang dikompilasi di Amazon S3 dan membuat komponen model. Komponen model secara otomatis disimpan di akun Anda. Anda dapat melihat salah satu komponen Anda dengan menavigasi ke konsol. AWS IoT https://console.aws.amazon.com/iot/ Pilih Greengrass dan kemudian pilih Perangkat inti. Halaman ini memiliki daftar perangkat AWS IoT Greengrass inti yang terkait dengan akun Anda. Jika nama komponen model tidak ditentukan dalamPresetDeploymentConfig, nama default yang dihasilkan terdiri dari "SagemakerEdgeManager" dan nama pekerjaan pengemasan agen Edge Manager Anda. Contoh berikut menunjukkan cara menentukan ke Edge Manager untuk membuat komponen AWS IoT Greengrass V2 dengan 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\"}" } )

Anda juga dapat membuat komponen yang dibuat secara otomatis dengan konsol SageMaker AI. Ikuti langkah 1-6 di Package a Model (Amazon SageMaker AI Console)

Masukkan URI bucket Amazon S3 tempat Anda ingin menyimpan output pekerjaan pengemasan dan kunci enkripsi opsional.

Lengkapi yang berikut ini untuk membuat komponen model:

  1. Pilih Penerapan prasetel.

  2. Tentukan nama komponen untuk bidang Nama komponen.

  3. Secara opsional, berikan deskripsi komponen, versi komponen, OS platform, atau arsitektur platform untuk deskripsi Komponen, versi Komponen, OS Platform, dan arsitektur Platform.

  4. Pilih Kirim.

Buat komponen kustom Hello World

Komponen aplikasi khusus digunakan untuk melakukan inferensi pada perangkat tepi. Komponen bertanggung jawab untuk memuat model ke SageMaker Edge Manager, memanggil agen Edge Manager untuk inferensi, dan membongkar model saat komponen dimatikan. Sebelum Anda membuat komponen Anda, pastikan agen dan aplikasi dapat berkomunikasi dengan Edge Manager. Untuk melakukan ini, konfigurasikan gRPC. Agen Edge Manager menggunakan metode yang didefinisikan dalam Protobuf Buffers dan server gRPC untuk menjalin komunikasi dengan aplikasi klien di perangkat edge dan cloud.

Untuk menggunakan gRPC, Anda harus:

  1. Buat rintisan gRPC menggunakan file.proto yang disediakan saat Anda mengunduh agen Edge Manager dari bucket rilis Amazon S3.

  2. Tulis kode klien dengan bahasa yang Anda inginkan.

Anda tidak perlu mendefinisikan layanan dalam file.proto. File.proto layanan disertakan dalam file TAR terkompresi saat Anda mengunduh biner rilis agen Edge Manager dari bucket rilis Amazon S3.

Instal gRPC dan alat lain yang diperlukan di mesin host Anda dan buat agent_pb2_grpc.py rintisan gRPC dan dengan Python. agent_pb2.py Pastikan Anda memiliki agent.proto direktori lokal Anda.

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

Kode sebelumnya menghasilkan klien gRPC dan antarmuka server dari definisi layanan.proto Anda. Dengan kata lain, itu menciptakan model gRPC dengan Python. Direktori API berisi spesifikasi Protobuf untuk berkomunikasi dengan agen.

Selanjutnya, gunakan gRPC API untuk menulis klien dan server untuk layanan Anda (2). Contoh skrip berikut,edge_manager_python_example.py, menggunakan Python untuk memuat, daftar, dan membongkar yolov3 model ke perangkat 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()

Pastikan model_path menunjuk ke nama AWS IoT Greengrass komponen yang berisi model jika Anda menggunakan contoh kode klien yang sama.

Anda dapat membuat komponen Hello World AWS IoT Greengrass V2 Anda setelah Anda membuat stub gRPC Anda dan Anda memiliki kode Hello World Anda siap. Untuk melakukannya:

  • Unggah bucket Anda edge_manager_python_example.pyagent_pb2_grpc.py,, dan agent_pb2.py ke Amazon S3 Anda dan catat jalur Amazon S3 mereka.

  • Buat komponen pribadi di konsol AWS IoT Greengrass V2 dan tentukan resep untuk komponen Anda. Tentukan URI Amazon S3 ke aplikasi Hello World dan rintisan gRPC Anda dalam resep berikut.

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

Untuk informasi rinci tentang membuat resep Hello World, lihat Membuat komponen pertama Anda dalam AWS IoT Greengrass dokumentasi.