AWS Management Console을 사용하여 기계 학습 추론을 구성하는 방법 - 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 Management Console을 사용하여 기계 학습 추론을 구성하는 방법

이 튜토리얼의 단계를 수행하려면 AWS IoT Greengrass Core v1.10 이상이 필요합니다.

로컬로 생성된 데이터를 사용하여 Greengrass 코어 디바이스에서 로컬 방식으로 기계 학습(ML) 추론을 수행할 수 있습니다. 요구 사항과 제한 조건을 비롯한 자세한 내용은 기계 학습 추론 수행 단원을 참조하십시오.

이 자습서는 AWS Management Console을(를) 사용하고 Greengrass 그룹을 구성하여 클라우드로 데이터를 전송하지 않고 로컬 방식으로 카메라의 이미지를 인식하는 추론 앱을 실행합니다. 추론 앱은 Raspberry Pi의 카메라 모듈에 액세스하고 오픈 소스 SqueezeNet 모델을 사용하여 추론을 실행합니다.

자습서에는 다음과 같은 상위 수준 단계가 포함됩니다.

필수 조건

이 자습서를 완료하려면 다음이 필요합니다.

참고

이 자습서는 Raspberry Pi를 사용하지만 AWS IoT Greengrass는 Intel AtomNVIDIA Jetson TX2 등의 다른 플랫폼도 지원합니다. Jetson TX2의 예제에서는 카메라에서 스트리밍된 이미지 대신 정적 이미지를 사용할 수 있습니다. Jetson TX2 예제를 사용하는 경우 Python 3.7 대신 Python 3.6을 설치해야 할 수도 있습니다. AWS IoT Greengrass 코어 소프트웨어를 설치할 수 있도록 디바이스를 구성하는 방법에 대한 자세한 내용은 다른 디바이스 설정를 참조하십시오.

AWS IoT Greengrass이(가) 지원하지 않는 타사 플랫폼의 경우, Lambda 함수를 비컨테이너식 모드에서 실행해야 합니다. 비컨테이너식 모드에서 실행하려면 Lambda 함수를 루트로 실행해야 합니다. 자세한 정보는 Lambda 함수 컨테이너화 선택 시 고려 사항그룹에 있는 Lambda 함수의 기본 액세스 자격 증명 설정 섹션을 참조하세요.

1단계: Raspberry Pi 구성

이 단계에서는 Raspbian 운영 체제에 업데이트를 설치하고, 카메라 모듈 소프트웨어와 Python 종속성을 설치하며, 카메라 인터페이스를 활성화합니다.

Raspberry Pi 터미널에서 다음 명령을 실행합니다.

  1. Raspbian에 업데이트를 설치합니다.

    sudo apt-get update sudo apt-get dist-upgrade
  2. 이 자습서에 필요한 카메라 모듈에 대한 picamera 인터페이스 및 기타 Python 라이브러리를 설치합니다.

    sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picamera

    설치를 검사합니다.

    • Python 3.7 설치에 pip가 포함되어 있는지 확인합니다.

      python3 -m pip

      pip가 설치되어 있지 않으면 pip 웹 사이트에서 다운로드한 후 다음 명령을 실행합니다.

      python3 get-pip.py
    • Python 버전이 3.7 이상인지 확인합니다.

      python3 --version

      출력에 이전 버전이 나열되면 다음 명령을 실행합니다.

      sudo apt-get install -y python3.7-dev
    • Setuptools 및 Picamera가 성공적으로 설치되었는지 확인합니다.

      sudo -u ggc_user bash -c 'python3 -c "import setuptools"' sudo -u ggc_user bash -c 'python3 -c "import picamera"'

      출력에 오류가 포함되어 있지 않으면 검사가 성공한 것입니다.

    참고

    디바이스에 설치된 Python 실행 파일이 python3.7인 경우 이 자습서의 명령에 python3 대신 python3.7을 사용합니다. 종속성 오류를 피하기 위해 pip 설치가 올바른 python3.7 또는 python3 버전에 매핑되는지 확인하십시오.

  3. Raspberry Pi를 재부팅합니다.

    sudo reboot
  4. Raspberry Pi 구성 도구를 엽니다.

    sudo raspi-config
  5. 화살표 키를 사용하여 [Interfacing Options]를 열고 카메라 인터페이스를 활성화합니다. 메시지가 나타나면 디바이스 재부팅을 허용합니다.

  6. 다음 명령을 사용하여 카메라 설정을 테스트합니다.

    raspistill -v -o test.jpg

    그러면 Raspberry Pi의 미리 보기 창이 열리고, 현재 디렉터리에 test.jpg라는 이름의 사진이 저장되며, 카메라에 대한 정보가 Raspberry Pi 터미널에 표시됩니다.

2단계: MXNet 프레임워크 설치

이 단계에서는 Raspberry Pi에 MXNet 라이브러리를 설치합니다.

  1. Raspberry Pi에 원격으로 로그인합니다.

    ssh pi@your-device-ip-address
  2. MXNet 설명서의 MXNet 설치에 나온 지침을 따라 디바이스에 MXNet을 설치합니다.

    참고

    디바이스 충돌을 방지하려면 이 튜토리얼에서는 버전 1.5.0을 설치하고 소스에서 MXNet을 구축하는 것을 권장합니다.

  3. MXNet을 설치한 후 다음 구성을 검사합니다.

    • ggc_user 시스템 계정에서 MXNet 프레임워크를 사용할 수 있는지 확인합니다.

      sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
    • NumPy가 설치되어 있는지 확인합니다.

      sudo -u ggc_user bash -c 'python3 -c "import numpy"'

3단계: MXNet 모델 패키지 생성

이 단계에서는 Amazon Simple Storage Service (Amazon S3)에 업로드할 사전 훈련된 MXNet 모델 샘플을 포함하는 모델 패키지를 생성합니다. AWS IoT Greengrass는 의 모델 패키지(tar.gz 또는 zip 형식인 경우)를 사용할 수 있습니다.

  1. 기계 학습 샘플에 나온 Raspberry Pi용 MXNet 샘플을 컴퓨터에 다운로드합니다.

  2. 다운로드한 mxnet-py3-armv7l.tar.gz 파일의 압축을 풉니다.

  3. squeezenet 디렉터리로 이동합니다.

    cd path-to-downloaded-sample/mxnet-py3-armv7l/models/squeezenet

    이 디렉터리의 squeezenet.zip 파일은 모델 패키지로, 이미지 분류 모델에 대한 SquezeNet 오픈 소스 모델 아티팩트를 포함하고 있습니다. 이후에 이 모델 패키지를 Amazon S3에 업로드합니다.

4단계: Lambda 함수 생성 및 게시

이 단계에서는 Lambda 함수 배포 패키지 및 Lambda 함수를 생성합니다. 그런 다음 함수 버전을 게시하고 별칭을 생성합니다.

먼저 Lambda 함수 배포 패키지를 생성합니다.

  1. 컴퓨터에서 3단계: MXNet 모델 패키지 생성에서 압축을 푼 샘플 패키지의 examples 디렉터리로 이동합니다.

    cd path-to-downloaded-sample/mxnet-py3-armv7l/examples

    examples 디렉터리에는 함수 코드와 종속성이 포함되어 있습니다.

    • greengrassObjectClassification.py는 이 자습서에서 사용되는 추론 코드입니다. 이 코드를 템플릿으로 사용하여 사용자 고유의 추론 함수를 생성할 수 있습니다.

    • greengrasssdk은(는) Python용 AWS IoT Greengrass 코어 SDK 버전 1.5.0입니다.

      참고

      새 버전을 사용할 수 있는 경우 해당 버전을 다운로드하여 배포 패키지의 SDK 버전을 업그레이드할 수 있습니다. 자세한 내용은 GitHub의 Python용 AWS IoT Greengrass 코어 SDK를 참조하세요.

  2. examples 디렉터리의 내용을 greengrassObjectClassification.zip라는 파일로 압축합니다. 이것은 배포 패키지입니다.

    zip -r greengrassObjectClassification.zip .
    참고

    .py 파일 및 종속성이 디렉터리의 루트에 있는지 확인합니다.

     

    다음으로, Lambda 함수를 생성합니다.

  3. AWS IoT 콘솔에서 함수를 선택하고 함수 생성을 선택합니다.

  4. 새로 작성을 선택하고 다음 값을 사용하여 함수를 생성합니다.

    • [함수 이름(Function name)]에 greengrassObjectClassification을 입력합니다.

    • 실행 시간에서 Python 3.7을 선택합니다.

    권한의 경우, 기본 설정을 유지합니다. 이를 통해 기본 Lambda 권한을 부여하는 실행 역할을 생성합니다. 이 역할은 AWS IoT Greengrass에서 사용되지 않습니다.

  5. 함수 생성(Create function)을 선택합니다.

     

    이제 Lambda 함수 배포 패키지를 업로드하고 핸들러를 등록합니다.

  6. Lambda 함수를 선택하고 Lambda 함수 배포 패키지를 업로드하십시오.

    1. 코드 탭의 코드 소스에서 다음에서 업로드를 선택합니다. 드롭다운에서 .zip 파일을 선택합니다.

      .zip 파일이 강조 표시된 드롭다운의 업로드.
    2. 업로드를 선택한 다음 greengrassObjectClassification.zip 배포 패키지를 선택합니다. 그런 다음 저장(Save)을 선택합니다.

    3. 함수의 코드 탭에 있는 런타임 설정에서 편집을 선택하고 다음 값을 입력합니다.

      • 실행 시간에서 Python 3.7을 선택합니다.

      • 핸들러greengrassObjectClassification.function_handler를 입력합니다.

      Save를 선택합니다.

    그런 다음 Lambda 함수의 첫 번째 버전을 게시합니다. 그런 다음 버전의 별칭을 생성합니다.

    참고

    Greengrass 그룹은 별칭(권장) 또는 버전을 기준으로 Lambda 함수를 참조할 수 있습니다. 별칭을 사용하면 함수 코드를 업데이트할 때 구독 테이블이나 그룹 정의를 변경할 필요가 없으므로 코드 업데이트를 더 쉽게 관리할 수 있습니다. 그 대신 새 함수 버전에 대한 별칭을 가리킵니다.

  7. [Actions] 메뉴에서 [Publish new revision]을 선택합니다.

    작업 메뉴의 새 버전 게시 옵션
  8. 버전 설명First version을 입력한 후 게시를 선택합니다.

  9. [greengrassObjectClassification: 1] 구성 페이지의 [Actions] 메뉴에서 [Create alias]를 선택합니다.

    작업 메뉴의 별칭 생성 옵션
  10. [Create a new alias] 페이지에서 다음 값을 사용합니다.

    • 이름(Name)mlTest을 입력합니다.

    • 버전1를 입력합니다.

    참고

    AWS IoT Greengrass은(는) $LATEST 버전에서 Lambda 별칭을 지원하지 않습니다.

  11. Save를 선택합니다.

     

    이제 Greengrass 그룹에 Lambda 함수를 추가합니다.

5단계: Greengrass 그룹에 Lambda 함수 추가

이 단계에서 그룹에 Lambda 함수를 추가한 다음 수명 주기와 환경 변수를 구성합니다.

먼저 Greengrass 그룹에 Lambda 함수를 추가합니다.

  1. AWS IoT 콘솔 탐색 창의 관리에서 Greengrass 디바이스를 확장한 다음 그룹(V1)을 선택합니다.

  2. 그룹 구성 페이지에서 Lambda 함수 탭을 선택합니다.

  3. 내 Lambda 함수 섹션에서 추가를 선택합니다.

  4. Lambda 함수에서 greengrassObjectClassification를 선택합니다.

  5. Lambda 함수 버전의 경우 Alias:mlTest를 선택하십시오.

     

    그 다음, Lambda 함수의 수명 주기와 환경 변수를 구성합니다.

  6. Lambda 함수 구성 섹션에서 다음과 같이 업데이트하십시오.

    참고

    비즈니스 사례에서 요구하지 않는 한 컨테이너화 없이 Lambda 함수를 실행하는 것이 좋습니다. 이렇게 하면 디바이스 리소스를 구성하지 않고도 디바이스 GPU와 카메라에 액세스할 수 있습니다. 컨테이너화 없이 실행하는 경우 AWS IoT Greengrass Lambda 함수에 대한 루트 액세스 권한도 부여해야 합니다.

    1. 컨테이너화 없이 실행하려면:

    2. 대신 컨테이너화 모드에서 실행하려면:

      참고

      비즈니스 사례에서 요구하는 경우가 아니면 컨테이너화 모드에서 실행하지 않는 것이 좋습니다.

      • 시스템 사용자 및 그룹의 경우 그룹 기본값 사용을 선택합니다.

      • Lambda 함수 컨테이너화의 경우 그룹 기본값 사용을 선택합니다.

      • 메모리 제한96 MB를 입력합니다.

      • 시간 제한10 seconds를 입력합니다.

      • 고정된 경우 True를 선택합니다.

        자세한 내용은 Greengrass Lambda 함수의 라이프사이클 구성 섹션을 참조하세요.

  7. 환경 변수에서 키-값 페어를 생성합니다. 키-값 페어는 Raspberry Pi에서 MXNet 모델과 상호 작용하는 함수에 필요합니다.

    키에 MXNET_ENGINE_TYPE를 사용합니다. 값에 NaiveEngine을 사용합니다.

    참고

    자신의 사용자 정의 Lambda 함수에서는 함수 코드에 환경 변수를 선택적으로 설정할 수 있습니다.

  8. 다른 모든 속성을 위해 기본 값을 유지하고 Lambda 함수 추가를 선택합니다.

6단계: Greengrass 그룹에 리소스 추가

이 단계에서 카메라 모듈 및 ML 추론 모델에 대한 리소스를 생성하고 Lambda 함수와 리소스를 연결하여 Lambda 함수가 코어 디바이스의 리소스에 액세스할 수 있도록 합니다.

참고

비컨테이너화 모드에서 실행하는 경우 AWS IoT Greengrass은(는) 이 디바이스 리소스를 구성하지 않고도 디바이스 GPU와 카메라에 액세스할 수 있습니다.

우선 카메라에 대해 2개의 로컬 디바이스 리소스를 생성합니다. 하나는 공유 메모리용이고, 다른 하나는 디바이스 인터페이스용입니다. 로컬 리소스 액세스에 대한 자세한 내용은 Lambda 함수와 커넥터를 사용하여 로컬 리소스에 액세스 단원을 참조하십시오.

  1. 그룹 구성 페이지에서 리소스를 선택합니다.

  2. 로컬 리소스 탭에서 로컬 리소스 추가를 선택합니다.

  3. 로컬 리소스 생성 페이지에서 다음 값을 사용합니다.

    • 리소스 이름videoCoreSharedMemory을 입력합니다.

    • [Resource type]에서 [Device]를 선택합니다.

    • 디바이스 경로/dev/vcsm를 입력합니다.

      디바이스 경로는 디바이스 리소스의 로컬 절대 경로입니다. 이 경로는 /dev 아래에 있는 문자 디바이스 또는 블록 디바이스만 참조할 수 있습니다.

    • System group owner and file access permissions에서 [Automatically add OS group permissions of the Linux group that owns the resource]를 선택합니다.

      시스템 그룹 소유자 및 파일 액세스 권한 옵션을 사용하면 Lambda 프로세스에 추가 파일 액세스 권한을 부여할 수 있습니다. 자세한 내용은 그룹 소유자 파일 액세스 권한 섹션을 참조하세요.

  4. 다음으로 카메라 인터페이스에 대한 로컬 디바이스 리소스를 추가합니다.

  5. 로컬 리소스 추가를 선택합니다.

  6. 로컬 리소스 생성 페이지에서 다음 값을 사용합니다.

    • 리소스 이름videoCoreInterface을 입력합니다.

    • [Resource type]에서 [Device]를 선택합니다.

    • 디바이스 경로/dev/vchiq를 입력합니다.

    • [Group owner file access permission]에서 [Automatically add OS group permissions of the Linux group that owns the resource]를 선택합니다.

  7. 페이지 하단에서 다른 리소스 추가를 선택합니다.

 

이제 기계 학습 리소스로서 추론 모델을 추가합니다. 이 단계에서 squeezenet.zip 모델 패키지를 Amazon S3에 업로드합니다.

  1. 리소스 페이지에서 기계 학습을 선택한 후 기계 학습 리소스 추가를 선택합니다.

  2. 머신 러닝 리소스 생성 페이지에서 리소스 이름에 squeezenet_model을 입력합니다.

  3. 모델 소스의 경우 S3에 저장된 모델(예: 딥 러닝 컴파일러를 통해 최적화된 모델)을 선택합니다.

  4. S3 URI의 경우 S3 버킷이 저장된 경로를 입력합니다.

  5. S3 찾아보기(Browse S3)를 선택합니다. 그러면 새로운 Amazon S3 콘솔 탭이 열립니다.

  6. Amazon S3 콘솔 탭에서 squeezenet.zip 파일을 S3 버킷에 업로드합니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서S3 버킷에 파일 및 폴더를 업로드하려면 어떻게 해야 합니까?를 참조하십시오.

    참고

    S3 버킷에 액세스할 수 있으려면 버킷 이름에 문자열 greengrass이(가) 포함되어야 하고 버킷은 AWS IoT Greengrass을(를) 사용하는 리전과 동일한 리전에 있어야 합니다. 고유한 이름을 선택합니다(예: greengrass-bucket-user-id-epoch-time). 버킷 이름에는 마침표(.)를 사용하지 마십시오.

  7. AWS IoT Greengrass 콘솔 탭에서S3 버킷을 찾아 선택합니다. 업로드한 squeezenet.zip 파일을 찾아 선택을 선택합니다. 사용 가능한 버킷과 파일의 목록을 업데이트하려면 새로 고침을 선택 하십시오.

  8. [Destination path]에 [/greengrass-machine-learning/mxnet/squeezenet]을 입력합니다.

    Lambda 런타임 네임스페이스에 있는 로컬 모델의 대상입니다. 그룹을 배포할 때 AWS IoT Greengrass은(는) 소스 모델 패키지를 검색하고 지정된 디렉터리에 내용을 압축 해제합니다. 이 자습서에 대한 샘플 Lambda 함수는 이미 (model_path 변수에서) 이 경로를 사용하도록 구성되었습니다.

  9. 시스템 그룹 소유자 및 파일 액세스 권한에서 시스템 그룹 없음을 선택합니다.

  10. 리소스 추가를 선택합니다.

SageMaker 학습 모델 사용

이 자습서는 Amazon S3에 저장된 모델을 사용합니다. 하지만 모델 또한 손쉽게 사용할 수 있습니다. AWS IoT Greengrass 콘솔에는 통합이 내장되어 있습니다. 따라서 수동으로 이러한 모델을 Amazon S3로 업로드할 필요가 없습니다. SageMaker 모델 사용 요구 사항 및 제한 사항은 지원되는 모델 소스을 참조하십시오.

SageMaker 모델을 사용하려면:

  • Model source에서 Use a model trained in AWS SageMaker을 선택한 다음 모델의 교육 작업 이름을 선택합니다.

  • 대상 경로에 Lambda 함수가 모델을 찾는 디렉터리 경로를 입력합니다.

7단계: Greengrass 그룹에 구독 추가

이 단계에서는 그룹에 구독을 추가합니다. 이 구독을 통해 Lambda 함수가 MQTT 주제를 게시함으로써 AWS IoT에 결과를 전송할 수 있습니다.

  1. 그룹 구성 페이지에서 구독을 선택한 다음 구독 추가를 선택합니다.

  2. 구독 세부정보 페이지에서 다음과 같이 원본 및 대상을 구성합니다.

    1. 소스 유형에서 Lambda 함수를 선택한 다음 greengrassObjectClassification을 선택합니다.

    2. 대상 선택에서 서비스를 선택한 후 IoT Cloud를 선택합니다.

  3. 주제 필터에서 hello/world을(를) 입력한 다음 구독 생성을 선택합니다.

8단계: Greengrass 그룹 배포

이 단계에서는 그룹 정의의 현재 버전을 Greengrass 코어 디바이스로 배포합니다. 정의에는 추가한 Lambda 함수, 리소스 및 구독 구성이 포함됩니다.

  1. AWS IoT Greengrass 코어가 실행 중인지 확인합니다. 필요한 경우 Raspberry Pi 터미널에서 다음 명령을 실행합니다.

    1. 데몬이 실행 중인지 확인하려면:

      ps aux | grep -E 'greengrass.*daemon'

      출력에 root에 대한 /greengrass/ggc/packages/1.11.6/bin/daemon 입력이 포함되어 있는 경우에는 데몬이 실행 중인 것입니다.

      참고

      경로의 버전은 코어 디바이스에 설치된 AWS IoT Greengrass 코어 소프트웨어 버전에 따라 다릅니다.

    2. 데몬을 시작하려면:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 그룹 구성 페이지에서 배포를 선택합니다.

    배포와 배포가 강조 표시된 그룹 페이지
  3. Lambda 함수 탭시스템 Lambda 함수 섹션에서 IP 감지기를 선택하고 편집을 선택합니다.

  4. IP 감지기 설정 편집 대화 상자에서 MQTT 브로커 엔드포인트 자동 탐지 및 재정의를 선택합니다.

  5. Save를 선택합니다.

    이렇게 하면 디바이스가 IP 주소, DNS, 포트 번호 등 코어의 연결 정보를 자동으로 획득할 수 있습니다. 자동 탐지가 바람직하지만 AWS IoT Greengrass은(는) 수동으로 지정된 엔드포인트도 지원합니다. 그룹이 처음 배포될 때만 검색 방법 메시지가 표시됩니다.

    참고

    메시지가 표시되면 Greengrass 서비스 역할을 생성할 권한을 부여하고 이 권한을 현재 AWS 리전의 AWS 계정과 연결합니다. 이 역할은 AWS IoT Greengrass가 AWS 서비스의 리소스에 액세스할 수 있습니다.

    배포 페이지에 배포 타임스탬프, 버전 ID, 상태가 표시됩니다. 완료되면 배포에 대해 성공적으로 완료했습니다 상태가 표시되어야 합니다.

    배포에 대한 자세한 내용은 AWS IoT Greengrass 코어에 AWS IoT Greengrass 그룹 배포 섹션을 참조하세요. 문제 해결에 대한 도움말은 AWS IoT Greengrass 문제 해결 단원을 참조하십시오.

9단계: 추론 앱 테스트

이제 배포가 올바르게 구성되었는지 확인할 수 있습니다. 테스트하려면 hello/world 주제를 구독하고 Lambda 함수가 게시하는 예측 결과를 봅니다.

참고

Raspberry Pi에 모니터가 연결된 경우 라이브 카메라 피드가 미리 보기 창에 표시됩니다.

  1. AWS IoT 콘솔의 테스트에서 MQTT 테스트 클라이언트를 선택합니다.

  2. [Subscriptions]에서 다음 값을 사용합니다.

    • 구독 주제에 hello/world를 사용합니다.

    • MQTT 페이로드 표시의 경우 추가 구성에서 페이로드를 문자열로 표시를 선택합니다.

  3. 구독을 선택합니다.

    테스트가 성공적인 경우 페이지 하단에 Lambda 함수로부터의 메시지가 표시됩니다. 각 메시지에는 이미지의 상위 5개 예측 결과가 포함되며 가능성, 예측된 클래스 ID 및 해당 클래스 이름 형식을 사용합니다.

    메시지 데이터가 포함된 테스트 결과를 보여주는 Subscriptions 페이지

AWS IoT Greengrass ML 추론 문제 해결

테스트가 성공적이지 않은 경우 다음 문제 해결 단계를 시도할 수 있습니다. Raspberry Pi 터미널에서 명령을 실행합니다.

오류 로그 확인

  1. 루트 사용자로 전환하고 log 디렉터리로 이동합니다. AWS IoT Greengrass 로그 액세스에는 루트 권한이 필요합니다.

    sudo su cd /greengrass/ggc/var/log
  2. system 디렉터리에서 runtime.log 또는 python_runtime.log를 확인합니다.

    user/region/account-id 디렉터리에서 greengrassObjectClassification.log를 확인합니다.

    자세한 내용은 로그 문제 해결 섹션을 참조하세요.

runtime.log의 압축 해제 오류

runtime.log에 다음과 유사한 오류가 포함된 경우 tar.gz 소스 모델 패키지에 상위 디렉터리가 있어야 합니다.

Greengrass deployment error: unable to download the artifact model-arn: Error while processing. Error while unpacking the file from /tmp/greengrass/artifacts/model-arn/path to /greengrass/ggc/deployment/path/model-arn, error: open /greengrass/ggc/deployment/path/model-arn/squeezenet/squeezenet_v1.1-0000.params: no such file or directory

패키지에 모델 파일을 포함하는 상위 디렉터리가 없는 경우 다음 명령을 사용하여 모델을 리패키지합니다.

tar -zcvf model.tar.gz ./model

예:

─$ tar -zcvf test.tar.gz ./test ./test ./test/some.file ./test/some.file2 ./test/some.file3
참고

이 명령에 후행 /* 문자를 포함시키지 마십시오.

 

Lambda 함수가 성공적으로 배포되었는지 확인

  1. /lambda 디렉터리에 있는 배포된 Lambda의 내용을 나열합니다. 명령을 실행하기 전에 자리 표시자 값을 바꿉니다.

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. 디렉터리에 4단계: Lambda 함수 생성 및 게시에 업로드한 greengrassObjectClassification.zip 배포 패키지와 동일한 콘텐츠가 들어 있는지 확인하십시오.

    .py 파일 및 종속성이 디렉터리의 루트에 있는지 확인합니다.

 

추론 모델이 성공적으로 배포되었는지 확인

  1. Lambda 런타임 프로세스의 프로세스 식별 번호(PID)를 찾습니다.

    ps aux | grep 'lambda-function-name*'

    출력의 Lambda 런타임 프로세스에 대한 행의 두 번째 열에 PID가 표시됩니다.

  2. Lambda 런타임 네임스페이스를 입력합니다. 명령을 실행하기 전에 자리 표시자 pid 값을 바꿔야 합니다.

    참고

    이 디렉터리 및 내용은 Lambda 런타임 네임스페이스입니다. 따라서 정규 Linux 네임스페이스에서는 보이지 않습니다.

    sudo nsenter -t pid -m /bin/bash
  3. ML 리소스에 대해 지정한 로컬 디렉터리의 내용을 나열합니다.

    cd /greengrass-machine-learning/mxnet/squeezenet/ ls -ls

    다음 파일이 표시됩니다.

    32 -rw-r--r-- 1 ggc_user ggc_group   31675 Nov 18 15:19 synset.txt 32 -rw-r--r-- 1 ggc_user ggc_group   28707 Nov 18 15:19 squeezenet_v1.1-symbol.json 4832 -rw-r--r-- 1 ggc_user ggc_group 4945062 Nov 18 15:19 squeezenet_v1.1-0000.params

다음 단계

지금부터는 다른 추론 앱을 살펴봅니다. AWS IoT Greengrass은(는) 로컬 추론을 시도할 때 사용할 수 있는 기타 Lambda 함수를 제공합니다. 2단계: MXNet 프레임워크 설치 단계에서 다운로드한 프리컴파일 라이브러리 폴더에서 예제 패키지를 찾을 수 있습니다.

Intel Atom 구성

Intel Atom 디바이스에서 이 자습서를 실행하려면 소스 이미지를 제공하고 Lambda 함수를 구성한 후 다른 로컬 디바이스 리소스를 추가합니다. 추론에 GPU를 사용하려면 다음 소프트웨어가 디바이스에 설치되어 있어야 합니다.

  • OpenCL 버전 1.0 이상

  • Python 3.7 및 pip

    참고

    디바이스가 Python 3.6으로 미리 빌드된 경우 Python 3.7에 대한 심볼 링크를 대신 만들 수 있습니다. 자세한 내용은 단계 2 섹션을 참조하세요.

  • NumPy

  • OpenCV on Wheels

  1. 이미지 분류에 사용하기 위해 Lambda 함수에 대한 정적 PNG 또는 JPG 이미지를 다운로드합니다. 이 예제는 작은 이미지 파일에 가장 효과적입니다.

    greengrassObjectClassification.py 파일이 들어 있는 디렉터리(또는 이 디렉터리의 하위 디렉터리)에 이미지 파일을 저장합니다. 이 파일은 4단계: Lambda 함수 생성 및 게시에서 업로드하는 Lambda 함수 배포 패키지에 있습니다.

    참고

    AWS DeepLens를 사용하는 경우, 온보드 카메라를 사용하거나 본인의 카메라를 장착해 정적 이미지가 아닌 캡처된 이미지에 대해 추론을 수행할 수 있습니다. 그러나 정적 이미지부터 시작하는 것이 좋습니다.

    카메라를 사용하는 경우 awscam APT 패키지가 설치되어 있고 최신 상태여야 합니다. 자세한 내용은 AWS DeepLens 개발자 안내서AWS DeepLens 코어 디바이스 설정 섹션을 참조하세요.

  2. Lambda 함수 구성을 편집합니다. 5단계: Greengrass 그룹에 Lambda 함수 추가의 프로시저를 따르세요.

    참고

    비즈니스 사례에서 요구하지 않는 한 컨테이너화 없이 Lambda 함수를 실행하는 것이 좋습니다. 이렇게 하면 디바이스 리소스를 구성하지 않고도 디바이스 GPU와 카메라에 액세스할 수 있습니다. 컨테이너화 없이 실행하는 경우 AWS IoT Greengrass Lambda 함수에 대한 루트 액세스 권한도 부여해야 합니다.

    1. 컨테이너화 없이 실행하려면:

      • 시스템 사용자 및 그룹의 경우 Another user ID/group ID을(를) 선택합니다. 시스템 사용자 ID0을(를) 입력합니다. 시스템 그룹 ID0을(를) 입력합니다.

        이렇게 하면 Lambda 함수를 루트로 실행할 수 있습니다. 작업 실행 방법에 대한 자세한 내용은 그룹에 있는 Lambda 함수의 기본 액세스 자격 증명 설정 섹션을 참조하세요.

        작은 정보

        또한 Lambda 함수에 루트 액세스 권한을 부여하도록 config.json 파일을 업데이트해야 합니다. 이 절차는 루트로서의 Lambda 함수 실행 섹션을 참조하세요.

      • Lambda 함수 컨테이너화의 경우 컨테이너 없음을 선택합니다.

        속도 제어 자동화 실행에 대한 자세한 내용은 Lambda 함수 컨테이너화 선택 시 고려 사항 섹션을 참조하세요.

      • 제한 시간 값을 5초로 업데이트합니다. 이렇게 하면 요청이 제한 시간에 너무 빨리 도달하는 경우를 피할 수 있습니다. 설정 후 추론이 실행되려면 몇 분이 걸립니다.

      • 고정에서 True를 선택합니다.

      • 추가 매개 변수에서 /sys 디렉터리에 대한 읽기 액세스에 대해 활성화를 선택합니다.

      • Lambda 수명 주기에 대해 Make this function long-lived and keep it running indefinitely를 선택합니다.

    2. 대신 컨테이너화 모드에서 실행하려면:

      참고

      비즈니스 사례에서 요구하는 경우가 아니면 컨테이너화 모드에서 실행하지 않는 것이 좋습니다.

      • 제한 시간 값을 5초로 업데이트합니다. 이렇게 하면 요청이 제한 시간에 너무 빨리 도달하는 경우를 피할 수 있습니다. 설정 후 추론이 실행되려면 몇 분이 걸립니다.

      • 고정된 경우 True를 선택합니다.

      • 추가 매개 변수에서 /sys 디렉터리에 대한 읽기 액세스에 대해 활성화를 선택합니다.

  3. 컨테이너화 모드에서 실행 중인 경우 필요한 로컬 디바이스 리소스를 추가하여 디바이스 GPU에 대한 액세스 권한을 부여하십시오.

    참고

    비컨테이너화 모드에서 실행하는 경우 AWS IoT Greengrass은(는) 디바이스 리소스를 구성하지 않고도 디바이스 GPU에 액세스할 수 있습니다.

    1. 그룹 구성 페이지에서 리소스를 선택합니다.

    2. 로컬 리소스 추가를 선택합니다.

    3. 리소스를 정의합니다.

      • 리소스 이름renderD128을 입력합니다.

      • 리소스 유형에서 로컬 디바이스를 선택합니다.

      • 디바이스 경로/dev/dri/renderD128을 입력합니다.

      • [Group owner file access permission]에서 [Automatically add OS group permissions of the Linux group that owns the resource]를 선택합니다.

      • Lambda 함수 제휴의 경우 Lambda 함수에 대한 읽기 및 쓰기 액세스 권한을 부여하십시오.

NVIDIA Jetson TX2 구성

NVIDIA Jetson TX2에서 이 자습서를 실행하려면 소스 이미지를 제공하고 Lambda 함수를 구성합니다. GPU를 사용하는 경우 로컬 디바이스 리소스도 추가해야 합니다.

  1. AWS IoT Greengrass 코어 소프트웨어를 설치할 수 있도록 Jetson 디바이스가 구성되어 있는지 확인합니다. 디바이스 구성에 대한 자세한 내용은 다른 디바이스 설정 단원을 참조하십시오.

  2. MXNet 설명서의 Jetson에 MXNet 설치에 나온 지침을 따라 Jetson 디바이스에 MXNet을 설치합니다.

    참고

    소스에서 MXNet을 빌드하려면 지침을 따라 공유 라이브러리를 빌드합니다. Jetson TX2 디바이스에서 작동하도록 config.mk 파일에서 다음 설정을 편집합니다.

    • CUDA_ARCH 설정에 -gencode arch=compute-62, code=sm_62를 추가합니다.

    • CUDA를 활성화합니다.

      USE_CUDA = 1
  3. 이미지 분류에 사용하기 위해 Lambda 함수에 대한 정적 PNG 또는 JPG 이미지를 다운로드합니다. 이 앱은 작은 이미지 파일에 가장 적합합니다. 또는 Jetson 보드의 카메라를 구성하여 소스 이미지를 캡처할 수 있습니다.

    greengrassObjectClassification.py 파일이 들어 있는 디렉터리에 이미지 파일을 저장합니다. 이 디렉터리의 하위 디렉터리에 저장할 수도 있습니다. 이 디렉터리는 4단계: Lambda 함수 생성 및 게시에서 업로드하는  Lambda 함수 배포 패키지에 있습니다.

  4. AWS IoT Greengrass와 함께 Python 3을 사용하려면 Python 3.7에서 Python 3.6으로 심볼 링크를 생성합니다. 다음 명령을 실행하여 Python 설치를 찾습니다.

    which python3

    다음 명령을 실행하여 심볼 링크(symlink)를 생성합니다.

    sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7

    디바이스를 재부팅합니다.

  5. ggc_user 시스템 계정에서 MXNet 프레임워크를 사용할 수 있는지 확인합니다.

    “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
  6. Lambda 함수 구성을 편집합니다. 5단계: Greengrass 그룹에 Lambda 함수 추가의 프로시저를 따르세요.

    참고

    비즈니스 사례에서 요구하지 않는 한 컨테이너화 없이 Lambda 함수를 실행하는 것이 좋습니다. 이렇게 하면 디바이스 리소스를 구성하지 않고도 디바이스 GPU와 카메라에 액세스할 수 있습니다. 컨테이너화 없이 실행하는 경우 AWS IoT Greengrass Lambda 함수에 대한 루트 액세스 권한도 부여해야 합니다.

    1. 컨테이너화 없이 실행하려면:

      • 시스템 사용자 및 그룹의 경우 Another user ID/group ID을(를) 선택합니다. 시스템 사용자 ID0을(를) 입력합니다. 시스템 그룹 ID0을(를) 입력합니다.

        이렇게 하면 Lambda 함수를 루트로 실행할 수 있습니다. 작업 실행 방법에 대한 자세한 내용은 그룹에 있는 Lambda 함수의 기본 액세스 자격 증명 설정 섹션을 참조하세요.

        작은 정보

        또한 Lambda 함수에 루트 액세스 권한을 부여하도록 config.json 파일을 업데이트해야 합니다. 이 절차는 루트로서의 Lambda 함수 실행 섹션을 참조하세요.

      • Lambda 함수 컨테이너화의 경우 컨테이너 없음을 선택합니다.

        속도 제어 자동화 실행에 대한 자세한 내용은 Lambda 함수 컨테이너화 선택 시 고려 사항 섹션을 참조하세요.

      • 추가 매개 변수에서 /sys 디렉터리에 대한 읽기 액세스에 대해 활성화를 선택합니다.

      • 환경 변수에서 다음 키-값 페어를 Lambda 함수에 추가합니다. 이렇게 하면 MXNet 프레임워크를 사용하도록 AWS IoT Greengrass가 구성됩니다.

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

    2. 대신 컨테이너화 모드에서 실행하려면:

      참고

      비즈니스 사례에서 요구하는 경우가 아니면 컨테이너화 모드에서 실행하지 않는 것이 좋습니다.

      • 메모리 제한 값을 늘립니다. CPU의 경우 500MB를, GPU의 경우 최소 2,000MB를 사용합니다.

      • 추가 매개 변수에서 /sys 디렉터리에 대한 읽기 액세스에 대해 활성화를 선택합니다.

      • 환경 변수에서 다음 키-값 페어를 Lambda 함수에 추가합니다. 이렇게 하면 MXNet 프레임워크를 사용하도록 AWS IoT Greengrass가 구성됩니다.

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

  7. 컨테이너화 모드에서 실행 중인 경우 다음의 로컬 디바이스 리소스를 추가하여 디바이스 GPU에 대한 액세스 권한을 부여하십시오. 6단계: Greengrass 그룹에 리소스 추가의 프로시저를 따르세요.

    참고

    비컨테이너화 모드에서 실행하는 경우 AWS IoT Greengrass은(는) 디바이스 리소스를 구성하지 않고도 디바이스 GPU에 액세스할 수 있습니다.

    각 리소스의 경우:

    • [Resource type]에서 [Device]를 선택합니다.

    • [Group owner file access permission]에서 [Automatically add OS group permissions of the Linux group that owns the resource]를 선택합니다.

       

      이름

      디바이스 경로

      nvhost-ctrl

      /dev/nvhost-ctrl

      nvhost-gpu

      /dev/nvhost-gpu

      nvhost-ctrl-gpu

      /dev/nvhost-ctrl-gpu

      nvhost-dbg-gpu

      /dev/nvhost-dbg-gpu

      nvhost-prof-gpu

      /dev/nvhost-prof-gpu

      nvmap

      /dev/nvmap

      nvhost-vic

      /dev/nvhost-vic

      tegra_dc_ctrl

      /dev/tegra_dc_ctrl

  8. 컨테이너화 모드에서 실행 중인 경우 다음 로컬 볼륨 리소스를 추가하여 디바이스 카메라에 대한 액세스 권한을 부여하세요. 6단계: Greengrass 그룹에 리소스 추가의 프로시저를 따르세요.

    참고

    비컨테이너화 모드에서 실행하는 경우 AWS IoT Greengrass은(는) 볼륨 리소스를 구성하지 않고도 디바이스 카메라에 액세스할 수 있습니다.

    • [리소스 유형(Resource type)]에서 [볼륨(Volume)]을 선택합니다.

    • [Group owner file access permission]에서 [Automatically add OS group permissions of the Linux group that owns the resource]를 선택합니다.

       

      이름

      소스 경로

      대상 경로

      shm

      /dev/shm

      /dev/shm

      /tmp

      /tmp

      /tmp