AWS IoT Greengrass 구성요소로 기계 학습 추론 수행하기
위에 관련된 내용이지만, 사실 좀 그지같이 쓰여있어서 이해하기 어렵다..
그래서 공부하고 정리한 내용을 적어보아야지.. 기록기록
1. AWS IoT Greengrass에 접속해 Greengrass 디바이스 - 구성 요소에 접속한다. 중간에 ‘구성 요소 생성’을 클릭한다.
2. 구성 요소 정보에서 구성 요소 소스에서 레시피를 JSON으로 입력을 선택하고, 레시피를 작성한다. 레시피의 “run”은 코어 디바이스에서 실행할 부분이며, “script”에 실행할 명령을 명시하면 코어 디바이스에서 차례로 명령을 실행한다. 이 레시피에서는 가상환경을 실행하고, 추론을 실행하는 코드를 실행하라는 명령이 명시되어 있다.
아래 레시피는 라즈베리파이에서 실행되는 것으로, os는 linux로 설정해놓았다.
script 부분에는 pi 디렉토리로 이동 및 가상환경 실행, 추론 코드가 있는 디렉토리로 이동, 추론 코드 실행 순이다.
라즈베리파이에서 실행되기 때문에 &&를 사용해 이전의 명령어가 실행되고 난 뒤에 다음 명령어가 실행되도록 하였다.
Artifacts 부분의 Uri는 S3 버킷에 저장된 추론 코드 및 모델, 데이터셋 등이 들어있는 Amazon SageMaker로 만들어진 기계학습 코드들의 압축 파일이다. 압축파일이기 때문에 Unarchive에 Zip이라고 작성했다.
{
"RecipeFormatVersion": "2020-01-25",
"ComponentName": "com.james.socket",
"ComponentVersion": "1.0.2",
"ComponentType": "aws.greengrass.generic",
"ComponentDescription": "Capstone Design James socket server.",
"ComponentPublisher": "Me",
"ComponentConfiguration": {
"DefaultConfiguration": {
"accessControl": {}
}
},
"Manifests": [
{
"Platform": {
"os": "linux",
"architecture": "arm"
},
"Lifecycle": {
"install": {
"Script": ""
},
"run": {
"script": "cd /home/pi&&. pracvenv/bin/activate&&cd socketserve&&python3 jamesML.py"
}
},
"Artifacts": [
{
"Uri": "s3://greengrass-sagemaker-0930/jamesML.zip",
"Digest": "/Yc32C/p71rQimCrTxcqnU1ziSjy9EArmrmD3pGraI0=",
"Algorithm": "SHA-256",
"Unarchive": "ZIP",
"Permission": {
"Read": "OWNER",
"Execute": "NONE"
}
}
]
}
],
"Lifecycle": {}
}
3. 구성 요소 생성이 완료된 모습이다. 오른쪽 상단의 배포를 선택한다.
4. 라즈베리파이4가 등록된 사물 그룹에 배포를 할 것이다.
5. 대상 지정에서 배포 정보에 ‘이름’을 적은 뒤, ‘다음’을 선택한다.
6. 구성 요소 선택에서 내 구성 요소에서 이전에 만든 ‘com.james.Socket’을 선택한다.
7. 구성 요소 구성에서 구성 요소를 선택하고, ‘구성 요소 구성’을 선택해서 구성을 수정한다.
8. 그림과 같이 구성을 추가한다. “runWith”을 “pi”로 지정하여 코어 디바이스에서 pi 사용자로 작동할 수 있도록 명시한다. 아래에서 확인 버튼을 누르고 ‘다음’ 버튼을 눌러서 생성을 완료한다.
pi로 명시하지 않으면, 라즈베리파이에 그린그래스 등록시 사용하는 gcc_user로 실행이 되기 때문에 제대로 동작하지 않는다. 권한이나 사용자 또한 문제가 되는 것인가보다..
9. 마지막으로 검토한 뒤 ‘완료’를 눌러 배포를 시작한다.
10. 코어 디바이스에 배포가 완료되면 그림과 같이 ‘실행 중’이라고 나타난다.
11. 다음 그림은 코어 디바이스인 라즈베리파이4에서 sudo tail -f /greengrass/v2/logs/com.james.socket.log 명령을 실행하면 나타나는 구성 요소의 로그이다. 이를 통해 코어 디바이스에 구성 요소가 완전히 배포 되었으며, 현재 실행 중임을 알 수 있다. 구성 요소 배포를 완료하면, 코어 디바이스인 라즈베리파이4에서 추론 코드가 실행된다.
그림에서 표시한 것과 같이 '사용자 이름 hi 정확도' 라는 결과가 나타난다
12. 얼굴인식 코드는 다음과 같다. 현재 모델에는 min과 hyo 두 사람의 얼굴이 인식되어 있다. 얼굴인식을 10번 측정해 나타난 10번의 정확도의 평균을 구한다. min과 hyo 중 평균값이 더 높은 사람이 인식되었다고 판단한다. 만약 평균값이 일정 수치인 0.99보다 낮다면 이는 침입자인 것으로 판단한다. 이 경우, 즉시 화면을 캡쳐해서 Amazon S3 bucket에 저장한다. 그리고 Amazon QLDB에 시간과 캡쳐한 사진의 S3 URL을 저장한다.
정리해보자면,
S3에 실행하고 싶은 기계학습 모델이 담긴 파일을 압축해서 업로드한다.
그러면 기계학습 추론 코드 및 모델에 라즈베리파이에 있지 않아도 AWS IoT Greengrass 구성요소를 통해 실행할 수 있다.
위의 추론 코드를 실행했음에도 불구하고 이런 식으로 에러가 나타난다면, 위의 8번을 꼭 확인해야한다.
반드시 pi로 설정하도록 할 것.!
그럼 이만!
'AWS > PROJECT' 카테고리의 다른 글
AWS CloudFront, S3, ALB, Route53 몽땅 연동하기 (0) | 2023.02.21 |
---|---|
EC2 인스턴스가 인터넷 연결이 되지 않을 때... (0) | 2022.12.23 |
AWS Lambda로 S3 버킷에 있는 파일의 형식 바꾸기 (0) | 2022.09.19 |
[프로젝트] json 형식을 txt로 변환해서 translate 실행 (0) | 2022.09.06 |
[프로젝트] AWS Translate 사용 방법 (0) | 2022.08.20 |