ML 피드백 커넥터 - AWS IoT Greengrass

다음에 대한 설명서를 보고 있습니다.AWS IoT Greengrass Version 1.AWS IoT Greengrass Version 2의 최신 주요 버전입니다AWS IoT Greengrass. 사용에 관한 자세한 내용은 단원을 참조하십시오.AWS IoT Greengrass V2에 대한 자세한 내용은AWS IoT Greengrass Version 2개발자 안내서.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

ML 피드백 커넥터

ML 피드백 커넥터를 사용하면 모델 재교육 및 분석을 위해 보다 쉽게 기계 학습 (ML) 모델 데이터에 액세스할 수 있습니다. 이 커넥터는

  • ML 모델에서 사용하는 입력 데이터 (샘플) 를 Amazon S3 업로드합니다. 모델 입력은 이미지, JSON, 오디오 등 임의의 형식일 수 있습니다. 샘플을 클라우드로 업로드한 후 이를 사용하여 모델을 재교육함으로써 예측의 정확성 및 정밀도를 개선할 수 있습니다. 예를 들어, 다음을 사용할 수 있습니다.SageMaker Ground Truth를 사용하여 샘플에 레이블을 지정하고SageMaker를 클릭하여 모델을 다시 학습합니다.

  • 모델의 예측 결과를 MQTT 메시지로 게시합니다. 이를 통해 실시간으로 모델의 추론 품질을 모니터링 및 분석할 수 있습니다. 또한 예측 결과를 저장하고 이를 사용하여 경시적 추세를 분석할 수 있습니다.

  • 샘플 업로드 및 샘플 데이터에 대한 지표를 Amazon CloudWatch 에 게시합니다.

이 커넥터를 구성하려면 지원되는 피드백 구성을 JSON 형식으로 설명해야 합니다. 피드백 구성은 대상 Amazon S3 버킷, 콘텐츠 유형,샘플링 전략. (샘플링 전략은 어느 샘플을 업로드할지 결정하는 데 사용됩니다.)

다음과 같은 상황에서 ML Feedback 커넥터를 사용할 수 있습니다.

  • Lambda 함수와 함께 사용합니다. 로컬 추론 Lambda 함수는AWS IoT Greengrass이 커넥터를 호출Machine Learning 대상 피드백 구성, 모델 입력, 모델 출력 (예측 결과) 을 전달합니다. 관련 예제는 사용 예 섹션을 참조하세요

  • 사용ML 이미지 분류 커넥터(v2) 와 함께 사용합니다. 이 커넥터를 ML 이미지 분류 커넥터와 함께 사용하려면MLFeedbackConnectorConfigIdML 이미지 분류 커넥터에 대한 매개 변수입니다.

  • 사용ML 객체 감지 커넥터. 이 커넥터를 ML 개체 검색 커넥터와 함께 사용하려면MLFeedbackConnectorConfigId매개 변수는 ML 개체 감지 커넥터에 대 한.

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

Requirements

이 커넥터에는 다음과 같은 요구 사항이 있습니다.

  • AWS IoT Greengrass코어 소프트웨어 v1.9.3 이상이어야 합니다.

  • Python코어 디바이스에 설치되고 PATH 환경 변수에 추가된 Python 버전 3.7입니다.

    참고

    파이썬 3.8을 사용하려면 설치된 파이썬 3.8 바이너리에 기본 파이썬 3.7 설치 폴더에서 심볼릭 링크를 만들려면 다음 명령을 실행합니다.

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

    이렇게 하면 AWS IoT Greengrass에 대한 Python 요구 사항을 충족하도록 디바이스가 구성됩니다.

  • 하나 이상의 Amazon S3 버킷을 사용합니다. 사용하는 버킷 수는 샘플링 전략에 따라 달라집니다.

  • Greengrass 그룹 역할를 허용하도록 구성된s3:PutObject작업을 다음 IAM 정책 예제와 같이 대상 Amazon S3 버킷의 객체에 대한 작업을 수행할 수 있습니다.

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

    이 정책은 모든 대상 버킷을 리소스로 포함해야 합니다. 리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다(예: 와일드카드 * 이름 지정 스키마를 통해).

    그룹 역할 요구 사항의 경우 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 Greengrass 그룹 역할 관리(콘솔) 또는 Greengrass 그룹 역할 관리(CLI) 섹션을 참조하세요.

  • CloudWatch 지표 커넥터Greengrass 그룹에 추가 및 구성해야 합니다. 지표 보고 기능을 사용하려는 경우에만 필요합니다.

  • AWS IoT GreengrassMachine Learning SDK이 커넥터와 상호 작용하려면 v1.1.0이 필요합니다.

Parameters

FeedbackConfigurationMap

커넥터가 Amazon S3 샘플을 업로드하는 데 사용할 수 있는 하나 이상의 피드백 구성의 집합입니다. 피드백 구성은 대상 버킷, 콘텐츠 유형, 샘플링 전략과 같은 파라미터를 정의합니다. 이 커넥터가 호출될 경우 호출하는 Lambda 함수 또는 커넥터가 대상 피드백 구성을 지정합니다.

의 표시 이름AWS IoT콘솔: 피드백 구성 맵

: 필수true

Type: 지원되는 피드백 구성 세트를 정의하는 올바른 형식의 JSON 문자열입니다. 관련 예제는 FeedbackConfigurationMap 예제 섹션을 참조하세요

피드백 구성 객체의 ID는 다음 요구 사항을 충족해야 합니다.

ID:

  • 구성 객체 간에 고유해야 합니다.

  • 문자 또는 숫자로 시작해야 합니다. 소문자 및 대문자, 숫자, 하이픈(-)을 포함할 수 있습니다.

  • 2~63자 길이여야 합니다.

: 필수true

형식: string

유효한 패턴^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

예: MyConfig0, config-a, 12id

피드백 구성 객체의 본문은 다음 속성을 포함해야 합니다.

s3-bucket-name

대상 Amazon S3 버킷의 이름입니다.

참고

그룹 역할은 모든 대상 버킷에 대한 s3:PutObject 작업을 허용해야 합니다. 자세한 정보는 Requirements을 참조하십시오.

: 필수true

형식: string

유효한 패턴^[a-z0-9\.\-]{3,63}$

content-type

업로드할 샘플의 콘텐츠 유형입니다. 개별 피드백 구성에 대한 모든 콘텐츠는 동일한 유형이어야 합니다.

: 필수true

형식: string

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

s3-prefix

업로드된 샘플에 사용할 키 접두사입니다. 접두사는 디렉터리 이름과 유사합니다. 이를 사용해 한 버킷의 동일한 디렉터리 아래에 유사한 데이터를 저장할 수 있습니다. 자세한 내용은 단원을 참조하십시오.객체 키와 메타데이터Amazon Simple Storage Service 개발자 안내서.

: 필수false

형식: string

file-ext

업로드된 샘플에 사용할 파일 확장명입니다. 해당 콘텐츠 유형에 유효한 파일 확장명이어야 합니다.

: 필수false

형식: string

예: jpg, json, ogg

sampling-strategy

업로드할 샘플을 필터링하는 데 사용할 샘플링 전략입니다. 생략할 경우 커넥터가 수신하는 모든 샘플을 업로드하려고 시도합니다.

: 필수false

Type: 다음 속성을 포함하는 올바른 형식의 JSON 문자열입니다.

strategy-name

샘플링 전략의 이름입니다.

: 필수true

형식: string

유효한 값: RANDOM_SAMPLING, LEAST_CONFIDENCE, MARGIN 또는 ENTROPY

rate

무작위 샘플링 전략의 비율입니다.

: 필수true다음과 같은 경우strategy-nameisRANDOM_SAMPLING.

형식: number

유효한 값: 0.0 - 1.0

threshold

최소 신뢰도, 마진 또는 엔트로피 샘플링 전략의 임계값입니다.

: 필수true다음과 같은 경우strategy-nameisLEAST_CONFIDENCE,MARGIN또는ENTROPY.

형식: number

유효한 값:

  • LEAST_CONFIDENCE 또는 MARGIN 전략의 경우 0.0 - 1.0.

  • ENTROPY 전략의 경우 0.0 - no limit.

RequestLimit

커넥터가 한 번에 처리할 수 있는 요청의 최대 수입니다.

이 파라미터를 사용하여 커넥터가 동시에 처리할 수 있는 요청 수를 제한하면 메모리 사용을 제한할 수 있습니다. 이 제한을 초과하는 요청은 무시됩니다.

의 표시 이름AWS IoT콘솔: 제한 요청

: 필수false

형식: string

유효한 값: 0 - 999

유효한 패턴^$|^[0-9]{1,3}$

커넥터 만들기 예(AWS CLI)

다음 CLI 명령은ConnectorDefinitionML 피드백 커넥터가 포함된 초기 버전입니다.

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" } } ] }'

FeedbackConfigurationMap 예제

다음은 FeedbackConfigurationMap 파라미터의 확장된 예제 값입니다. 이 예제에는 서로 다른 샘플링 전략을 사용하는 여러 피드백 구성이 포함되어 있습니다.

{ "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" } }

샘플링 전략

이 커넥터는 커넥터로 전달되는 샘플을 업로드할지 여부를 결정하는 4개의 샘플링 전략을 지원합니다. 샘플은 모델이 예측을 위해 사용하는 개별 데이터 인스턴스입니다. 샘플링 전략을 사용하여 모델 정확성을 가장 개선할 수 있는 샘플을 선택할 수 있습니다.

RANDOM_SAMPLING

지정된 비율에 따라 무작위로 샘플을 업로드합니다. 무작위로 생성된 값이 비율보다 작은 경우 샘플을 업로드합니다. 비율이 높을수록 많은 샘플이 업로드됩니다.

참고

이 전략은 제공된 모델 예측을 모두 무시합니다.

LEAST_CONFIDENCE

최대 신뢰도 확률이 지정된 임계값보다 낮은 샘플을 업로드합니다.

예제 시나리오:

임계값: .6

모델 예측: [.2, .2, .4, .2]

최대 신뢰도 확률: .4

Result:

최대 신뢰도 확률(.4) <= 임계값(.6)이므로 샘플을 사용합니다.

MARGIN

두 신뢰도 확률 간 마진이 지정된 임계값 이내일 경우 샘플을 업로드합니다. 마진은 2개의 최대 확률 간 차이입니다.

예제 시나리오:

임계값: .02

모델 예측: [.3, .35, .34, .01]

2개의 최대 신뢰도 확률: [.35, .34]

마진: .01(.35 - .34)

Result:

마진(.01) <= 임계값(.02)이므로 샘플을 사용합니다.

ENTROPY

엔트로피가 지정된 임계값보다 높은 샘플을 사용합니다. 모델 예측의 정규화된 엔트로피를 사용합니다.

예제 시나리오:

임계값: 0.75

모델 예측: [.5, .25, .25]

예측 엔트로피: 1.03972

Result:

엔트로피(1.03972) > 임계값(0.75)이므로 샘플을 사용합니다.

입력 데이터

사용자 정의 Lambda 함수는publish함수feedback클라이언트AWS IoT GreengrassMachine Learning SDK를 사용하여 커넥터를 호출합니다. 관련 예제는 사용 예 섹션을 참조하세요

참고

이 커넥터는 MQTT 메시지를 입력 데이터로 허용하지 않습니다.

publish 함수는 다음 인수를 사용합니다.

ConfigId

대상 피드백 구성의 ID입니다. 이에 정의된 피드백 구성의 ID와 일치해야 합니다.FeedbackConfigurationMapML 피드백 커넥터에 대한 매개 변수입니다.

필수 항목: true

유형: 문자열

ModelInput

추론을 위해 모델에 전달된 입력 데이터입니다. 이 입력 데이터는 샘플링 전략에 의해 제외되지 않는 한 대상 구성을 사용하여 업로드됩니다.

필수 항목: true

유형: 바이트

ModelPrediction

모델의 예측 결과입니다. 결과 형식은 사전 또는 목록입니다. 예를 들어 ML 이미지 분류 커넥터의 예측 결과는 확률 목록입니다 (예:[0.25, 0.60, 0.15]). 이 데이터는 /feedback/message/prediction 주제에 게시됩니다.

필수 항목: true

: 유형: 사전 또는 목록float

Metadata

업로드된 샘플에 연결되고 /feedback/message/prediction 주제에 게시되는 고객이 정의한 애플리케이션 특정 메타데이터입니다. 또한 커넥터는 타임스탬프 값을 포함하여 publish-ts 키를 메타데이터에 삽입합니다.

False: false

Pastern:

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

출력 데이터

이 커넥터는 다음 3개의 MQTT 주제에 데이터를 게시합니다.

  • feedback/message/status 주제에 대한 커넥터의 상태 정보.

  • feedback/message/prediction 주제에 대한 예측 결과.

  • Amazon CloudWatch 지표는cloudwatch/metric/put주제.

커넥터가 MQTT 주제에서 통신할 수 있게 허용하도록 구독을 구성해야 합니다. 자세한 정보는 입력 및 출력을 참조하십시오.

주제 필터: feedback/message/status

이 주제를 사용하여 샘플 업로드 상태 및 삭제된 샘플을 모니터링합니다. 커넥터는 요청을 수신할 때마다 이 주제에 게시합니다.

출력 예: 샘플 업로드가 성공했습니다.
{ "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" }

이 커넥터는bucketkey필드를 Amazon S3에서 보낸 응답으로 전송합니다. Amazon S3 응답에 대한 자세한 내용은 단원을 참조하십시오.PUT 객체Amazon Simple Storage Service API Reference.

출력 예: 샘플링 전략 때문에 샘플이 삭제됨
{ "response": { "status": "sample_dropped_by_strategy" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
출력 예: 샘플 업로드가 실패함

실패 상태는 오류 메시지(error_message 값)와 예외 클래스(error 값)을 포함합니다.

{ "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" }
출력 예: 요청 제한 때문에 요청이 조절됨
{ "response": { "status": "fail", "error_message": "Request limit has been reached (max request: 10 ). Dropping request.", "error": "Queue.Full" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
주제 필터: feedback/message/prediction

이 주제를 사용하여 업로드된 샘플 데이터를 기반으로 예측을 수신 대기합니다. 그러면 모델 성능을 실시간으로 분석할 수 있습니다. 모델 예측은 데이터가 Amazon S3 성공적으로 업로드된 경우에만 이 주제에 게시됩니다. 이 주제에 게시되는 메시지는 JSON 형식입니다. 여기에 업로드된 데이터 객체에 대한 링크, 모델 예측 및 요청에 포함된 메타데이터가 포함됩니다.

또한 예측 결과를 저장하고 이를 사용하여 경시적 추세를 보고 및 분석할 수 있습니다. 추세는 가치 있는 통찰을 제공할 수 있습니다. 예를 들어 경시적으로 정확성이 감소하는 추세는 모델을 재교육해야 할지 여부를 결정하는 데 도움이 될 수 있습니다.

출력 예
{ "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" } }
작은 정보

구성 할 수 있습니다.IoT Analytics 커넥터을 클릭하여 이 주제를 구독하고AWS IoT Analytics추가 또는 기록 분석을 위해.

주제 필터: cloudwatch/metric/put

CloudWatch 에 지표를 게시하는 데 사용되는 출력 주제입니다. 이 기능을 사용하려면 설치 및 구성CloudWatch 지표 커넥터.

지표는 다음과 같습니다.

  • 업로드된 샘플 수.

  • 업로드된 샘플의 크기.

  • Amazon S3 업로드된 오류 수입니다.

  • 샘플링 전략에 따라 삭제된 샘플 수.

  • 조정된 요청 수.

출력 예: 데이터 샘플의 크기 (실제 업로드 전 게시됨)
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 47592, "unit": "Bytes", "metricName": "SampleSize" } } }
출력 예: 샘플 업로드가 성공했습니다.
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadSuccess" } } }
출력 예: 성공한 샘플 업로드 및 게시된 예측 결과
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleAndPredictionPublished" } } }
출력 예: 샘플 업로드가 실패함
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadFailure" } } }
출력 예: 샘플링 전략 때문에 샘플이 삭제됨
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleNotUsed" } } }
출력 예: 요청 제한 때문에 요청이 조절됨
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "ErrorRequestThrottled" } } }

사용 예

다음 예제에서는 사용 하는 사용자 정의 Lambda 함수AWS IoT GreengrassMachine Learning SDK를 사용하여 데이터를 ML 피드백 커넥터로 보냅니다.

참고

를 다운로드할 수 있습니다.AWS IoT GreengrassMachine Learning SDK에서AWS IoT Greengrass 다운로드 페이지.

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

Licenses

ML 피드백 커넥터에는 다음 타사 소프트웨어/라이선스가 포함되어 있습니다.

이 커넥터는 Greengrass 코어 소프트웨어 라이선스 계약에 따라 릴리스됩니다.

다음 사항도 참조하세요.