Konektor Umpan balik ML - AWS IoT Greengrass

AWS IoT Greengrass Version 1 memasuki fase umur panjang pada 30 Juni 2023. Untuk informasi selengkapnya, lihat kebijakan AWS IoT Greengrass V1 pemeliharaan. Setelah tanggal ini, tidak AWS IoT Greengrass V1 akan merilis pembaruan yang menyediakan fitur, penyempurnaan, perbaikan bug, atau patch keamanan. Perangkat yang berjalan AWS IoT Greengrass V1 tidak akan terganggu dan akan terus beroperasi dan terhubung ke cloud. Kami sangat menyarankan Anda bermigrasi ke AWS IoT Greengrass Version 2, yang menambahkan fitur baru yang signifikan dan dukungan untuk platform tambahan.

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

Konektor Umpan balik ML

Awas

Konektor ini telah pindah kefase kehidupan yang diperpanjang, danAWS IoT Greengrasstidak akan merilis pembaruan yang menyediakan fitur, penyempurnaan pada fitur yang ada, tambalan keamanan, atau perbaikan bug. Untuk informasi selengkapnya, lihat AWS IoT Greengrass Version 1kebijakan pemeliharaan.

Konektor Umpan balik ML memudahkan Anda mengakses data model machine learning (ML) untuk pelatihan ulang dan analisis model. Konektor:

  • Unggah data input (sampel) yang digunakan oleh model ML Anda ke Amazon S3. Model input dapat dalam format apa pun, seperti gambar, JSON, atau audio. Setelah sampel diunggah ke cloud, Anda dapat menggunakannya untuk melatih model untuk meningkatkan akurasi dan ketepatan prediksi. Sebagai contoh, Anda dapat menggunakan SageMaker Ground Truth untuk melabeli sampel Anda dan SageMaker untuk melatih kembali model.

  • Menerbitkan hasil prediksi dari model sebagai pesan MQTT. Hal ini memungkinkan Anda memantau dan menganalisis kualitas inferensi model Anda secara real time. Anda juga dapat menyimpan hasil prediksi dan menggunakannya untuk menganalisis tren dari waktu ke waktu.

  • Menerbitkan metrik tentang sampel unggahan dan data sampel ke Amazon CloudWatch.

Untuk mengonfigurasi konektor ini, Anda menjelaskan dukungan Anda konfigurasi umpan balik dalam format JSON. Sebuah konfigurasi umpan balik mendefinisikan properti seperti tujuan bucket Amazon S3, jenis konten, dan strategi sampling. (Strategi pengambilan sampel digunakan untuk menentukan sampel mana yang akan diunggah.)

Anda dapat menggunakan konektor Umpan balik ML dalam skenario berikut:

  • Dengan fungsi Lambda yang ditetapkan pengguna. Fungsi Lambda inferensi lokal Anda menggunakan Machine Learning SDK AWS IoT Greengrass untuk memanggil konektor ini dan lulus dalam konfigurasi umpan balik target, input model, dan output model (hasil prediksi). Sebagai contoh, lihat Contoh Penggunaan.

  • Dengan konektor Klasifikasi Citra ML (v2). Untuk menggunakan konektor ini dengan konektor Klasifikasi Citra ML, konfigurasikan parameter MLFeedbackConnectorConfigId untuk konektor Klasifikasi Citra ML.

  • Dengan konektor Deteksi Objek ML. Untuk menggunakan konektor ini dengan konektor Deteksi Objek ML, konfigurasikan parameter MLFeedbackConnectorConfigId untuk konektor Deteksi Objek ML.

ARN: arn:aws:greengrass:region::/connectors/MLFeedback/versions/1

Persyaratan

Konektor ini memiliki persyaratan sebagai berikut:

  • AWS IoT Greengrass perangkat lunak Core v1.9.3 atau yang lebih baru.

  • Python versi 3.7 atau 3.8 diinstal pada perangkat core dan ditambahkan ke variabel lingkungan PATH.

    catatan

    Untuk menggunakan Python 3.8, jalankan perintah berikut untuk membuat link simbolik dari folder instalasi default Python 3.7 ke binari Python 3.8 yang diinstal.

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    Ini mengonfigurasi perangkat Anda untuk memenuhi persyaratan Python untuk AWS IoT Greengrass.

  • Satu atau lebih bucket Amazon S3. Jumlah bucket yang Anda gunakan tergantung pada strategi pengambilan sampel Anda.

  • Peran grup Greengrass dikonfigurasi untuk mengizinkan s3:PutObject tindakan pada objek dalam tujuan bucket Amazon S3, seperti yang ditunjukkan dalam contoh kebijakan IAM berikut.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::bucket-name/*" ] } ] }

    Kebijakan harus mencakup semua bucket tujuan sebagai sumber. Anda dapat memberikan akses terperinci atau bersyarat ke sumber daya (sebagai contoh, dengan menggunakan skema penamaan wildcard *).

    Untuk persyaratan peran grup, Anda harus mengonfigurasi peran untuk memberikan izin yang diperlukan dan memastikan peran telah ditambahkan ke grup. Untuk informasi lebih lanjut, lihat Mengelola peran grup Greengrass (konsol) atau Mengelola peran grup Greengrass (CLI).

  • Konektor Metrik CloudWatch ditambahkan ke grup Greengrass dan dikonfigurasi. Hal ini diperlukan hanya jika Anda ingin menggunakan fitur pelaporan metrik.

  • AWS IoT Greengrass Machine Learning SDK v1.1.0 diperlukan untuk berinteraksi dengan konektor ini.

Parameter

FeedbackConfigurationMap

Satu set dari satu atau lebih konfigurasi umpan balik yang konektor dapat gunakan untuk mengunggah sampel ke Amazon S3. Konfigurasi umpan balik mendefinisikan parameter seperti bucket tujuan, jenis konten, dan strategi pengambilan sampel. Ketika konektor ini dipanggil, memanggil fungsi Lambda atau konektor menentukan konfigurasi umpan balik target.

Nama tampilanAWS IoTKonsol: Peta konfigurasi umpan balik

Wajib: true

Jenis: Sebuah string JSON terbentuk yang mendefinisikan himpunan konfigurasi umpan balik yang didukung. Sebagai contoh, lihat Contoh FeedBackConfigurationMap.

ID objek konfigurasi umpan balik memiliki persyaratan sebagai berikut.

ID:

  • Harus unik dalam seluruh objek konfigurasi.

  • Harus mulai dengan angka atau huruf kecil. Dapat berisi huruf kecil dan huruf besar, angka, dan tanda hubung.

  • Panjangnya harus 2 - 63 karakter.

Wajib: true

Jenis: string

Pola yang valid: ^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

Contoh:MyConfig0,config-a,12id

Tubuh objek konfigurasi umpan balik berisi properti berikut.

s3-bucket-name

Nama bucket Amazon S3 tujuan.

catatan

Peran grup harus mengizinkan tindakan s3:PutObject pada semua bucket tujuan. Untuk informasi selengkapnya, lihat Persyaratan.

Wajib: true

Jenis: string

Pola yang valid: ^[a-z0-9\.\-]{3,63}$

content-type

Jenis konten sampel untuk diunggah. Semua konten untuk konfigurasi umpan balik individu harus dari jenis yang sama.

Wajib: true

Jenis: string

Contoh:image/jpeg,application/json,audio/ogg

s3-prefix

Prefiks kunci yang digunakan untuk sampel yang diunggah. Prefix serupa dengan nama direktori. Itu mengizinkan menyimpan data serupa di bawah direktori yang sama di bucket. Untuk informasi selengkapnya, lihatKunci dan metadata objekdiPanduan Pengguna Amazon Simple Storage Service.

Wajib: false

Jenis: string

file-ext

Ekstensi file yang digunakan untuk sampel yang diunggah. Harus ekstensi file yang valid untuk jenis konten.

Wajib: false

Jenis: string

Contoh:jpg,json,ogg

sampling-strategy

Untuk Strategi sampling yang digunakan untuk memfilter sampel yang diunggah. Jika dihilangkan, konektor mencoba untuk mengunggah semua sampel yang diterimanya.

Wajib: false

Jenis: Sebuah string JSON terbentuk yang berisi properti berikut.

strategy-name

Nama strategi sampling.

Wajib: true

Jenis: string

Nilai yang valid: RANDOM_SAMPLING, LEAST_CONFIDENCE, MARGIN, atau ENTROPY

rate

Tingkat untuk strategi sampling acak.

Wajib: true jika strategy-name adalah RANDOM_SAMPLING.

Tipe: number

Nilai yang valid: 0.0 - 1.0

threshold

Ambang batas untuk KepercayaanTerkecil, Margin, atau Entropi strategi sampling.

Wajib: true jika strategy-name adalah LEAST_CONFIDENCE, MARGIN, atau ENTROPY.

Tipe: number

Nilai yang valid:

  • 0.0 - 1.0 untuk LEAST_CONFIDENCE atau MARGIN strategi.

  • 0.0 - no limit untuk ENTROPY strategi.

RequestLimit

Jumlah maksimum permintaan yang dapat diproses konektor pada satu waktu.

Anda dapat menggunakan parameter ini untuk membatasi konsumsi memori dengan membatasi jumlah permintaan yang konektor proses pada ketika yang sama. Permintaan yang melebihi batas ini diabaikan.

Nama tampilanAWS IoTKonsol: Batas permintaan

Wajib: false

Jenis: string

Nilai yang valid: 0 - 999

Pola yang valid: ^$|^[0-9]{1,3}$

Buat Contoh Konektor (AWS CLI)

Perintah CLI berikut membuat ConnectorDefinition dengan versi awal yang berisi konektor Umpan balik ML.

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyMLFeedbackConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/MLFeedback/versions/1", "Parameters": { "FeedbackConfigurationMap": "{ \"RandomSamplingConfiguration\": { \"s3-bucket-name\": \"my-aws-bucket-random-sampling\", \"content-type\": \"image/png\", \"file-ext\": \"png\", \"sampling-strategy\": { \"strategy-name\": \"RANDOM_SAMPLING\", \"rate\": 0.5 } }, \"LeastConfidenceConfiguration\": { \"s3-bucket-name\": \"my-aws-bucket-least-confidence-sampling\", \"content-type\": \"image/png\", \"file-ext\": \"png\", \"sampling-strategy\": { \"strategy-name\": \"LEAST_CONFIDENCE\", \"threshold\": 0.4 } } }", "RequestLimit": "10" } } ] }'

Contoh FeedBackConfigurationMap

Berikut ini adalah nilai contoh diperluas untuk parameter FeedbackConfigurationMap ini. Contoh ini mencakup beberapa konfigurasi umpan balik yang menggunakan strategi sampling yang berbeda.

{ "ConfigID1": { "s3-bucket-name": "my-aws-bucket-random-sampling", "content-type": "image/png", "file-ext": "png", "sampling-strategy": { "strategy-name": "RANDOM_SAMPLING", "rate": 0.5 } }, "ConfigID2": { "s3-bucket-name": "my-aws-bucket-margin-sampling", "content-type": "image/png", "file-ext": "png", "sampling-strategy": { "strategy-name": "MARGIN", "threshold": 0.4 } }, "ConfigID3": { "s3-bucket-name": "my-aws-bucket-least-confidence-sampling", "content-type": "image/png", "file-ext": "png", "sampling-strategy": { "strategy-name": "LEAST_CONFIDENCE", "threshold": 0.4 } }, "ConfigID4": { "s3-bucket-name": "my-aws-bucket-entropy-sampling", "content-type": "image/png", "file-ext": "png", "sampling-strategy": { "strategy-name": "ENTROPY", "threshold": 2 } }, "ConfigID5": { "s3-bucket-name": "my-aws-bucket-no-sampling", "s3-prefix": "DeviceA", "content-type": "application/json" } }

Strategi sampling

Konektor mendukung empat strategi sampling yang menentukan apakah akan mengunggah sampel yang dilewatkan ke konektor. Sampel adalah contoh diskrit data yang menggunakan model untuk prediksi. Anda dapat menggunakan strategi sampling untuk memfilter sampel yang paling mungkin untuk meningkatkan akurasi model.

RANDOM_SAMPLING

Mengunggah sampel secara acak berdasarkan tingkat yang disediakan. Mengunggah sampel jika nilai yang dihasilkan secara acak kurang dari tingkat. Semakin tinggi tingkat, semakin banyak sampel yang diunggah.

catatan

Strategi ini mengabaikan prediksi model yang disediakan.

LEAST_CONFIDENCE

Mengunggah sampel yang probabilitas kepercayaan maksimum jatuh di bawah ambang batas yang disediakan.

Contoh skenario:

Ambang batas: .6

Prediksi model: [.2, .2, .4, .2]

Keyakinan maksimum probabilitas: .4

Hasil:

Gunakan sampel karena probabilitas kepercayaan maksimum (.4) <= ambang batas (.6).

MARGIN

Unggah sampel jika margin antara dua probabilitas kepercayaan jatuh dalam ambang batas yang disediakan. Margin adalah perbedaan antara dua probabilitas teratas.

Contoh skenario:

Ambang batas: .02

Prediksi model: [.3, .35, .34, .01]

Top dua probabilitas kepercayaan: [.35, .34]

Margin: .01 (.35 - .34)

Hasil:

Gunakan sampel karena margin (.01) <= ambang batas (.02).

ENTROPY

Unggah sampel yang entropi lebih besar dari ambang batas yang disediakan. Gunakan model prediksi entropi dinormalisasi.

Contoh skenario:

Ambang batas: 0.75

Prediksi model: [.5, .25, .25]

Entropi untuk prediksi: 1.03972

Hasil:

Gunakan sampel karena entropi (1.03972) > ambang batas (0.75).

Data input

Fungsi Lambda yang ditetapkan pengguna menggunakan fungsi publish dari klien feedback dalam AWS IoT Greengrass Machine Learning SDK untuk memanggil konektor. Sebagai contoh, lihat Contoh Penggunaan.

catatan

Konektor ini tidak menerima pesan MQTT sebagai data input.

Fungsi publish mengambil argumen berikut:

ConfigId

ID dari konfigurasi umpan balik target. Ini harus sesuai dengan ID dari konfigurasi umpan balik yang didefinisikan dalam FeedbackConfigurationMap parameter untuk konektor Umpan balik ML.

Wajib: BETUL

Tipe: string

ModelInput

Data input yang dilewatkan ke model untuk inferensi. Data input ini diunggah menggunakan konfigurasi target kecuali disaring berdasarkan strategi sampling.

Wajib: BETUL

Jenis: byte

ModelPrediction

Hasil prediksi dari model. Jenis hasil dapat berupa kamus atau daftar. Sebagai contoh, hasil prediksi dari konektor Klasifikasi Citra ML adalah daftar probabilitas (seperti [0.25, 0.60, 0.15]). Data ini diterbitkan ke topik /feedback/message/prediction ini.

Wajib: BETUL

Jenis: kamus atau daftar float nilai

Metadata

Pelanggan didefinisikan, aplikasi-spesifik metadata yang terlampir pada sampel yang diunggah dan diterbitkan ke /feedback/message/prediction Topik. Konektor juga menyisipkan sebuah publish-ts kunci dengan nilai timestamp ke metadata.

Wajib: SALAH

Jenis: kamus

Contoh: {"some-key": "some value"}

Data output

Konektor ini menerbitkan data ke tiga topik MQTT:

  • Informasi status dari konektor pada feedback/message/status topik.

  • Hasil prediksi pada feedback/message/prediction topik.

  • Metrik ditakdirkan untuk CloudWatch padacloudwatch/metric/puttopik.

Anda harus mengonfigurasi langganan untuk mengizinkan konektor berkomunikasi pada topik MQTT. Untuk informasi selengkapnya, lihat Input dan output.

Filter topik: feedback/message/status

Gunakan topik ini untuk memantau status unggah sampel dan batalkan sampel. Konektor menerbitkan topik ini setiap kali menerima permintaan.

Contoh output: Pengunggahan sampel berhasil
{ "response": { "status": "success", "s3_response": { "ResponseMetadata": { "HostId": "IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km", "RetryAttempts": 1, "HTTPStatusCode": 200, "RequestId": "79104EXAMPLEB723", "HTTPHeaders": { "content-length": "0", "x-amz-id-2": "lbbqaDVFOhMlyU3gRvAX1ZIdg8P0WkGkCSSFsYFvSwLZk3j7QZhG5EXAMPLEdd4/pEXAMPLEUqU=", "server": "AmazonS3", "x-amz-expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"", "x-amz-request-id": "79104EXAMPLEB723", "etag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"", "date": "Thu, 11 Jul 2019 00:12:50 GMT", "x-amz-server-side-encryption": "AES256" } }, "bucket": "greengrass-feedback-connector-data-us-west-2", "ETag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"", "Expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"", "key": "s3-key-prefix/UUID.file_ext", "ServerSideEncryption": "AES256" } }, "id": "5aaa913f-97a3-48ac-5907-18cd96b89eeb" }

Konektor menambahkan bucket dan key bidang untuk respon dari Amazon S3. Untuk informasi lebih lanjut tentang respons Amazon s3, lihat objek PUT dalam Referensi Amazon Simple Storage Service API.

Contoh output: Sampel dibatalkan karena strategi pengambilan sampel
{ "response": { "status": "sample_dropped_by_strategy" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
Contoh output: Pengunggahan sampel gagal

Status kegagalan mencakup pesan gagal sebagai error_message nilai dan kelas pengecualian sebagai error nilai.

{ "response": { "status": "fail", "error_message": "[RequestId: 4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3] Failed to upload model input data due to exception. Model prediction will not be published. Exception type: NoSuchBucket, error: An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist", "error": "NoSuchBucket" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
Contoh output: Permintaan terhambat karena batas permintaan
{ "response": { "status": "fail", "error_message": "Request limit has been reached (max request: 10 ). Dropping request.", "error": "Queue.Full" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
Filter topik: feedback/message/prediction

Gunakan topik ini untuk mendengarkan prediksi berdasarkan data sampel yang diunggah. Hal ini memungkinkan Anda menganalisis kinerja model Anda secara real time. Prediksi model diterbitkan ke topik ini hanya jika data berhasil diunggah ke Amazon S3. Pesan yang diterbitkan pada topik ini dalam format JSON. Mereka berisi link ke objek data yang diunggah, prediksi model, dan metadata termasuk dalam permintaan.

Anda juga dapat menyimpan hasil prediksi dan menggunakannya untuk melaporkan dan menganalisis tren dari waktu ke waktu. Tren dapat memberikan pandangan yang berharga. Sebagai contoh, sebuah tren penurunan akurasi dari waktu ke waktu dapat membantu Anda untuk memutuskan apakah model perlu dilatih ulang.

Contoh output
{ "source-ref": "s3://greengrass-feedback-connector-data-us-west-2/s3-key-prefix/UUID.file_ext", "model-prediction": [ 0.5, 0.2, 0.2, 0.1 ], "config-id": "ConfigID2", "metadata": { "publish-ts": "2019-07-11 00:12:48.816752" } }
Tip

Anda dapat mengonfigurasi konektor IoT Analytics untuk berlangganan topik ini dan mengirim informasi ke AWS IoT Analytics untuk analisis lebih lanjut atau sejarah.

Filter topik: cloudwatch/metric/put

Ini adalah topik output yang digunakan untuk menerbitkan metrik ke CloudWatch. Fitur ini mengharuskan Anda menginstal dan mengonfigurasi Konektor Metrik CloudWatch.

Termasuk metrik:

  • Jumlah sampel yang diunggah.

  • Ukuran sampel yang diunggah.

  • Jumlah kesalahan dari unggahan ke Amazon S3.

  • Jumlah sampel batal berdasarkan strategi sampling.

  • Jumlah permintaan yang ditahan.

Contoh output: Ukuran sampel data (diterbitkan sebelum unggah sebenarnya)
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 47592, "unit": "Bytes", "metricName": "SampleSize" } } }
Contoh output: Pengunggahan sampel berhasil
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadSuccess" } } }
Contoh output: Pengunggahan sampel berhasil dan hasil prediksi diterbitkan
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleAndPredictionPublished" } } }
Contoh output: Pengunggahan sampel gagal
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadFailure" } } }
Contoh output: Sampel dibatalkan karena strategi pengambilan sampel
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleNotUsed" } } }
Contoh output: Permintaan terhambat karena batas permintaan
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "ErrorRequestThrottled" } } }

Contoh Penggunaan

Contoh berikut adalah fungsi Lambda yang ditetapkan pengguna yang menggunakan AWS IoT Greengrass Machine Learning SDK untuk mengirim data ke konektor Umpan balik ML.

catatan

Anda dapat mengunduh AWS IoT Greengrass Machine Learning SDK dari AWS IoT Greengrass halaman unduh.

import json import logging import os import sys import greengrass_machine_learning_sdk as ml client = ml.client('feedback') try: feedback_config_id = os.environ["FEEDBACK_CONFIG_ID"] model_input_data_dir = os.environ["MODEL_INPUT_DIR"] model_prediction_str = os.environ["MODEL_PREDICTIONS"] model_prediction = json.loads(model_prediction_str) except Exception as e: logging.info("Failed to open environment variables. Failed with exception:{}".format(e)) sys.exit(1) try: with open(os.path.join(model_input_data_dir, os.listdir(model_input_data_dir)[0]), 'rb') as f: content = f.read() except Exception as e: logging.info("Failed to open model input directory. Failed with exception:{}".format(e)) sys.exit(1) def invoke_feedback_connector(): logging.info("Invoking feedback connector.") try: client.publish( ConfigId=feedback_config_id, ModelInput=content, ModelPrediction=model_prediction ) except Exception as e: logging.info("Exception raised when invoking feedback connector:{}".format(e)) sys.exit(1) invoke_feedback_connector() def function_handler(event, context): return

Lisensi

Konektor Umpan balik ML mencakup perangkat lunak/lisensi pihak ketiga berikut:

Konektor ini dirilis di bawah Perjanjian Lisensi Perangkat lunak core Greengrass.

Lihat juga