기계 학습 추론 수행 - 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 것이 좋습니다.

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

기계 학습 추론 수행

이 특성은 AWS IoT Greengrass 코어 v1.6 이상에 사용할 수 있습니다.

AWS IoT Greengrass을(를) 사용하여 클라우드 교육 모델을 사용하여 로컬 방식으로 생성된 데이터의 엣지에서 기계 학습(ML) 추론을 수행할 수 있습니다. 이를 통해 로컬 추론 실행의 낮은 지연 시간과 비용 절감이라는 이점을 얻을 수 있습니다. 그러면서도 모델 훈련 및 복잡한 처리에 필요한 클라우드 컴퓨팅 능력을 활용할 수 있습니다.

로컬 추론 수행을 시작하려면 AWS Management Console을 사용하여 기계 학습 추론을 구성하는 방법 단원을 참조하십시오.

AWS IoT Greengrass ML 추론 작동 방식

어디서든 추론 모델을 교육하고, 이를 Greengrass 그룹에서 기계 학습 리소스로서 로컬 방식으로 배포한 다음 Greengrass Lambda 함수에서 액세스할 수 있습니다. 예를 들어 SageMaker에서 딥 러닝 모델을 빌드 및 교육한 다음 이를 Greengrass 코어에 배포할 수 있습니다. Lambda 함수는 로컬 모델을 사용하여 연결된 디바이스에서 추론을 수행하고 새 교육 데이터를 클라우드로 전송할 수 있습니다.

다음 다이어그램은 AWS IoT Greengrass ML 추론 워크플로를 보여줍니다.

코어 디바이스, AWS IoT Greengrass 서비스 및 클라우드 교육 모델 사이의 기계 학습 흐름 및 정보 흐름 구성 요소

AWS IoT Greengrass ML 추론은 다음과 같은 ML 워크플로의 각 단계를 간소화합니다.

  • ML 프레임워크 프로토타입 빌드 및 배포.

  • 클라우드 교육 모델 액세스 및 Greengrass 코어 디바이스에 배포.

  • 하드웨어 액셀러레이터(GPU 및 FPGA 등)에 로컬 리소스로서 액세스할 수 있는 추론 앱 생성.

기계 학습 리소스

기계 학습 리소스는 AWS IoT Greengrass 코어에 배포된 클라우드 교육 추론 모델을 나타냅니다. 기계 학습 리소스를 배포하려면 리소스를 Greengrass 그룹에 추가한 다음 그룹의 Lambda 함수가 어떻게 액세스할 수 있는지 정의합니다. 그룹 배포 도중 AWS IoT Greengrass은(는) 클라우드에서 소스 모델 패키지를 검색하고 Lambda 런타임 네임스페이스 내에 있는 디렉터리에 이를 압축 해제합니다. 그런 다음 Greengrass Lambda 함수는 로컬 방식으로 배포된 모델을 사용하여 추론을 수행합니다.

로컬 방식으로 배포된 모델을 업데이트하려면 기계 학습 리소스에 해당하는 (클라우드상의) 소스 모델을 업데이트한 다음 그룹을 배포합니다. 배포 도중 AWS IoT Greengrass은(는) 소스의 변경 사항을 확인합니다. 변경 사항이 감지되는 경우 AWS IoT Greengrass은(는) 로컬 모델을 업데이트합니다.

지원되는 모델 소스

AWS IoT Greengrass은(는) 기계 학습 리소스에 SageMaker 및 Amazon S3 모델을 지원합니다.

다음 요구 사항은 모델 소스에 적용됩니다.

  • SageMaker와 Amazon S3 모델 소스를 저장하는 S3 버킷은 SSE-C를 사용하여 암호화해서는 안 됩니다. 서버 측 암호화를 사용하는 버킷의 경우 AWS IoT Greengrass ML 추론은 현재 SSE-S3 또는 SSE-KMS 암호화 옵션만 지원합니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서서버 측 암호화 옵션을 사용하여 데이터 보호를 참조하세요.

  • SageMaker 및 Amazon S3 모델 소스를 저장하는 S3 버킷의 이름에 마침표(.)를 포함해서는 안 됩니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서버킷 이름 지정 규칙에서 SSL과 함께 가상 호스팅 스타일 버킷을 사용하는 것과 관련된 규칙을 참조하십시오.

  • 서비스 수준 AWS 리전 지원을 AWS IoT GreengrassSageMaker 모두에 제공해야 합니다. 현재 AWS IoT Greengrass는 다음 리전에서 SageMaker 모델을 지원합니다.

    • 미국 동부(오하이오)

    • 미국 동부(버지니아 북부)

    • 미국 서부(오레건)

    • 아시아 태평양(뭄바이)

    • 아시아 태평양(서울)

    • 아시아 태평양(싱가포르)

    • 아시아 태평양(시드니)

    • 아시아 태평양(도쿄)

    • 유럽(프랑크푸르트)

    • 유럽(아일랜드)

    • 유럽(런던)

  • AWS IoT Greengrass은(는) 다음 단원에서 설명한 대로 모델 소스에 대한 read 권한을 보유해야 합니다.

SageMaker

AWS IoT Greengrass은(는) SageMaker 교육 작업으로 저장된 모델을 지원합니다. SageMaker는 내장형 또는 사용자 지정 알고리즘을 사용하여 모델을 빌드 및 교육할 수 있는 완전 관리형 ML 서비스입니다. 자세한 내용은 SageMaker 개발자 가이드SageMaker란?을 참조하세요.

이름에 sagemaker가 들어간 버킷을 생성하여 SageMaker 환경을 구성한 경우 AWS IoT Greengrass는 교육 작업에 액세스하는 적절한 권한을 보유합니다. AWSGreengrassResourceAccessRolePolicy 관리형 정책에서는 이름에 문자열 sagemaker가 포함된 버킷에 대한 액세스를 허용합니다. 이 정책은 Greengrass 서비스 역할에 연결됩니다.

그렇지 않으면 교육 작업이 저장된 버킷에 대한 AWS IoT Greengrass read 권한을 부여합니다. 이를 수행하려면 서비스 역할에 다음 인라인 정책을 포함시킵니다. 여러 버킷 ARN을 나열할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::my-bucket-name" ] } ] }
Amazon S3

AWS IoT Greengrass은(는) Amazon S3에 tar.gz 또는 .zip 파일로 저장된 모델을 지원합니다.

AWS IoT Greengrass이(가) Amazon S3 버킷에 저장된 모델에 액세스하도록 하려면 다음 중 하나를 수행하여 버킷에 액세스할 AWS IoT Greengrass read 권한을 부여해야 합니다.

  • 이름에 greengrass가 포함된 버킷에 모델을 저장합니다.

    AWSGreengrassResourceAccessRolePolicy 관리형 정책에서는 이름에 문자열 greengrass가 포함된 버킷에 대한 액세스를 허용합니다. 이 정책은 Greengrass 서비스 역할에 연결됩니다.

     

  • Greengrass 서비스 역할에 다음 인라인 정책을 포함시킵니다.

    버킷 이름에 greengrass가 포함되지 않는 경우 서비스 역할에 다음 인라인 정책을 추가합니다. 여러 버킷 ARN을 나열할 수 있습니다.

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

    자세한 내용은 IAM 사용 설명서인라인 정책 임베딩을 참조하세요.

요구 사항

기계 학습 리소스 생성 및 사용에는 다음 요구 사항이 적용됩니다.

  • 반드시 AWS IoT Greengrass Core v1.6 이상을 사용해야 합니다.

  • 사용자 정의 Lambda 함수는 리소스에 대한 read 또는 read and write 작업을 수행할 수 없습니다. 다른 작업을 할 수 있는 권한은 제공되지 않습니다. 연결된 Lambda 함수의 컨테이너화 모드는 액세스 권한을 설정하는 방법을 결정합니다. 자세한 내용은 Lambda 함수에서 기계 학습 리소스에 액세스 섹션을 참조하세요.

  • 코어 디바이스의 운영 체제에서 리소스의 전체 경로를 제공해야 합니다.

  • 리소스 이름이나 ID는 최대 128자이며, 패턴 [a-zA-Z0-9:_-]+을 사용해야 합니다.

ML 추론을 위한 런타임 및 라이브러리

AWS IoT Greengrass에서 다음 ML 런타임 및 라이브러리를 사용할 수 있습니다.

이러한 런타임 및 라이브러리는 NVIDIA Jetson TX2, Intel Atom 및 Raspberry Pi 플랫폼에 설치될 수 있습니다. 다운로드 정보는 지원되는 기계 학습 런타임 및 라이브러리 섹션을 참조하세요. 코어 디바이스에 직접 설치할 수 있습니다.

호환성 및 제한 사항에 대한 다음 정보를 참조해야 합니다.

SageMaker Neo 딥 러닝 런타임

SageMaker Neo 딥러닝 런타임을 사용해 AWS IoT Greengrass 디바이스에서 최적화된 기계 학습 모델로 추론을 수행할 수 있습니다. 이러한 모델은 기계 학습 추론 예측 속도를 개선하기 위해 SageMaker Neo 딥러닝 컴파일러를 사용해 최적화되었습니다. SageMaker의 모델 최적화에 대한 자세한 내용은 SageMaker Neo 설명서를 참조하십시오.

참고

현재는 특정 Amazon Web Services 지역에서만 Neo 딥러닝 컴파일러를 사용하여 기계 학습 모델을 최적화할 수 있습니다. 하지만 AWS IoT Greengrass 코어가 지원되는 각 AWS 리전에서는 최적화된 모델과 함께 Neo 딥 러닝 런타임을 사용할 수 있습니다. 자세한 내용은 최적화된 Machine Learning 추론을 구성하는 방법을 참조하십시오.

MXNet 버전 관리

Apache MXNet은 현재 다음 버전과의 호환성을 보장하지 않습니다. 따라서 이후 버전의 프레임워크를 사용하여 교육한 모델은 이전 버전의 프레임워크에서 제대로 작동하지 않을 수 있습니다. 모델 교육 및 모델 서비스 단계 사이의 충돌을 피하고, 일관된 종합적 경험을 제공하려면 모든 단계에서 동일한 MXNet 프레임워크 버전을 사용해야 합니다.

Raspberry Pi의 MXNet

로컬 MXNet 모델에 액세스하는 Lambda 함수는 다음과 같은 환경 변수를 설정해야 합니다.

MXNET_ENGINE_TYPE=NativeEngine

환경 변수를 함수 코드에 설정하거나 함수의 그룹별 구성에 추가할 수 있습니다. 환경 변수를 구성 설정으로 추가하는 예는 이 단계를 참조하십시오.

참고

타사 코드 예제 실행과 같이 MXNet 프레임워크를 일반적으로 사용하는 경우에는 환경 변수를 Raspberry Pi에서 구성해야 합니다.

Raspberry Pi에서의 TensorFlow 모델 서비스 제한 사항

추론 결과 개선을 위한 다음 권장 사항은 Raspberry Pi 플랫폼에서의 TensorFlow 32비트 ARM 라이브러리를 사용한 테스트를 기반으로 합니다. 이러한 권장 사항은 고급 사용자의 참조용만을 목적으로 하며, 어떤 것도 보장되지 않습니다.

  • Checkpoint 형식을 사용하여 교육된 모델은 서비스 전에 프로토콜 버퍼에 대해 고정되어야 합니다. 예를 들어 TensorFlow-Slim 이미지 분류 모델 라이브러리를 참조하십시오.

  • 교육 또는 추론 코드에서 TF-Estimator 및 TF-Slim 라이브러리를 사용하지 마십시오. 대신 다음 예제에 표시된 .pb 파일 모델 로드 패턴을 사용하십시오.

    graph = tf.Graph() graph_def = tf.GraphDef() graph_def.ParseFromString(pb_file.read()) with graph.as_default(): tf.import_graph_def(graph_def)
참고

TensorFlow에 대해 지원되는 플랫폼에 대한 자세한 내용은 TensorFlow 설명서의 Installing TensorFlow를 참조하십시오.