

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
<a name="edge-greengrass-custom-component"></a>

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.

1. *Komponen model yang* dibuat secara otomatis saat Anda mengemas model pembelajaran mesin dengan AWS SDK untuk Python (Boto3) API atau dengan konsol SageMaker AI. Untuk informasi, lihat [Buat komponen yang dibuat secara otomatis](#edge-greengrass-autogenerate-component-how).

1. *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](#edge-greengrass-autogenerate-component-how) atau [Membuat AWS IoT Greengrass komponen kustom](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-components.html).

## Buat komponen yang dibuat secara otomatis
<a name="edge-greengrass-autogenerate-component-how"></a>

Buat komponen model dengan [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html)API dan tentukan `GreengrassV2Component` bidang API pekerjaan pengemasan SageMaker Edge Manager`PresetDeploymentType`. 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/](https://console.aws.amazon.com/greengrass/) **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 dalam`PresetDeploymentConfig`, 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)](edge-packaging-job-console.md)

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

1. Tentukan nama komponen untuk bidang **Nama komponen**.

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

1. Pilih **Kirim**.

## Buat komponen kustom Hello World
<a name="edge-greengrass-create-custom-component-how"></a>

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](https://grpc.io/). 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.

1. 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.py``agent_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](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started.html#create-first-component) dalam AWS IoT Greengrass dokumentasi.