์๋ง์กด ์ธ์ด์ง๋ฉ์ด์ปค ์๋ํฌ์ธํธ์ YOLOv8 ๋ฐฐํฌ ๊ฐ์ด๋
Ultralytics' YOLOv8 ๊ณผ ๊ฐ์ ๊ณ ๊ธ ์ปดํจํฐ ๋น์ ๋ชจ๋ธ์ Amazon SageMaker ์๋ํฌ์ธํธ์ ๋ฐฐํฌํ๋ฉด ๋ค์ํ ๋จธ์ ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๊ด๋ฒ์ํ ๊ฐ๋ฅ์ฑ์ด ์ด๋ฆฝ๋๋ค. ์ด๋ฌํ ๋ชจ๋ธ์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํ ํต์ฌ์ ์ค์ , ๊ตฌ์ฑ ๋ฐ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์ดํดํ๋ ๋ฐ ์์ต๋๋ค. YOLOv8 ๋ AWS์ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋จธ์ ๋ฌ๋ ์๋น์ค์ธ Amazon SageMaker์ ์ํํ๊ฒ ํตํฉ๋ ๋ ๋์ฑ ๊ฐ๋ ฅํด์ง๋๋ค.
์ด ๊ฐ์ด๋๋ Amazon SageMaker ์๋ํฌ์ธํธ์ YOLOv8 PyTorch ๋ชจ๋ธ์ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์๋ดํฉ๋๋ค. AWS ํ๊ฒฝ์ ์ค๋นํ๊ณ , ๋ชจ๋ธ์ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ๊ณ , ๋ฐฐํฌ๋ฅผ ์ํด AWS CloudFormation ๋ฐ AWS ํด๋ผ์ฐ๋ ๊ฐ๋ฐ ํคํธ(CDK)์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ํ์ํ ํ์ ์ฌํญ์ ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค.
์๋ง์กด ์ธ์ด์ง๋ฉ์ด์ปค
Amazon SageMaker๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๊ตฌ์ถ, ํ์ต ๋ฐ ๋ฐฐํฌํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๋ Amazon Web Services(AWS)์ ๋จธ์ ๋ฌ๋ ์๋น์ค์ ๋๋ค. ๋จธ์ ๋ฌ๋ ์ํฌํ๋ก์ฐ์ ๋ค์ํ ์ธก๋ฉด์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ด๋ฒ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ชจ๋ธ ํ๋์ ์ํ ์๋ํ๋ ๊ธฐ๋ฅ, ๋๊ท๋ชจ ๋ชจ๋ธ ํ์ต์ ์ํ ์ต์ , ๋ชจ๋ธ์ ํ๋ก๋์ ์ ๋ฐฐํฌํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ํฌํจ๋ฉ๋๋ค. SageMaker๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋จธ์ ๋ฌ๋ ํ๋ ์์ํฌ๋ฅผ ์ง์ํ์ฌ ๋ค์ํ ํ๋ก์ ํธ์ ํ์ํ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ๋ํ ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง, ์ํฌํ๋ก ๊ด๋ฆฌ ๋ฐ ์ฑ๋ฅ ๋ถ์ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
์๋ง์กด ์ธ์ด์ง๋ฉ์ด์ปค ์๋ํฌ์ธํธ์ YOLOv8 ๋ฐฐํฌํ๊ธฐ
Amazon SageMaker์ YOLOv8 ๋ฅผ ๋ฐฐํฌํ๋ฉด ๊ด๋ฆฌํ ํ๊ฒฝ์ ์ฌ์ฉํ์ฌ ์ค์๊ฐ ์ถ๋ก ์ ์ํํ๊ณ ์๋ ํ์ฅ ๋ฑ์ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค. ์๋์์ AWS ์ํคํ ์ฒ๋ฅผ ์ดํด๋ณด์ธ์.
1๋จ๊ณ: AWS ํ๊ฒฝ ์ค์
๋จผ์ ๋ค์๊ณผ ๊ฐ์ ์ ์ ์กฐ๊ฑด์ด ๊ฐ์ถ์ด์ ธ ์๋์ง ํ์ธํ์ธ์:
-
AWS ๊ณ์ : ์์ง ๊ณ์ ์ด ์๋ ๊ฒฝ์ฐ AWS ๊ณ์ ์ ๊ฐ์ ํ์ธ์.
-
๊ตฌ์ฑ๋ IAM ์ญํ : Amazon SageMaker, AWS CloudFormation ๋ฐ Amazon S3์ ํ์ํ ๊ถํ์ด ์๋ IAM ์ญํ ์ด ํ์ํฉ๋๋ค. ์ด ์ญํ ์๋ ์ด๋ฌํ ์๋น์ค์ ์ก์ธ์คํ ์ ์๋ ์ ์ฑ ์ด ์์ด์ผ ํฉ๋๋ค.
-
AWS CLI: ์์ง ์ค์นํ์ง ์์ ๊ฒฝ์ฐ AWS ๋ช ๋ น์ค ์ธํฐํ์ด์ค(CLI)๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ค์นํ๊ณ ๊ณ์ ์ธ๋ถ ์ ๋ณด๋ก ๊ตฌ์ฑํฉ๋๋ค. ์ค์น ๋ฐฉ๋ฒ์ AWS CLI ์ง์นจ์ ๋ฐ๋ฅด์ธ์.
-
AWS CDK: ์์ง ์ค์นํ์ง ์์ ๊ฒฝ์ฐ ๋ฐฐํฌ ์คํฌ๋ฆฝํ ์ ์ฌ์ฉํ AWS ํด๋ผ์ฐ๋ ๊ฐ๋ฐ ํคํธ(CDK)๋ฅผ ์ค์นํฉ๋๋ค. ์ค์น ๋ฐฉ๋ฒ์ AWS CDK ์ง์นจ์ ๋ฐ๋ฅด์ธ์.
-
์ ์ ํ ์๋น์ค ํ ๋น๋: ์๋ง์กด ์ธ์ด์ง๋ฉ์ด์ปค์์ ๋ค์ ๋ ๊ฐ์ง ๋ฆฌ์์ค์ ๋ํ ์ถฉ๋ถํ ํ ๋น๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
ml.m5.4xlarge
์๋ํฌ์ธํธ ์ฌ์ฉ์ ์ํด, ๋ค๋ฅธ ํ๋๋ml.m5.4xlarge
๋ ธํธ๋ถ ์ธ์คํด์ค ์ฌ์ฉ์ ์ํด. ๊ฐ๊ฐ ์ต์ ํ๋์ ํ ๋น๋ ๊ฐ์ด ํ์ํฉ๋๋ค. ํ์ฌ ํ ๋น๋์ด ์ด ์๊ตฌ ์ฌํญ๋ณด๋ค ๋ฎ๋ค๋ฉด ๊ฐ๊ฐ์ ๋ํด ์ฆ๋์ ์์ฒญํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํ ๋น๋ ์ฆ๋์ ์์ฒญํ๋ ค๋ฉด ๋ค์ ์๋ด์ ๋ฐ๋ผ AWS ์๋น์ค ํ ๋น๋ ๋ฌธ์.
2๋จ๊ณ: YOLOv8 ์ธ์ด์ง๋ฉ์ด์ปค ๋ฆฌํฌ์งํ ๋ฆฌ ๋ณต์ ํ๊ธฐ
๋ค์ ๋จ๊ณ๋ ์ธ์ด์ง๋ฉ์ด์ปค์ YOLOv8 ๋ฐฐํฌ๋ฅผ ์ํ ๋ฆฌ์์ค๊ฐ ํฌํจ๋ ํน์ AWS ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ๋ ๊ฒ์ ๋๋ค. GitHub์์ ํธ์คํ ๋๋ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์๋ ํ์ํ CDK ์คํฌ๋ฆฝํธ ๋ฐ ๊ตฌ์ฑ ํ์ผ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- GitHub ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํฉ๋๋ค: ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ํธ์คํธ-yolov8-์จ-์๊ทธ๋ฉ์ด์ปค-์๋ํฌ์ธํธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํฉ๋๋ค:
- ๋ณต์ ๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค: ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ณต์ ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๋ณ๊ฒฝํฉ๋๋ค:
3๋จ๊ณ: CDK ํ๊ฒฝ ์ค์
์ด์ ํ์ํ ์ฝ๋๊ฐ ์ค๋น๋์์ผ๋ฏ๋ก AWS CDK๋ก ๋ฐฐํฌํ ํ๊ฒฝ์ ์ค์ ํ์ธ์.
- Python ๊ฐ์ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค: Python ํ๊ฒฝ๊ณผ ์ข ์์ฑ์ ๊ฒฉ๋ฆฌํฉ๋๋ค. ์คํ:
- ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํฉ๋๋ค:
- ์ข ์์ฑ์ ์ค์นํฉ๋๋ค: ํ๋ก์ ํธ์ ํ์ํ Python ์ข ์์ฑ์ ์ค์นํฉ๋๋ค:
- AWS CDK ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ทธ๋ ์ด๋: ์ต์ ๋ฒ์ ์ AWS CDK ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋์ง ํ์ธํ์ธ์:
4๋จ๊ณ: AWS CloudFormation ์คํ ์์ฑํ๊ธฐ
- CDK ์ ํ๋ฆฌ์ผ์ด์ ์ ํฉ์ฑํฉ๋๋ค: CDK ์ฝ๋์์ AWS CloudFormation ํ ํ๋ฆฟ์ ์์ฑํฉ๋๋ค:
- CDK ์ ํ๋ฆฌ์ผ์ด์ ๋ถํธ์คํธ๋ฉ: CDK ๋ฐฐํฌ๋ฅผ ์ํด AWS ํ๊ฒฝ์ ์ค๋นํฉ๋๋ค:
- ์คํ์ ๋ฐฐํฌํฉ๋๋ค: ํ์ํ AWS ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ๋ชจ๋ธ์ ๋ฐฐํฌํฉ๋๋ค:
5๋จ๊ณ: YOLOv8 ๋ชจ๋ธ ๋ฐฐํฌ
๋ฐฐํฌ ์ง์นจ์ ์ดํด๋ณด๊ธฐ ์ ์ Ultralytics ์์ ์ ๊ณตํ๋ ๋ค์ํ YOLOv8 ๋ชจ๋ธ์ ํ์ธํ์ธ์. ์ด๋ฅผ ํตํด ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๊ฐ์ฅ ์ ํฉํ ๋ชจ๋ธ์ ์ ํํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
AWS ํด๋ผ์ฐ๋ํฌ๋ฉ์ด์ ์คํ์ ์์ฑํ ํ, ๋ค์ ๋จ๊ณ๋ YOLOv8 ์ ๋ฐฐํฌํ๋ ๊ฒ์ ๋๋ค.
-
๋ ธํธ๋ถ ์ธ์คํด์ค๋ฅผ ์ฝ๋๋ค: AWS ์ฝ์๋ก ์ด๋ํด Amazon SageMaker ์๋น์ค๋ก ์ด๋ํฉ๋๋ค. ๋์๋ณด๋์์ "๋ ธํธ๋ถ ์ธ์คํด์ค"๋ฅผ ์ ํํ ๋ค์, CDK ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๋ก ๋ง๋ ๋ ธํธ๋ถ ์ธ์คํด์ค๋ฅผ ์ฐพ์ต๋๋ค. ๋ ธํธ๋ถ ์ธ์คํด์ค๋ฅผ ์ด์ด Jupyter ํ๊ฒฝ์ ์ก์ธ์คํฉ๋๋ค.
-
inference.py์ ์ก์ธ์คํ๊ณ ์์ ํฉ๋๋ค: Jupyter์์ SageMaker ๋ ธํธ๋ถ ์ธ์คํด์ค๋ฅผ ์ฐ ํ, inference.py ํ์ผ์ ์ฐพ์ต๋๋ค. ์๋์ ๊ฐ์ด inference.py์ output_fn ํจ์๋ฅผ ํธ์งํ๊ณ ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํ๋ฉด์ ๋ณ๊ฒฝ ์ฌํญ์ ์คํฌ๋ฆฝํธ์ ์ ์ฅํฉ๋๋ค.
import json
def output_fn(prediction_output, content_type):
"""Formats model outputs as JSON string according to content_type, extracting attributes like boxes, masks, keypoints."""
print("Executing output_fn from inference.py ...")
infer = {}
for result in prediction_output:
if result.boxes is not None:
infer['boxes'] = result.boxes.numpy().data.tolist()
if result.masks is not None:
infer['masks'] = result.masks.numpy().data.tolist()
if result.keypoints is not None:
infer['keypoints'] = result.keypoints.numpy().data.tolist()
if result.obb is not None:
infer['obb'] = result.obb.numpy().data.tolist()
if result.probs is not None:
infer['probs'] = result.probs.numpy().data.tolist()
return json.dumps(infer)
- 1_DeployEndpoint.ipynb๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํฌ์ธํธ ๋ฐฐํฌ: Jupyter ํ๊ฒฝ์์ sm-notebook ๋๋ ํฐ๋ฆฌ์ ์๋ 1_DeployEndpoint.ipynb ๋ ธํธ๋ถ์ ์ฝ๋๋ค. ๋ ธํธ๋ถ์ ์ง์นจ์ ๋ฐ๋ผ ์ ์ ์คํํ์ฌ YOLOv8 ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ๊ณ ์ ๋ฐ์ดํธ๋ ์ถ๋ก ์ฝ๋์ ํจ๊ป ํจํค์งํ ๋ค์ Amazon S3 ๋ฒํท์ ์ ๋ก๋ํฉ๋๋ค. ์ด ๋ ธํธ๋ถ์ YOLOv8 ๋ชจ๋ธ์ ๋ํ SageMaker ์๋ํฌ์ธํธ๋ฅผ ๋ง๋ค๊ณ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ์๋ดํฉ๋๋ค.
6๋จ๊ณ: ๋ฐฐํฌ ํ ์คํธ
์ด์ YOLOv8 ๋ชจ๋ธ์ด ๋ฐฐํฌ๋์์ผ๋ฏ๋ก ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ํ ์คํธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
-
ํ ์คํธ ๋ ธํธ๋ถ์ ์ฝ๋๋ค: ๋์ผํ Jupyter ํ๊ฒฝ์์ sm-notebook ๋๋ ํฐ๋ฆฌ์์ 2_TestEndpoint.ipynb ๋ ธํธ๋ถ์ ์ฐพ์ ์ฝ๋๋ค.
-
ํ ์คํธ ๋ ธํธ๋ถ์ ์คํํฉ๋๋ค: ๋ ธํธ๋ถ์ ์ง์นจ์ ๋ฐ๋ผ ๋ฐฐํฌ๋ SageMaker ์๋ํฌ์ธํธ๋ฅผ ํ ์คํธํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์๋ํฌ์ธํธ์ ์ด๋ฏธ์ง๋ฅผ ์ ์กํ๊ณ ์ถ๋ก ์ ์คํํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋์ ๊ฐ์ด ๋ชจ๋ธ์ ์ฑ๋ฅ๊ณผ ์ ํ๋๋ฅผ ์๊ฐํํ๊ธฐ ์ํด ์ถ๋ ฅ์ ํ๋กํ ํฉ๋๋ค.
- ๋ฆฌ์์ค ์ ๋ฆฌ: ํ ์คํธ ๋ ธํธ๋ถ์ ์๋ํฌ์ธํธ์ ํธ์คํ ๋ ๋ชจ๋ธ์ ์ ๋ฆฌํ๋ ๊ณผ์ ๋ ์๋ดํฉ๋๋ค. ์ด๋ ํนํ ๋ฐฐํฌ๋ ๋ชจ๋ธ์ ์ฆ์ ์ฌ์ฉํ ๊ณํ์ด ์๋ ๊ฒฝ์ฐ ๋น์ฉ๊ณผ ๋ฆฌ์์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ์ค์ํ ๋จ๊ณ์ ๋๋ค.
7๋จ๊ณ: ๋ชจ๋ํฐ๋ง ๋ฐ ๊ด๋ฆฌ
ํ ์คํธ ํ์๋ ๋ฐฐํฌ๋ ๋ชจ๋ธ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
-
Amazon CloudWatch๋ก ๋ชจ๋ํฐ๋ง: Amazon CloudWatch๋ฅผ ์ฌ์ฉํ์ฌ SageMaker ์๋ํฌ์ธํธ์ ์ฑ๋ฅ๊ณผ ์ํ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ํ์ธํฉ๋๋ค.
-
์๋ํฌ์ธํธ ๊ด๋ฆฌ: ์๋ํฌ์ธํธ์ ์ง์์ ์ธ ๊ด๋ฆฌ๋ฅผ ์ํด SageMaker ์ฝ์์ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ์์ ๋ฐ๋ผ ๋ชจ๋ธ์ ํ์ฅ, ์ ๋ฐ์ดํธ ๋๋ ์ฌ๋ฐฐํฌํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
์ด ๋จ๊ณ๋ฅผ ์๋ฃํ๋ฉด Amazon ์ธ์ด์ง๋ฉ์ด์ปค ์๋ํฌ์ธํธ์ YOLOv8 ๋ชจ๋ธ์ ์ฑ๊ณต์ ์ผ๋ก ๋ฐฐํฌํ๊ณ ํ ์คํธํ ๊ฒ์ ๋๋ค. ์ด ํ๋ก์ธ์ค๋ฅผ ํตํด ๋จธ์ ๋ฌ๋ ๋ฐฐํฌ๋ฅผ ์ํ AWS ์๋น์ค ์ฌ์ฉ์ ๋ํ ์ค๋ฌด ๊ฒฝํ์ ์์ ์ ์์ ๋ฟ๋ง ์๋๋ผ ํฅํ ๋ค๋ฅธ ๊ณ ๊ธ ๋ชจ๋ธ์ ๋ฐฐํฌํ ์ ์๋ ๊ธฐ๋ฐ์ ๋ง๋ จํ ์ ์์ต๋๋ค.
์์ฝ
์ด ๊ฐ์ด๋๋ AWS CloudFormation ๋ฐ AWS ํด๋ผ์ฐ๋ ๊ฐ๋ฐ ํคํธ(CDK)๋ฅผ ์ฌ์ฉํ์ฌ Amazon SageMaker ์๋ํฌ์ธํธ์ YOLOv8 ๋ฐฐํฌํ๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์๋ดํฉ๋๋ค. ์ด ํ๋ก์ธ์ค์๋ ํ์ํ GitHub ๋ฆฌํฌ์งํ ๋ฆฌ ๋ณต์ , CDK ํ๊ฒฝ ์ค์ , AWS ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ ๋ฐฐํฌ, SageMaker์์ ์ฑ๋ฅ ํ ์คํธ๊ฐ ํฌํจ๋ฉ๋๋ค.
์์ธํ ๊ธฐ์ ์ ๋ด์ฉ์ AWS ๋จธ์ ๋ฌ๋ ๋ธ๋ก๊ทธ์ ์ด ๊ธ์ ์ฐธ์กฐํ์ธ์. ๋ค์ํ ํน์ง๊ณผ ๊ธฐ๋ฅ์ ๋ํ ์์ธํ ๋ด์ฉ์ Amazon SageMaker ๊ณต์ ์ค๋ช ์์์ ํ์ธํ ์๋ ์์ต๋๋ค.
๋ค์ํ YOLOv8 ํตํฉ์ ๋ํด ์์ธํ ์์๋ณด๊ณ ์ถ์ผ์ ๊ฐ์? Ultralytics ํตํฉ ๊ฐ์ด๋ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์ฌ ๋จธ์ ๋ฌ๋ ํ๋ก์ ํธ๋ฅผ ํฅ์์ํฌ ์ ์๋ ์ถ๊ฐ ๋๊ตฌ์ ๊ธฐ๋ฅ์ ์์๋ณด์ธ์.