

지원 종료 공지: 2026년 10월 7일에는에 대한 지원을 중단할 AWS 예정입니다 AWS IoT Greengrass Version 1. 2026년 10월 7일 이후에는 더 이상 AWS IoT Greengrass V1 리소스에 액세스할 수 없습니다. 자세한 내용은 [에서 마이그레이션 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)을 참조하세요.

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

# 를 사용하여 최적화된 기계 학습 추론을 구성하는 방법 AWS Management Console
<a name="ml-dlc-console"></a>

이 자습서의 단계를 따르려면 AWS IoT Greengrass 코어 v1.10 이상을 사용해야 합니다.

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

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

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

1. [Raspberry Pi 구성](#config-raspberry-pi-dlc)

1. [Neo 딥 러닝 런타임 설치](#install-dlr)

1. [추론 Lambda 함수를 생성합니다.](#ml-console-dlc-create-lambda)

1. [그룹에 Lambda 함수를 추가합니다.](#ml-console-dlc-config-lambda)

1. [Neo 최적화 모델 리소스를 그룹에 추가](#ml-console-dlc-add-resources)

1. [그룹에 카메라 장치 리소스 추가](#ml-console-dlc-add-cam-resource)

1. [그룹에 구독 추가](#ml-console-dlc-add-subscription)

1. [그룹 배포](#ml-console-dlc-deploy-group)

1. [예제 테스트](#ml-console-dlc-test-app)

## 사전 조건
<a name="ml-inference-prerequisites"></a>

 이 자습서를 완료하려면 다음이 필요합니다.
+  와 함께 사용하도록 설정 및 구성된 Raspberry Pi 4 모델 B 또는 Raspberry Pi 3 모델 B/B\$1 AWS IoT Greengrass. AWS IoT Greengrass로 Raspberry Pi를 설정하기 위해, Greengrass 장치 설정[ 스크립트를 실행하거나](quick-start.md) [모듈 1](https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html) 및 [모듈 2](https://docs.aws.amazon.com/greengrass/latest/developerguide/module2.html)를 완료했는지 [시작하기 AWS IoT Greengrass](gg-gs.md) 확인합니다.
**참고**  
Raspberry Pi는 일반적으로 이미지 분류에 사용되는 딥 러닝 프레임워크를 실행하기 위해 2.5A [전원 공급 장치](https://www.raspberrypi.org/documentation/hardware/raspberrypi/power/)가 필요할 수 있습니다. 정격이 더 낮은 전원 공급 장치는 장치가 재부팅될 수 있습니다.
+  [Raspberry Pi Camera Module V2 – 8메가픽셀, 1080p](https://www.amazon.com/Raspberry-Pi-Camera-Module-Megapixel/dp/B01ER2SKFS). 카메라 설정 방법을 알아보려면 Raspberry Pi 설명서의 [Connecting the camera](https://www.raspberrypi.org/documentation/usage/camera/)를 참조하세요.
+  Greengrass 그룹 및 Greengrass 코어. Greengrass 그룹 또는 코어를 생성하는 방법에 대해 알아보려면 [시작하기 AWS IoT Greengrass](gg-gs.md) 단원을 참조하십시오.

**참고**  
 이 자습서에서는 Raspberry Pi를 사용하지만 [Intel Atom](#atom-lambda-dlc-config) 및 [NVIDIA Jetson TX2](#jetson-lambda-dlc-config)와 같은 다른 플랫폼을 AWS IoT Greengrass 지원합니다. Intel Atom 예제를 사용하는 경우 Python 3.7 대신 Python 3.6을 설치해야 할 수도 있습니다. AWS IoT Greengrass 코어 소프트웨어를 설치할 수 있도록 디바이스를 구성하는 방법에 대한 자세한 내용은 섹션을 참조하세요[다른 장치 설정](setup-filter.other.md).  
 AWS IoT Greengrass 가 지원하지 않는 타사 플랫폼의 경우 컨테이너화되지 않은 모드에서 Lambda 함수를 실행해야 합니다. 비컨테이너식 모드에서 실행하려면 Lambda 함수를 루트로 실행해야 합니다. 자세한 내용은 [Lambda 함수 컨테이너화 선택 시 고려 사항](lambda-group-config.md#lambda-containerization-considerations) 및 [그룹에 있는 Lambda 함수의 기본 액세스 자격 증명 설정](lambda-group-config.md#lambda-access-identity-groupsettings) 섹션을 참조하세요.

## 1단계: Raspberry Pi 구성
<a name="config-raspberry-pi-dlc"></a>

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

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

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

   ```
   sudo apt-get update
   sudo apt-get dist-upgrade
   ```

1. <a name="install-picamera-step"></a>이 자습서에 필요한 카메라 모듈에 대한 `picamera` 인터페이스 및 기타 Python 라이브러리를 설치합니다.

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

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

     ```
     python3 -m pip
     ```

     pip가 설치되어 있지 않으면 [pip 웹 사이트](https://pip.pypa.io/en/stable/installing/)에서 다운로드한 후 다음 명령을 실행합니다.

     ```
     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` 버전에 매핑되는지 확인하세요.

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

   ```
   sudo reboot
   ```

1. Raspberry Pi 구성 도구를 엽니다.

   ```
   sudo raspi-config
   ```

1. 화살표 키를 사용하여 [**Interfacing Options**]를 열고 카메라 인터페이스를 활성화합니다. 메시지가 나타나면 장치 재부팅을 허용합니다.

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

   ```
   raspistill -v -o test.jpg
   ```

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

## 2단계: Amazon SageMaker Neo 딥 러닝 런타임 설치
<a name="install-dlr"></a>

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

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

1. <a name="ssh-rpi-step"></a>Raspberry Pi에 원격으로 로그인합니다.

   ```
   ssh pi@your-device-ip-address
   ```

1.  DLR 설명서의 [DLR 설치](https://neo-ai-dlr.readthedocs.io/en/latest/install.html)에서 Raspberry Pi 장치의 휠 URL을 찾습니다. 그런 다음 지침에 따라 장치에 DLR을 설치합니다. 예를 들어 pip를 사용할 수 있습니다.

   ```
   pip3 install rasp3b-wheel-url
   ```

1. 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 함수 생성
<a name="ml-console-dlc-create-lambda"></a>

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

1. [기계 학습 샘플](what-is-gg.md#gg-ml-samples)에 나온 Raspberry Pi용 DLR 샘플을 컴퓨터에 다운로드합니다.

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

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

   추출된 샘플 패키지의 `examples` 디렉터리에는 함수 코드와 종속성이 포함되어 있습니다.
   + `inference.py`는 이 자습서에서 사용되는 추론 코드입니다. 이 코드를 템플릿으로 사용하여 사용자 고유의 추론 함수를 생성할 수 있습니다.
   + <a name="ml-samples-ggc-sdk"></a>`greengrasssdk`은(는) Python용 AWS IoT Greengrass 코어 SDK 버전 1.5.0입니다.
**참고**  <a name="ml-samples-ggc-sdk-upgrade"></a>
새 버전을 사용할 수 있는 경우 해당 버전을 다운로드하여 배포 패키지의 SDK 버전을 업그레이드할 수 있습니다. 자세한 내용은 GitHub의 [Python용AWS IoT Greengrass 코어 SDK](https://github.com/aws/aws-greengrass-core-sdk-python/)를 참조하세요.

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

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

    배포 패키지에는 함수 코드와 종속성이 포함되어 있습니다. 여기에는 Neo 딥 러닝 컴파일러 모델로 추론을 수행하기 위해 Neo 딥 러닝 런타임 Python API를 간접적으로 호출하는 코드가 포함됩니다.
**참고**  <a name="ml-samples-function-zip"></a>
 `.py` 파일 및 종속성이 디렉터리의 루트에 있는지 확인합니다.

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

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

1. **새로 작성**을 선택하고 다음 값을 사용하여 함수를 생성합니다.
   + [**함수 이름**]에 **optimizedImageClassification**을 입력합니다.
   + **실행 시간**에서 **Python 3.7**을 선택합니다.

   **권한**의 경우, 기본 설정을 유지합니다. 이를 통해 기본 Lambda 권한을 부여하는 실행 역할을 생성합니다. 이 역할은에서 사용되지 않습니다 AWS IoT Greengrass.  
![\[함수 생성 페이지의 기본 정보 섹션.\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/ml-dlc-inference/gg-dlr-lambda-creation.png)

1. **함수 생성**을 선택합니다.

 

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

1. <a name="lambda-console-upload"></a>**코드** 탭의 **코드 소스**에서 **다음에서 업로드**를 선택합니다. 드롭다운에서 **.zip 파일**을 선택합니다.  
![\[.zip 파일이 강조 표시된 드롭다운의 업로드.\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

1. `optimizedImageClassification.zip` 배포 패키지를 선택한 다음 **저장**을 선택합니다.

1. <a name="lambda-console-runtime-settings-para"></a>함수의 **코드** 탭에 있는 **런타임 설정**에서 **편집**을 선택하고 다음 값을 입력합니다.
   + **실행 시간**에서 **Python 3.7**을 선택합니다.
   + **핸들러**에 **inference.handler**를 입력합니다.

   **저장**을 선택합니다.  
![\[업로드가 강조 표시된 런타임 설정 섹션.\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/ml-dlc-inference/gg-ml2-lambda-upload.png)

 

그런 다음 Lambda 함수의 첫 번째 버전을 게시합니다. 그런 다음 [버전의 별칭](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)을 생성합니다.

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

1. [**Actions**] 메뉴에서 [**Publish new revision**]을 선택합니다.  
![\[작업 메뉴의 새 버전 게시 옵션\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/ml-dlc-inference/gg-ml2-publish-new.png)

1. **버전 설명**에 **First version**을 입력한 후 **게시**를 선택합니다.

1. **optimizedImageClassification: 1** 구성 페이지의 **작업** 메뉴에서 **별칭 생성**을 선택합니다.  
![\[작업 메뉴의 별칭 생성 옵션\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/ml-dlc-inference/gg-ml2-create-alias.png)

1. [**Create a new alias**] 페이지에서 다음 값을 사용합니다.
   + **이름**에 **mlTestOpt**을 입력합니다.
   + **버전**에 **1**를 입력합니다.
**참고**  
AWS IoT Greengrass 는 **\$1LATEST** 버전에 대해 Lambda 별칭을 지원하지 않습니다.

1. **생성(Create)**을 선택합니다.

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

## 4단계: Greengrass 그룹에 Lambda 함수 추가
<a name="ml-console-dlc-config-lambda"></a>

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

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

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

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

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

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

 

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

1. **Lambda 함수 구성** 섹션에서 다음과 같이 업데이트하십시오.
**참고**  
 비즈니스 사례에서 요구하지 않는 한 컨테이너화 없이 Lambda 함수를 실행하는 것이 좋습니다. 이렇게 하면 장치 리소스를 구성하지 않고도 장치 GPU와 카메라에 액세스할 수 있습니다. 컨테이너화 없이를 실행하는 경우 AWS IoT Greengrass Lambda 함수에 대한 루트 액세스 권한도 부여해야 합니다.

   1. **컨테이너화 없이 실행하려면:**
      + **시스템 사용자 및 그룹**의 경우 **Another user ID/group ID**을(를) 선택합니다. **시스템 사용자 ID**에 **0**을(를) 입력합니다. **시스템 그룹 ID**에 **0**을(를) 입력합니다.

        이렇게 하면 Lambda 함수를 루트로 실행할 수 있습니다. 작업 실행 방법에 대한 자세한 내용은 [그룹에 있는 Lambda 함수의 기본 액세스 자격 증명 설정](lambda-group-config.md#lambda-access-identity-groupsettings) 섹션을 참조하세요.
**작은 정보**  
또한 Lambda 함수에 루트 액세스 권한을 부여하도록 `config.json` 파일을 업데이트해야 합니다. 이 절차는 [루트로서의 Lambda 함수 실행](lambda-group-config.md#lambda-running-as-root) 섹션을 참조하세요.
      + **Lambda 함수 컨테이너화**의 경우 **컨테이너 없음**을 선택합니다.

        속도 제어 자동화 실행에 대한 자세한 내용은 [Lambda 함수 컨테이너화 선택 시 고려 사항](lambda-group-config.md#lambda-containerization-considerations) 섹션을 참조하세요.
      + **시간 제한**에 **10 seconds**를 입력합니다.
      + **고정된** 경우 **True**를 선택합니다.

        자세한 내용은 [Greengrass Lambda 함수의 라이프사이클 구성](lambda-functions.md#lambda-lifecycle) 단원을 참조하십시오.
      + **추가 매개 변수**에서 **/sys 디렉터리에 대한 읽기 액세스**에 대해 **활성화**를 선택합니다.

   1.  **대신 컨테이너화 모드에서 실행하려면:** 
**참고**  
비즈니스 사례에서 요구하는 경우가 아니면 컨테이너화 모드에서 실행하지 않는 것이 좋습니다.
      + **시스템 사용자 및 그룹**의 경우 **그룹 기본값 사용**을 선택합니다.
      + **Lambda 함수 컨테이너화**의 경우 **그룹 기본값 사용**을 선택합니다.
      + **메모리 제한**에 **1024 MB**를 입력합니다.
      + **시간 제한**에 **10 seconds**를 입력합니다.
      + **고정된** 경우 **True**를 선택합니다.

        자세한 내용은 [Greengrass Lambda 함수의 라이프사이클 구성](lambda-functions.md#lambda-lifecycle) 단원을 참조하십시오.
      + **추가 매개 변수**에서 **/sys 디렉터리에 대한 읽기 액세스**에 대해 **활성화**를 선택합니다.

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

## 5단계: Greengrass 그룹에 SageMaker AI Neo 최적화 모델 리소스 추가
<a name="ml-console-dlc-add-resources"></a>

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

1.  컴퓨터에서 [3단계: 추론 Lambda 함수 생성](#ml-console-dlc-create-lambda)에서 압축을 푼 샘플 패키지의 `resnet50` 디렉터리로 이동합니다.
**참고**  
NVIDIA Jetson 예제를 사용하는 경우 이 대신 샘플 패키지의 `resnet18` 디렉터리를 사용해야 합니다. 자세한 내용은 [NVIDIA Jetson TX2 구성](#jetson-lambda-dlc-config) 단원을 참조하십시오.

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

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

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

   ```
   zip -r resnet50.zip .
   ```

1.  그룹의 그룹 구성 페이지에서 **리소스** 탭을 AWS IoT Greengrass 선택합니다. **Machine Learning** 섹션으로 이동하고 **Machine Learning 리소스 추가**를 선택합니다. **머신 러닝 리소스 생성** 페이지에서 **리소스 이름에** **resnet50\$1model**을 입력합니다.

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

1.  **S3 URI**에서 **S3 찾아보기**를 선택합니다.
**참고**  
 현재 최적화된 SageMaker AI 모델은 Amazon S3에 자동으로 저장됩니다. 이 옵션을 사용해 Amazon S3 버킷에서 최적화된 모델을 찾을 수 있습니다. SageMaker AI의 모델 최적화에 대한 자세한 내용은 [SageMaker AI Neo 설명서를](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) 참조하세요.

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

1.  Amazon S3 콘솔 탭에서 zip 파일을 Amazon S3 버킷으로 업로드합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [S3 버킷에 파일 및 폴더를 업로드하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html)를 참조하십시오.
**참고**  
 버킷 이름이 문자열 **greengrass**를 포함해야 합니다. 고유한 이름을 선택합니다(예: **greengrass-dlr-bucket-*user-id*-*epoch-time***). 버킷 이름에는 마침표(`.`)를 사용하지 마십시오.

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

1.  **Destination path**에 **/ml\$1model**을 입력합니다.  
![\[업데이트된 대상 경로.\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/ml-dlc-inference/local-path.png)

    Lambda 런타임 네임스페이스에 있는 로컬 모델의 대상입니다. 그룹을 배포하면가 소스 모델 패키지를 AWS IoT Greengrass 검색한 다음 지정된 디렉터리로 콘텐츠를 추출합니다.
**참고**  
 로컬 경로에 제공된 정확한 경로를 사용하는 것이 좋습니다. 이 단계에서 다른 로컬 모델 대상 경로를 사용하면 이 자습서에서 제공하는 일부 문제 해결 명령이 부정확하게 됩니다. 다른 경로를 사용하는 경우 여기서 입력하는 정확한 경로를 사용하는 `MODEL_PATH` 환경 변수를 설정해야 합니다. 환경 변수에 대한 자세한 내용은 [AWS Lambda 환경 변수](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html)를 참조하십시오.

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

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

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

## 6단계: Greengrass 그룹에 카메라 장치 리소스 추가
<a name="ml-console-dlc-add-cam-resource"></a>

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

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

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

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

1. **로컬 리소스 생성** 페이지에서 다음 값을 사용합니다.
   + **리소스 이름**에 **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 프로세스에 추가 파일 액세스 권한을 부여할 수 있습니다. 자세한 내용은 [그룹 소유자 파일 액세스 권한](access-local-resources.md#lra-group-owner) 단원을 참조하십시오.

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

1. **리소스** 탭에서 **추가**를 선택하여 다른 로컬 리소스를 생성하고 다음 값을 사용하십시오.
   + **리소스 이름**에 **videoCoreInterface**을 입력합니다.
   + [**Resource type**]에서 [**Device**]를 선택합니다.
   + **장치 경로**에 **/dev/vchiq**를 입력합니다.
   + [**Group owner file access permission**]에서 [**Automatically add OS group permissions of the Linux group that owns the resource**]를 선택합니다.

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

## 7단계: Greengrass 그룹에 구독 추가
<a name="ml-console-dlc-add-subscription"></a>

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

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

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

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

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

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

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

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

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

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

## 8단계: Greengrass 그룹 배포
<a name="ml-console-dlc-deploy-group"></a>

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

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

   1. 대몬(daemon)이 실행 중인지 확인하려면:

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

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

   1. 대몬(daemon)을 시작하려면:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. 그룹 구성 페이지에서 **배포**를 선택합니다.

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

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

   이렇게 하면 장치가 IP 주소, DNS, 포트 번호 등 코어의 연결 정보를 자동으로 획득할 수 있습니다. 자동 감지가 권장되지만 수동으로 지정된 엔드포인트 AWS IoT Greengrass 도 지원합니다. 그룹이 처음 배포될 때만 검색 방법 메시지가 표시됩니다.
**참고**  
메시지가 표시되면 [Greengrass 서비스 역할을](service-role.md) 생성하고 이를 현재의와 연결할 AWS 계정 수 있는 권한을 부여합니다 AWS 리전. 이 역할을 통해 AWS IoT Greengrass 는 AWS 서비스의 리소스에 액세스할 수 있습니다.

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

   배포에 대한 자세한 내용은 [AWS IoT Greengrass 코어에 AWS IoT Greengrass 그룹 배포](deployments.md) 섹션을 참조하세요. 문제 해결에 대한 도움말은 [문제 해결 AWS IoT Greengrass](gg-troubleshooting.md) 섹션을 참조하세요.

## 추론 예제 테스트
<a name="ml-console-dlc-test-app"></a>

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

**참고**  
NVIDIA Jetson 예제를 사용하는 경우 이 대신 `resnet-18/predictions` 및 `resnet-18/test` 주제를 사용해야 합니다.

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

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

1. **구독**의 경우 **주제 구독**을 선택합니다. 다음 값을 사용합니다. 나머지 옵션을 기본값으로 둡니다.
   + **구독 주제**에 **/resnet-50/predictions**를 입력합니다.
   + **MQTT 페이로드 표시**의 경우 **추가 구성**에서 **페이로드를 문자열로 표시**를 선택합니다.

1. **구독**을 선택합니다.

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

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

## Intel Atom 구성
<a name="atom-lambda-dlc-config"></a>

 Intel Atom 장치에서 이 자습서를 실행하려면 소스 이미지를 제공하고 Lambda 함수를 구성한 후 다른 로컬 장치 리소스를 추가합니다. 추론에 GPU를 사용하려면 다음 소프트웨어가 장치에 설치되어 있어야 합니다.
+ OpenCL 버전 1.0 이상
+ Python 3.7 및 pip
+ [NumPy](https://pypi.org/project/numpy/)
+ [OpenCV on Wheels](https://pypi.org/project/opencv-python/)

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

   `inference.py` 파일이 들어 있는 디렉터리(또는 이 디렉터리의 하위 디렉터리)에 이미지 파일을 저장합니다. 이 파일은 [3단계: 추론 Lambda 함수 생성](#ml-console-dlc-create-lambda)에서 업로드하는 Lambda 함수 배포 패키지에 있습니다.
**참고**  
 를 사용하는 경우 온보드 카메라를 사용하거나 자체 카메라를 탑재하여 정적 이미지 대신 캡처된 이미지에 대한 추론을 수행할 AWS DeepLens수 있습니다. 그러나 정적 이미지부터 시작하는 것이 좋습니다.  
카메라를 사용하는 경우 `awscam` APT 패키지가 설치되어 있고 최신 상태여야 합니다. 자세한 내용은 *AWS DeepLens 개발자 안내서*의 [AWS DeepLens 코어 장치 설정](https://docs.aws.amazon.com/deeplens/latest/dg/deeplens-manual-updates.html) 섹션을 참조하세요.

1. Lambda 함수 구성을 편집합니다. [4단계: Greengrass 그룹에 Lambda 함수 추가](#ml-console-dlc-config-lambda)의 프로시저를 따르세요.
**참고**  
 비즈니스 사례에서 요구하지 않는 한 컨테이너화 없이 Lambda 함수를 실행하는 것이 좋습니다. 이렇게 하면 장치 리소스를 구성하지 않고도 장치 GPU와 카메라에 액세스할 수 있습니다. 컨테이너화 없이를 실행하는 경우 AWS IoT Greengrass Lambda 함수에 대한 루트 액세스 권한도 부여해야 합니다.

   1. **컨테이너화 없이 실행하려면:**
      + **시스템 사용자 및 그룹**의 경우 **Another user ID/group ID**을(를) 선택합니다. **시스템 사용자 ID**에 **0**을(를) 입력합니다. **시스템 그룹 ID**에 **0**을(를) 입력합니다.

        이렇게 하면 Lambda 함수를 루트로 실행할 수 있습니다. 작업 실행 방법에 대한 자세한 내용은 [그룹에 있는 Lambda 함수의 기본 액세스 자격 증명 설정](lambda-group-config.md#lambda-access-identity-groupsettings) 섹션을 참조하세요.
**작은 정보**  
또한 Lambda 함수에 루트 액세스 권한을 부여하도록 `config.json` 파일을 업데이트해야 합니다. 이 절차는 [루트로서의 Lambda 함수 실행](lambda-group-config.md#lambda-running-as-root) 섹션을 참조하세요.
      + **Lambda 함수 컨테이너화**의 경우 **컨테이너 없음**을 선택합니다.

        속도 제어 자동화 실행에 대한 자세한 내용은 [Lambda 함수 컨테이너화 선택 시 고려 사항](lambda-group-config.md#lambda-containerization-considerations) 섹션을 참조하세요.
      + **제한 시간** 값을 2분으로 늘립니다. 이렇게 하면 요청이 제한 시간에 너무 빨리 도달하는 경우를 피할 수 있습니다. 설정 후 추론이 실행되려면 몇 분이 걸립니다.
      +  **고정된** 경우 **True**를 선택합니다.
      + **추가 매개 변수**에서 **/sys 디렉터리에 대한 읽기 액세스**에 대해 **활성화**를 선택합니다.

   1.  **대신 컨테이너화 모드에서 실행하려면:** 
**참고**  
비즈니스 사례에서 요구하는 경우가 아니면 컨테이너화 모드에서 실행하지 않는 것이 좋습니다.
      +  **메모리 제한** 값을 3,000MB로 늘립니다.
      + **제한 시간** 값을 2분으로 늘립니다. 이렇게 하면 요청이 제한 시간에 너무 빨리 도달하는 경우를 피할 수 있습니다. 설정 후 추론이 실행되려면 몇 분이 걸립니다.
      +  **고정된** 경우 **True**를 선택합니다.
      + **추가 매개 변수**에서 **/sys 디렉터리에 대한 읽기 액세스**에 대해 **활성화**를 선택합니다.

1.  Neo 최적화 모델 리소스를 그룹에 추가합니다. [3단계: 추론 Lambda 함수 생성](#ml-console-dlc-create-lambda)에서 압축을 푼 샘플 패키지의 `resnet50` 디렉터리에 있는 모델 리소스를 업로드합니다. 이 디렉터리에는 Resnet-50에서 교육된 이미지 분류 모델을 위해 미리 컴파일된 모델 아티팩트가 들어 있습니다. 다음 업데이트 사항과 함께 [5단계: Greengrass 그룹에 SageMaker AI Neo 최적화 모델 리소스 추가](#ml-console-dlc-add-resources)의 절차를 따릅니다.
   + `resnet50` 디렉터리 내의 파일을 `resnet50.zip`이라는 파일로 압축합니다.
   + **머신 러닝 리소스 생성** 페이지에서 **리소스 이름에** **resnet50\$1model**을 입력합니다.
   + `resnet50.zip` 파일을 업로드합니다.

1. **컨테이너화 모드에서 실행 중인 경우** 필요한 로컬 장치 리소스를 추가하여 장치 GPU에 대한 액세스 권한을 부여하십시오.
**참고**  
 컨테이너화되지 않은 모드에서를 실행하는 경우는 디바이스 리소스를 구성하지 않고 디바이스 GPU에 액세스할 AWS IoT Greengrass 수 있습니다.

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

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

   1. 리소스를 정의합니다.
      + **리소스 이름**에 **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 구성
<a name="jetson-lambda-dlc-config"></a>

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

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

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

   `inference.py` 파일이 들어 있는 디렉터리에 이미지 파일을 저장합니다. 이 디렉터리의 하위 디렉터리에 저장할 수도 있습니다. 이 디렉터리는 [3단계: 추론 Lambda 함수 생성](#ml-console-dlc-create-lambda)에서 업로드하는 Lambda 함수 배포 패키지에 있습니다.
**참고**  
 또는 Jetson 보드의 카메라를 구성해 소스 이미지를 캡처하기로 선택할 수 있습니다. 그러나 정적 이미지부터 시작하는 것이 좋습니다.

1. Lambda 함수 구성을 편집합니다. [4단계: Greengrass 그룹에 Lambda 함수 추가](#ml-console-dlc-config-lambda)의 프로시저를 따르세요.
**참고**  
 비즈니스 사례에서 요구하지 않는 한 컨테이너화 없이 Lambda 함수를 실행하는 것이 좋습니다. 이렇게 하면 장치 리소스를 구성하지 않고도 장치 GPU와 카메라에 액세스할 수 있습니다. 컨테이너화 없이를 실행하는 경우 AWS IoT Greengrass Lambda 함수에 대한 루트 액세스 권한도 부여해야 합니다.

   1. **컨테이너화 없이 실행하려면:**
      + **다음으로 실행**에서 **Another user ID/group ID**을(를) 선택합니다. **uid**에 **0**을 입력합니다. **GUID**의 경우 **0**을(를) 입력합니다.

        이렇게 하면 Lambda 함수를 루트로 실행할 수 있습니다. 작업 실행 방법에 대한 자세한 내용은 [그룹에 있는 Lambda 함수의 기본 액세스 자격 증명 설정](lambda-group-config.md#lambda-access-identity-groupsettings) 섹션을 참조하세요.
**작은 정보**  
또한 Lambda 함수에 루트 액세스 권한을 부여하도록 `config.json` 파일을 업데이트해야 합니다. 이 절차는 [루트로서의 Lambda 함수 실행](lambda-group-config.md#lambda-running-as-root) 섹션을 참조하세요.
      + **Lambda 함수 컨테이너화**의 경우 **컨테이너 없음**을 선택합니다.

        속도 제어 자동화 실행에 대한 자세한 내용은 [Lambda 함수 컨테이너화 선택 시 고려 사항](lambda-group-config.md#lambda-containerization-considerations) 섹션을 참조하세요.
      + **제한 시간** 값을 5분으로 늘립니다. 이렇게 하면 요청이 제한 시간에 너무 빨리 도달하는 경우를 피할 수 있습니다. 설정 후 추론이 실행되려면 몇 분이 걸립니다.
      +  **고정된** 경우 **True**를 선택합니다.
      + **추가 매개 변수**에서 **/sys 디렉터리에 대한 읽기 액세스**에 대해 **활성화**를 선택합니다.

   1.  **대신 컨테이너화 모드에서 실행하려면:** 
**참고**  
비즈니스 사례에서 요구하는 경우가 아니면 컨테이너화 모드에서 실행하지 않는 것이 좋습니다.
      +  **메모리 제한** 값을 늘립니다. GPU 모드에서 제공되는 모델을 사용하려면 2,000MB 이상을 사용합니다.
      + **제한 시간** 값을 5분으로 늘립니다. 이렇게 하면 요청이 제한 시간에 너무 빨리 도달하는 경우를 피할 수 있습니다. 설정 후 추론이 실행되려면 몇 분이 걸립니다.
      +  **고정된** 경우 **True**를 선택합니다.
      + **추가 매개 변수**에서 **/sys 디렉터리에 대한 읽기 액세스**에 대해 **활성화**를 선택합니다.

1.  Neo 최적화 모델 리소스를 그룹에 추가합니다. [3단계: 추론 Lambda 함수 생성](#ml-console-dlc-create-lambda)에서 압축을 푼 샘플 패키지의 `resnet18` 디렉터리에 있는 모델 리소스를 업로드합니다. 이 디렉터리에는 Resnet-18에서 훈련된 이미지 분류 모델을 위해 미리 컴파일된 모델 아티팩트가 들어 있습니다. 다음 업데이트 사항과 함께 [5단계: Greengrass 그룹에 SageMaker AI Neo 최적화 모델 리소스 추가](#ml-console-dlc-add-resources)의 절차를 따릅니다.
   + `resnet18` 디렉터리 내의 파일을 `resnet18.zip`이라는 파일로 압축합니다.
   + **머신 러닝 리소스 생성** 페이지에서 **리소스 이름에** **resnet18\$1model**을 입력합니다.
   + `resnet18.zip` 파일을 업로드합니다.

1. **컨테이너화 모드에서 실행 중인 경우** 필요한 로컬 장치 리소스를 추가하여 장치 GPU에 대한 액세스 권한을 부여하십시오.
**참고**  
 컨테이너화되지 않은 모드에서를 실행하는 경우는 디바이스 리소스를 구성하지 않고 디바이스 GPU에 액세스할 AWS IoT Greengrass 수 있습니다.

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

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

   1. 각 리소스를 정의합니다.
      + **리소스 이름** 및 **장치 경로**에 다음 표의 값을 사용합니다. 표의 각 행에 대해 장치 리소스를 하나씩 생성합니다.
      + [**Resource type**]에서 [**Device**]를 선택합니다.
      + [**Group owner file access permission**]에서 [**Automatically add OS group permissions of the Linux group that owns the resource**]를 선택합니다.

             
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/ml-dlc-console.html)

1. **컨테이너화 모드에서 실행 중인 경우** 다음 로컬 볼륨 리소스를 추가하여 장치 카메라에 대한 액세스 권한을 부여하세요. [5단계: Greengrass 그룹에 SageMaker AI Neo 최적화 모델 리소스 추가](#ml-console-dlc-add-resources)의 프로시저를 따르세요.
**참고**  
 컨테이너화되지 않은 모드에서를 실행하는 경우는 디바이스 리소스를 구성하지 않고 디바이스 카메라에 액세스할 AWS IoT Greengrass 수 있습니다.
   + [**리소스 유형(Resource type)**]에서 [**볼륨(Volume)**]을 선택합니다.
   + [**Group owner file access permission**]에서 [**Automatically add OS group permissions of the Linux group that owns the resource**]를 선택합니다.

          
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/ml-dlc-console.html)

1.  올바른 디렉터리를 사용하도록 그룹 구독을 업데이트합니다. 다음 업데이트 사항과 함께 [7단계: Greengrass 그룹에 구독 추가](#ml-console-dlc-add-subscription)의 절차를 따릅니다.
   + 첫 번째 주제 필터에 **/resnet-18/predictions**를 입력합니다.
   + 두 번째 주제 필터에 **/resnet-18/test**를 입력합니다.

1.  올바른 디렉터리를 사용하도록 테스트 구독을 업데이트합니다. 다음 업데이트 사항과 함께 [추론 예제 테스트](#ml-console-dlc-test-app)의 절차를 따릅니다.
   +  **구독**의 경우 **주제 구독**을 선택합니다. **구독 주제**에 **/resnet-18/predictions**를 입력합니다.
   +  `/resnet-18/predictions` 페이지에서 게시할 `/resnet-18/test` 주제를 지정합니다.

## AWS IoT Greengrass ML 추론 문제 해결
<a name="ml-inference-troubleshooting"></a>

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

### 오류 로그 확인
<a name="troubleshooting-check-logs"></a>

1. <a name="root-access-logs"></a>루트 사용자로 전환하고 `log` 디렉터리로 이동합니다. AWS IoT Greengrass 로그에 액세스하려면 루트 권한이 필요합니다.

   ```
   sudo su
   cd /greengrass/ggc/var/log
   ```

1. `runtime.log`의 오류를 확인합니다. 

   ```
   cat system/runtime.log | grep 'ERROR'
   ```

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

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

   자세한 내용은 [로그 문제 해결](gg-troubleshooting.md#troubleshooting-logs) 단원을 참조하십시오.

 

### Lambda 함수가 성공적으로 배포되었는지 확인
<a name="troubleshooting-check-lambda"></a>

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

   ```
   cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version
   ls -la
   ```

1.  디렉터리에 [3단계: 추론 Lambda 함수 생성](#ml-console-dlc-create-lambda)에 업로드한 `optimizedImageClassification.zip` 배포 패키지와 동일한 콘텐츠가 들어 있는지 확인하십시오.

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

 

### 추론 모델이 성공적으로 배포되었는지 확인
<a name="troubleshooting-check-model"></a>

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

   ```
   ps aux | grep lambda-function-name
   ```

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

1.  Lambda 런타임 네임스페이스를 입력합니다. 명령을 실행하기 전에 자리 표시자 *pid* 값을 바꿔야 합니다.
**참고**  
이 디렉터리 및 내용은 Lambda 런타임 네임스페이스입니다. 따라서 정규 Linux 네임스페이스에서는 보이지 않습니다.

   ```
   sudo nsenter -t pid -m /bin/bash
   ```

1. 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`을 찾을 수 없습니다.
<a name="troubleshooting-atom-config"></a>

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

## 다음 단계
<a name="next-dlc-steps"></a>

 다음에는 기타 최적화된 모델을 탐색합니다. 자세한 내용은 [SageMaker AI Neo 설명서를](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) 참조하세요.