Buat Komponen AWS IoT Greengrass V2 - Amazon SageMaker

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 SageMaker konsol. 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

Hasilkan komponen model dengan CreateEdgePackagingJobAPIdan tentukan GreengrassV2Component untuk API bidang pekerjaan pengemasan SageMaker Edge ManagerPresetDeploymentType. Saat Anda memanggil CreateEdgePackagingJobAPI, Edge Manager mengambil model yang SageMaker dikompilasi Neo Anda 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 bagaimana 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 = '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\"}" } )

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

Masukkan bucket Amazon S3 URI tempat Anda ingin menyimpan output dari 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 g RPC. Agen Edge Manager menggunakan metode yang didefinisikan dalam Protobuf Buffers dan RPC server g untuk menjalin komunikasi dengan aplikasi klien di perangkat edge dan cloud.

Untuk menggunakan gRPC, Anda harus:

  1. Buat RPC rintisan g 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 terkompresi TAR saat Anda mengunduh biner rilis agen Edge Manager dari bucket rilis Amazon S3.

Instal g RPC dan alat lain yang diperlukan di mesin host Anda dan buat RPC rintisan g agent_pb2_grpc.py dan dengan agent_pb2.py Python. 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 g RPC client dan server interface dari definisi layanan.proto Anda. Dengan kata lain, ia menciptakan RPC model g dengan Python. APIDirektori berisi spesifikasi Protobuf untuk berkomunikasi dengan agen.

Selanjutnya, gunakan g RPC 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 RPC stub g 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 Amazon S3 URI ke aplikasi Hello World Anda dan g RPC rintisan 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.