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 이상을 사용해야 합니다.

SageMaker Neo 딥러닝 컴파일러를 사용해 Tensorflow, Apache MXNet, PyTorch, ONNX 및 XGBoost 프레임워크에서 기본 기계 학습 추론 모델의 예측 효율성을 최적화함으로써 설치 공간을 줄이고 성능을 높일 수 있습니다. 그런 다음 더 빠른 추론을 위해 최적화된 모델을 다운로드하고 SageMaker Neo 딥러닝 컴파일러을 설치해 AWS IoT Greengrass 디바이스에 배포할 수 있습니다.

이 자습서에서는 AWS Management Console을 사용하여 Greengrass 그룹을 구성한 다음 데이터를 클라우드로 전송하지 않고 로컬 방식으로 카메라에서 이미지를 인식하는 Lambda 추론 예제를 실행하는 방법을 설명합니다. 이 추론 예제는 Raspberry Pi에서 카메라 모듈에 액세스합니다. 이 자습서에서는 Resnet-50에서 교육하고 Neo 딥러닝 컴파일러에서 최적화되어 있는 사전 패키징된 모델을 다운로드합니다. 그런 다음 이 모델을 사용하여 AWS IoT Greengrass 디바이스에서 로컬 이미지 분류를 수행합니다.

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

필수 조건

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

참고

이 자습서는 Raspberry Pi를 사용하지만 AWS IoT Greengrass는 Intel AtomNVIDIA Jetson TX2 등의 다른 플랫폼도 지원합니다. Intel Atom 예제를 사용하는 경우 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단계: Amazon SageMaker Neo 딥 러닝 런타임 설치

이 단계에서는 Raspberry Pi에 (DLR)을 설치합니다.

참고

이 자습서에서는 버전 1.1.0을 설치하는 것이 좋습니다.

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

    ssh pi@your-device-ip-address
  2. DLR 설명서의 DLR 설치에서 Raspberry Pi 디바이스의 휠 URL을 찾습니다. 그런 다음 지침에 따라 디바이스에 DLR을 설치합니다. 예를 들어 pip를 사용할 수 있습니다.

    pip3 install rasp3b-wheel-url
  3. DLR을 설치한 후 다음 구성을 검사합니다.

    • ggc_user 시스템 계정에서 DLR 라이브러리를 사용할 수 있는지 확인합니다.

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

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

3단계: 추론 Lambda 함수 생성

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

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

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

    cd path-to-downloaded-sample tar -xvzf dlr-py3-armv7l.tar.gz

    추출된 샘플 패키지의 examples 디렉터리에는 함수 코드와 종속성이 포함되어 있습니다.

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

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

      참고

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

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

    cd path-to-downloaded-sample/dlr-py3-armv7l/examples zip -r optimizedImageClassification.zip .

    배포 패키지에는 함수 코드와 종속성이 포함되어 있습니다. 여기에는 Neo 딥 러닝 컴파일러 모델로 추론을 수행하기 위해 Neo 딥 러닝 런타임 Python API를 간접적으로 호출하는 코드가 포함됩니다.

    참고

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

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

    Lambda 콘솔 페이지의 함수를 선택하고 함수 생성을 선택합니다.

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

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

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

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

    함수 생성 페이지의 기본 정보 섹션.
  6. 함수 생성(Create function)을 선택합니다.

 

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

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

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

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

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

    • 핸들러inference.handler를 입력합니다.

    Save를 선택합니다.

    업로드가 강조 표시된 런타임 설정 섹션.

 

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

참고

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

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

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

  3. optimizedImageClassification: 1 구성 페이지의 작업 메뉴에서 별칭 생성을 선택합니다.

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

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

    • 버전1를 입력합니다.

    참고

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

  5. 생성을 선택합니다.

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

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

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

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

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

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

  3. Lambdas 함수를 선택하고 optimizedImageClassification를 선택합니다.

  4. Lambda 함수 버전에서 게시한 버전에 대한 별칭을 선택합니다.

 

그런 다음 Lambda 함수의 수명 주기를 구성합니다.

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

    참고

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

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

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

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

        작은 정보

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

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

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

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

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

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

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

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

      참고

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

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

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

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

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

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

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

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

  2. Lambda 함수 추가를 선택합니다.

5단계: SageMaker Neo 최적화 모델 리소스를 Greengrass 그룹에 추가

이 단계에서 최적화된 ML 추론 모델에 대한 리소스를 생성해 Amazon S3 버킷에 업로드합니다. 그런 다음 AWS IoT Greengrass 콘솔에서 Amazon S3 업로드 모델을 찾고 새로 생성된 리소스를 Lambda 함수와 연결합니다. 이렇게 하면 함수가 코어 디바이스의 리소스에 액세스할 수 있습니다.

  1. 컴퓨터에서 3단계: 추론 Lambda 함수 생성에서 압축을 푼 샘플 패키지의 resnet50 디렉터리로 이동합니다.

    참고

    NVIDIA Jetson 예제를 사용하는 경우 이 대신 샘플 패키지의 resnet18 디렉터리를 사용해야 합니다. 자세한 내용은 NVIDIA Jetson TX2 구성 섹션을 참조하세요.

    cd path-to-downloaded-sample/dlr-py3-armv7l/models/resnet50

    이 디렉터리에는 Resnet-50에서 교육된 이미지 분류 모델을 위해 미리 컴파일된 모델 아티팩트가 들어 있습니다.

  2. resnet50 디렉터리 내의 파일을 resnet50.zip이라는 파일로 압축합니다.

    zip -r resnet50.zip .
  3. AWS IoT Greengrass 그룹에 대한 그룹 구성 페이지에서 리소스 탭을 선택합니다. Machine Learning 섹션으로 이동하고 Machine Learning 리소스 추가를 선택합니다. 머신 러닝 리소스 생성 페이지에서 리소스 이름에 resnet50_model을 입력합니다.

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

  5. S3 URI에서 S3 찾아보기를 선택합니다.

    참고

    현재, 최적화된 SageMaker 모델은 자동으로 Amazon S3에 저장됩니다. 이 옵션을 사용해 Amazon S3 버킷에서 최적화된 모델을 찾을 수 있습니다. SageMaker의 모델 최적화에 대한 자세한 내용은 SageMaker Neo 설명서를 참조하십시오.

  6. 모델 업로드를 선택합니다.

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

    참고

    버킷 이름이 문자열 greengrass를 포함해야 합니다. 고유한 이름을 선택합니다(예: greengrass-dlr-bucket-user-id-epoch-time). 버킷 이름에는 마침표(.)를 사용하지 마십시오.

  8. AWS IoT Greengrass 콘솔 탭에서 Amazon S3 버킷을 찾아 선택합니다. 업로드한 resnet50.zip 파일을 찾아 선택을 선택합니다. 사용 가능한 버킷과 파일의 목록을 업데이트하려면 페이지를 새로 고쳐야 할 수 있습니다.

  9. Destination path/ml_model을 입력합니다.

    업데이트된 대상 경로.

    Lambda 런타임 네임스페이스에 있는 로컬 모델의 대상입니다. 그룹을 배포할 때 AWS IoT Greengrass은(는) 소스 모델 패키지를 검색하고 지정된 디렉터리에 내용을 압축 해제합니다.

    참고

    로컬 경로에 제공된 정확한 경로를 사용하는 것이 좋습니다. 이 단계에서 다른 로컬 모델 대상 경로를 사용하면 이 자습서에서 제공하는 일부 문제 해결 명령이 부정확하게 됩니다. 다른 경로를 사용하는 경우 여기서 입력하는 정확한 경로를 사용하는 MODEL_PATH 환경 변수를 설정해야 합니다. 환경 변수에 대한 자세한 내용은 AWS Lambda 환경 변수를 참조하십시오.

  10. 컨테이너화 모드에서 실행 중인 경우:

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

    2. 작업을 선택한 다음 리소스 추가를 선택합니다.

6단계: Greengrass 그룹에 카메라 디바이스 리소스 추가

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

참고

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

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

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

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

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

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

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

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

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

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

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

  5. 리소스 탭에서 추가를 선택하여 다른 로컬 리소스를 생성하고 다음 값을 사용하십시오.

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

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

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

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

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

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

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

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

  2. 구독 생성 페이지에서 다음과 같이 원본과 대상을 구성합니다.

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

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

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

  3. 두 번째 구독을 추가합니다. 구독 탭을 선택하고 구독 추가를 선택한 다음 다음과 같이 원본과 대상을 구성합니다.

    1. 소스 유형에서 서비스를 선택한 후 IoT Cloud를 선택합니다.

    2. 대상 선택에서 Lambda 함수를 선택한 후 optimizedImageClassification을 선택합니다.

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

8단계: Greengrass 그룹 배포

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

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

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

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

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

    2. 데몬을 시작하려면:

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

  3. Lambda 함수 탭에서 IP 감지기를 선택하고 편집을 선택합니다.

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

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

    참고

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

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

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

추론 예제 테스트

이제 배포가 올바르게 구성되었는지 확인할 수 있습니다. 테스트하려면 /resnet-50/predictions 주제를 구독하고 /resnet-50/test 주제에 메시지를 게시합니다. 그러면 Raspberry Pi로 사진을 찍고 캡처한 이미지에 대해 추론을 수행하는 Lambda 함수가 트리거됩니다.

참고

NVIDIA Jetson 예제를 사용하는 경우 이 대신 resnet-18/predictionsresnet-18/test 주제를 사용해야 합니다.

참고

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

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

  2. 구독의 경우 주제 구독을 선택합니다. 다음 값을 사용합니다. 나머지 옵션을 기본값으로 둡니다.

    • 구독 주제/resnet-50/predictions를 입력합니다.

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

  3. 구독을 선택합니다.

  4. 주제에 게시 탭의 /resnet-50/test주제 이름을 입력한 다음 게시를 선택합니다.

  5. 테스트가 성공적인 경우 메시지를 게시하면 Raspberry Pi 카메라가 이미지를 캡처합니다. 페이지 하단에 Lambda 함수의 메시지가 나타납니다. 이 메시지에는 예측된 클래스 이름, 확률, 피크 메모리 사용량의 형식을 사용하여 이미지의 예측 결과가 포함됩니다.

Intel Atom 구성

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

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

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

    참고

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

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

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

    참고

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

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

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

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

        작은 정보

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

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

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

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

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

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

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

      참고

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

      • 메모리 제한 값을 3,000MB로 늘립니다.

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

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

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

  3. Neo 최적화 모델 리소스를 그룹에 추가합니다. 3단계: 추론 Lambda 함수 생성에서 압축을 푼 샘플 패키지의 resnet50 디렉터리에 있는 모델 리소스를 업로드합니다. 이 디렉터리에는 Resnet-50에서 교육된 이미지 분류 모델을 위해 미리 컴파일된 모델 아티팩트가 들어 있습니다. 다음 업데이트 사항과 함께 5단계: SageMaker Neo 최적화 모델 리소스를 Greengrass 그룹에 추가의 절차를 따릅니다.

    • resnet50 디렉터리 내의 파일을 resnet50.zip이라는 파일로 압축합니다.

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

    • resnet50.zip 파일을 업로드합니다.

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

    참고

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

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

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

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

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

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

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

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

NVIDIA Jetson TX2 구성

NVIDIA Jetson TX2에서 이 자습서를 실행하려면 소스 이미지를 제공하고 Lambda 함수를 구성한 후 추가 로컬 디바이스 리소스를 추가합니다.

  1. AWS IoT Greengrass 코어 소프트웨어를 설치하고 추론에 GPU를 사용할 수 있도록 Jetson 디바이스가 구성되어 있는지 확인합니다. 디바이스 구성에 대한 자세한 내용은 다른 디바이스 설정 단원을 참조하십시오. NVIDIA Jetson TX2에서 추론에 GPU를 사용하려면 Jetpack 4.3으로 보드의 이미지를 생성할 때 CUDA 10.0 및 cuDNN 7.0을 디바이스에 설치해야 합니다.

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

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

    참고

    또는 Jetson 보드의 카메라를 구성해 소스 이미지를 캡처하기로 선택할 수 있습니다. 그러나 정적 이미지부터 시작하는 것이 좋습니다.

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

    참고

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

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

      • 다음으로 실행에서 Another user ID/group ID을(를) 선택합니다. uid0을 입력합니다. GUID의 경우 0을(를) 입력합니다.

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

        작은 정보

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

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

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

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

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

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

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

      참고

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

      • 메모리 제한 값을 늘립니다. GPU 모드에서 제공되는 모델을 사용하려면 2,000MB 이상을 사용합니다.

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

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

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

  4. Neo 최적화 모델 리소스를 그룹에 추가합니다. 3단계: 추론 Lambda 함수 생성에서 압축을 푼 샘플 패키지의 resnet18 디렉터리에 있는 모델 리소스를 업로드합니다. 이 디렉터리에는 Resnet-18에서 훈련된 이미지 분류 모델을 위해 미리 컴파일된 모델 아티팩트가 들어 있습니다. 다음 업데이트 사항과 함께 5단계: SageMaker Neo 최적화 모델 리소스를 Greengrass 그룹에 추가의 절차를 따릅니다.

    • resnet18 디렉터리 내의 파일을 resnet18.zip이라는 파일로 압축합니다.

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

    • resnet18.zip 파일을 업로드합니다.

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

    참고

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

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

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

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

      • 리소스 이름디바이스 경로에 다음 표의 값을 사용합니다. 표의 각 행에 대해 디바이스 리소스를 하나씩 생성합니다.

      • [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

  6. 컨테이너화 모드에서 실행 중인 경우 다음 로컬 볼륨 리소스를 추가하여 디바이스 카메라에 대한 액세스 권한을 부여하세요. 5단계: SageMaker Neo 최적화 모델 리소스를 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

  7. 올바른 디렉터리를 사용하도록 그룹 구독을 업데이트합니다. 다음 업데이트 사항과 함께 7단계: Greengrass 그룹에 구독 추가의 절차를 따릅니다.

    • 첫 번째 주제 필터에 /resnet-18/predictions를 입력합니다.

    • 두 번째 주제 필터에 /resnet-18/test를 입력합니다.

  8. 올바른 디렉터리를 사용하도록 테스트 구독을 업데이트합니다. 다음 업데이트 사항과 함께 추론 예제 테스트의 절차를 따릅니다.

    • 구독의 경우 주제 구독을 선택합니다. 구독 주제/resnet-18/predictions를 입력합니다.

    • /resnet-18/predictions 페이지에서 게시할 /resnet-18/test 주제를 지정합니다.

AWS IoT Greengrass ML 추론 문제 해결

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

오류 로그 확인

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

    sudo su cd /greengrass/ggc/var/log
  2. runtime.log의 오류를 확인합니다.

    cat system/runtime.log | grep 'ERROR'

    사용자 정의 Lambda 함수 로그에서 오류를 검색할 수도 있습니다.

    cat user/your-region/your-account-id/lambda-function-name.log | grep 'ERROR'

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

 

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

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

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. 디렉터리에 3단계: 추론 Lambda 함수 생성에 업로드한 optimizedImageClassification.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 리소스에 대해 지정한 로컬 디렉터리의 내용을 나열합니다.

    참고

    ML 리소스 경로가 ml_model이 아닌 경우 여기서 대체해야 합니다.

    cd /ml_model ls -ls

    다음 파일이 표시됩니다.

    56 -rw-r--r-- 1 ggc_user ggc_group 56703 Oct 29 20:07 model.json 196152 -rw-r--r-- 1 ggc_user ggc_group 200855043 Oct 29 20:08 model.params 256 -rw-r--r-- 1 ggc_user ggc_group 261848 Oct 29 20:07 model.so 32 -rw-r--r-- 1 ggc_user ggc_group 30564 Oct 29 20:08 synset.txt

 

Lambda 함수에서 /dev/dri/renderD128을 찾을 수 없습니다.

이 문제는 OpenCL이 그에 필요한 GPU 디바이스에 연결될 수 없을 때 발생합니다. Lambda 함수에 필요한 디바이스에 대해 디바이스 리소스를 생성해야 합니다.

다음 단계

다음에는 기타 최적화된 모델을 탐색합니다. 자세한 내용은 SageMaker Neo 설명서를 참조하십시오.