ML 피드백 커넥터 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023년 6월 30일에 수명 연장 단계에 들어갔습니다. AWS IoT Greengrass V1 관리형 정책에 대한 자세한 정보는 섹션을 참조하세요. 이 날짜 이후에는 기능, 개선 사항, 버그 수정 또는 보안 패치를 제공하는 업데이트가 AWS IoT Greengrass V1 릴리스되지 않습니다. 에서 실행되는 기기는 AWS IoT Greengrass V1 중단되지 않으며 계속 작동하고 클라우드에 연결됩니다. 새로운 기능이 크게 추가되고 추가 플랫폼에 대한 지원이 추가되는 으로 마이그레이션하는 AWS IoT Greengrass Version 2 것이 좋습니다.

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

ML 피드백 커넥터

주의

이 커넥터는 수명 연장 단계로 전환되었으며 AWS IoT Greengrass은(는) 기능, 기존 기능의 개선 사항, 보안 패치 또는 버그 수정을 제공하는 업데이트를 릴리스하지 않을 예정입니다. 자세한 내용은 AWS IoT Greengrass Version 1 유지 관리 정책 섹션을 참조하세요.

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

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

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

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

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

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

  • 사용자 정의 Lambda 함수와 함께 사용합니다. 로컬 추론 Lambda 함수는 AWS IoT Greengrass 기계 학습 SDK를 사용하여 이 커넥터를 간접 호출하고 대상 피드백 구성, 모델 입력, 모델 출력(예측 결과)을 전달합니다. 예시는 사용 예에서 확인하세요.

  • ML Image Classification 커넥터(v2) 사용. 이 커넥터를 ML Image Classification 커넥터와 함께 사용하려면 ML Image Classification 커넥터에 대해 MLFeedbackConnectorConfigId 파라미터를 구성합니다.

  • ML Object Detection 커넥터 사용. 이 커넥터를 ML Object Detection 커넥터와 함께 사용하려면 ML Object Detection 커넥터에 대해 MLFeedbackConnectorConfigId 파라미터를 구성합니다.

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

요구 사항

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

  • AWS IoT Greengrass 코어 소프트웨어 v1.9.3 이상.

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

    참고

    Python 3.8을 사용하려면 다음 명령을 실행하여 기본 Python 3.7 설치 폴더에서 설치된 Python 3.8 바이너리로 연결되는 심볼릭 링크를 만드십시오.

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

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

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

  • 다음 예제와 같이, 대상 Amazon S3 버킷의 객체에 대한 s3:PutObject 작업을 허용하는 Greengrass 그룹 역할에 IAM 정책을 추가해야 합니다.

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

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

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

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

  • 이 커넥터와 상호 작용하려면 AWS IoT Greengrass 기계 학습 SDK v1.1.0이 필요합니다.

파라미터

FeedbackConfigurationMap

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

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

필수: true

유형: 지원되는 피드백 구성 세트를 정의하는 올바른 형식의 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 작업을 허용해야 합니다. 자세한 내용은 요구 사항 섹션을 참조하세요.

필수: 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

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

strategy-name

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

필수: true

형식: string

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

rate

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

필수: strategy-nameRANDOM_SAMPLING인 경우 true.

형식: number

유효한 값: 0.0 - 1.0

threshold

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

필수: strategy-nameLEAST_CONFIDENCE, MARGIN, 또는 ENTROPY인 경우, true.

형식: 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 명령은 ML 피드백 커넥터가 포함된 초기 버전을 사용하여 ConnectorDefinition을 생성합니다.

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)이므로 샘플을 사용합니다.

입력 데이터

사용자 정의 publish 함수는 AWS IoT Greengrass 기계 학습 SDK에서 feedback 클라이언트의 Lambda 함수를 사용하여 커넥터를 간접 호출합니다. 예시는 사용 예에서 확인하세요.

참고

이 커넥터는 MQTT 메시지를 출력 데이터로 게시하지 않습니다.

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

ConfigId

대상 피드백 구성의 ID입니다. ML 피드백 커넥터에 대한 FeedbackConfigurationMap 파라미터에 정의된 피드백 구성의 ID와 일치해야 합니다.

필수: True

유형: 문자열

ModelInput

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

필수: True

유형: 바이트

ModelPrediction

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

필수: True

유형:float 값의 목록 또는 사전

Metadata

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

필수: 거짓

유형: 사전

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

출력 데이터

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

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

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

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

커넥터가 Amazon S3로부터의 응답에 bucketkey 필드를 추가합니다. Amazon S3 응답에 대한 자세한 내용은 Amazon Simple Storage Service API 참조PUT 객체를 참조하십시오.

출력 예: 샘플링 전략 때문에 샘플이 삭제됨
{ "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" } }
작은 정보

이 주제를 구독하고 추가 분석 또는 기록 분석을 위해 정보를 AWS IoT Analytics에 전송하도록 IoT Analytics 커넥터를 구성할 수 있습니다.

주제 필터: cloudwatch/metric/put

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

지표는 다음과 같습니다.

  • 업로드된 샘플 수.

  • 업로드된 샘플의 크기.

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

사용 예

다음 예제는 AWS IoT Greengrass 기계 학습 SDK를 사용하여 ML 피드백 커넥터로 데이터를 전송하는 사용자 정의 Lambda 함수입니다.

참고

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

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

라이선스

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

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

다음 사항도 참조하세요.