์๋ง์กด ์ธ์ด์ง๋ฉ์ด์ปค ์๋ํฌ์ธํธ์ 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):
"""Formats model outputs as JSON string, 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 ํตํฉ ๊ฐ์ด๋ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์ฌ ๋จธ์ ๋ฌ๋ ํ๋ก์ ํธ๋ฅผ ํฅ์์ํฌ ์ ์๋ ์ถ๊ฐ ๋๊ตฌ์ ๊ธฐ๋ฅ์ ์์๋ณด์ธ์.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Amazon SageMaker ์๋ํฌ์ธํธ์ Ultralytics YOLOv8 ๋ชจ๋ธ์ ๋ฐฐํฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
Amazon SageMaker ์๋ํฌ์ธํธ์ Ultralytics YOLOv8 ๋ชจ๋ธ์ ๋ฐฐํฌํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
- AWS ํ๊ฒฝ ์ค์ ํ๊ธฐ: AWS ๊ณ์ , ํ์ํ ๊ถํ์ด ์๋ IAM ์ญํ ๋ฐ AWS CLI ๊ฐ ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. ์์ง ์ค์นํ์ง ์์ ๊ฒฝ์ฐ AWS CDK๋ฅผ ์ค์นํฉ๋๋ค( AWS CDK ์ง์นจ ์ฐธ์กฐ).
- YOLOv8 ์ธ์ด์ง๋ฉ์ด์ปค ๋ฆฌํฌ์งํ ๋ฆฌ ๋ณต์ ํ๊ธฐ:
- CDK ํ๊ฒฝ ์ค์ : Python ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๊ณ , ํ์ฑํํ๊ณ , ์ข ์ ์์๋ฅผ ์ค์นํ๊ณ , AWS CDK ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค.
- AWS CDK๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ: CloudFormation ์คํ์ ํฉ์ฑ ๋ฐ ๋ฐฐํฌํ๊ณ ํ๊ฒฝ์ ๋ถํธ์คํธ๋ฉํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ฌธ์ ์น์ ์ ์ฐธ์กฐํ์ธ์.
Amazon SageMaker์ YOLOv8 ๋ฐฐํฌ๋ฅผ ์ํ ์ ์ ์กฐ๊ฑด์ ๋ฌด์์ธ๊ฐ์?
Amazon SageMaker์ YOLOv8 ๋ฅผ ๋ฐฐํฌํ๋ ค๋ฉด ๋ค์ ์ฌ์ ์๊ตฌ ์ฌํญ์ด ์๋์ง ํ์ธํ์ธ์:
- AWS ๊ณ์ : ํ์ฑ AWS ๊ณ์ (์ฌ๊ธฐ์์ ๊ฐ์ ).
- IAM ์ญํ : SageMaker, CloudFormation ๋ฐ Amazon S3์ ๋ํ ๊ถํ์ด ์๋ IAM ์ญํ ์ ๊ตฌ์ฑํฉ๋๋ค.
- AWS CLI: AWS ๋ช ๋ น์ค ์ธํฐํ์ด์ค ์ค์น ๋ฐ ๊ตฌ์ฑ(AWS CLI ์ค์น ๊ฐ์ด๋).
- AWS CDK: ์ค์น๋ AWS ํด๋ผ์ฐ๋ ๊ฐ๋ฐ ํคํธ(CDK ์ค์ ๊ฐ์ด๋).
- ์๋น์ค ํ ๋น๋: ๋ค์์ ๋ํ ์ถฉ๋ถํ ํ ๋น๋
ml.m5.4xlarge
์๋ํฌ์ธํธ์ ๋ ธํธ๋ถ ์ฌ์ฉ ๋ชจ๋์ ๋ํ ์ธ์คํด์ค(ํ ๋น๋ ์ฆ๊ฐ ์์ฒญ).
์์ธํ ์ค์ ์ ์ด ์น์ ์ ์ฐธ์กฐํ์ธ์.
์๋ง์กด ์ธ์ด์ง๋ฉ์ด์ปค์์ Ultralytics YOLOv8 ์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
์๋ง์กด ์ธ์ด์ง๋ฉ์ด์ปค์์ Ultralytics YOLOv8 ์ ์ฌ์ฉํ๋ฉด ๋ช ๊ฐ์ง ์ด์ ์ด ์์ต๋๋ค:
- ํ์ฅ์ฑ ๋ฐ ๊ด๋ฆฌ: SageMaker๋ ์๋ ํ์ฅ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๊ด๋ฆฌํ ํ๊ฒฝ์ ์ ๊ณตํ์ฌ ์ค์๊ฐ ์ถ๋ก ์ ๋์์ด ๋ฉ๋๋ค.
- AWS ์๋น์ค์์ ํตํฉ: ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง๋ฅผ ์ํ S3, ์ฝ๋ํ ์ธํ๋ผ๋ฅผ ์ํ CloudFormation, ๋ชจ๋ํฐ๋ง์ ์ํ CloudWatch์ ๊ฐ์ ๋ค๋ฅธ AWS ์๋น์ค์ ์ํํ๊ฒ ํตํฉํ ์ ์์ต๋๋ค.
- ๋ฐฐํฌ์ ์ฉ์ด์ฑ: AWS CDK ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ์ด ๊ฐ์ํ๋๊ณ ๋ฐฐํฌ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ํ๋ฉ๋๋ค.
- ์ฑ๋ฅ: ๋๊ท๋ชจ ์ถ๋ก ์์ ์ ํจ์จ์ ์ผ๋ก ์คํํ๊ธฐ ์ํด Amazon SageMaker์ ๊ณ ์ฑ๋ฅ ์ธํ๋ผ๋ฅผ ํ์ฉํ์ธ์.
์๊ฐ ์น์ ์์ ์ธ์ด์ง๋ฉ์ด์ปค ์ฌ์ฉ์ ์ฅ์ ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
Amazon SageMaker์์ YOLOv8 ์ ๋ํ ์ถ๋ก ๋ก์ง์ ์ฌ์ฉ์ ์ง์ ํ ์ ์๋์?
์, Amazon SageMaker์์ YOLOv8 ์ ๋ํ ์ถ๋ก ๋ก์ง์ ์ฌ์ฉ์ ์ง์ ํ ์ ์์ต๋๋ค:
-
์์
inference.py
: ์ฐพ๊ธฐ ๋ฐ ์ฌ์ฉ์ ์ง์ output_fn
ํจ์์inference.py
ํ์ผ์ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ ํ์์ ์กฐ์ ํ ์ ์์ต๋๋ค.import json def output_fn(prediction_output): """Formats model outputs as JSON string, extracting attributes like boxes, masks, keypoints.""" infer = {} for result in prediction_output: if result.boxes is not None: infer["boxes"] = result.boxes.numpy().data.tolist() # Add more processing logic if necessary return json.dumps(infer)
-
์ ๋ฐ์ดํธ๋ ๋ชจ๋ธ ๋ฐฐํฌ: ์ ๊ณต๋ Jupyter ๋ ธํธ๋ถ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ๋ค์ ๋ฐฐํฌํด์ผ ํฉ๋๋ค(
1_DeployEndpoint.ipynb
)์ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํจํ๋๋ก ์ค์ ํฉ๋๋ค.
์์ ๋ ๋ชจ๋ธ์ ๋ฐฐํฌํ๋ ค๋ฉด ์์ธํ ๋จ๊ณ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฐฐํฌ๋ YOLOv8 ๋ชจ๋ธ์ Amazon SageMaker์์ ํ ์คํธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
๋ฐฐํฌ๋ YOLOv8 ๋ชจ๋ธ์ Amazon SageMaker์์ ํ ์คํธํฉ๋๋ค:
- ํ
์คํธ ๋
ธํธ๋ถ ์ด๊ธฐ: ์ฐพ๊ธฐ
2_TestEndpoint.ipynb
๋ ธํธ๋ถ์ ์ฌ์ฉํ์ธ์. - ๋ ธํธ๋ถ์ ์คํํฉ๋๋ค: ๋ ธํธ๋ถ์ ์ง์นจ์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ ์๋ํฌ์ธํธ๋ก ๋ณด๋ด๊ณ , ์ถ๋ก ์ ์ํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ์ํฉ๋๋ค.
- ๊ฒฐ๊ณผ ์๊ฐํ: ๊ธฐ๋ณธ ์ ๊ณต ํ๋กํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๊ฐ์ง๋ ๊ฐ์ฒด ์ฃผ๋ณ์ ๊ฒฝ๊ณ ์์ ๋ฑ์ ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ์๊ฐํํ ์ ์์ต๋๋ค.
์ข ํฉ์ ์ธ ํ ์คํธ ์ง์นจ์ ํ ์คํธ ์น์ ์ ์ฐธ์กฐํ์ธ์.