모델을 대규모로 배포하는 것은 많은 데이터 과학자와 기계 학습 엔지니어에게 번거로운 작업일 수 있습니다. 그러나 Amazon SageMaker 엔드포인트는 기계 학습(ML) 모델 추론을 배포하고 확장하기 위한 간단한 솔루션을 제공합니다. 우리의 마지막 블로그 게시물 및 GitHub 레포 호스팅에 OLO 로브 5 TensorFlowModel
on 아마존 세이지 메이커 종점 독자들의 많은 관심을 불러일으켰습니다. 많은 독자들이 다음을 사용하여 YOLOv5 모델을 호스팅하는 방법을 배우는 데 관심이 있었습니다. PyTorch
. 이 문제를 해결하고 최근 릴리스된 OLO 로브 8 모델에서 울트라리틱스, 우리는 YOLOv8을 호스팅하는 방법에 대한 이 게시물을 제시합니다. PyTorchModel
SageMaker 엔드포인트에서. GNU GPL8 라이선스에 따라 배포되는 YOLOv3 모델은 런타임 효율성과 탐지 정확도로 잘 알려진 인기 있는 개체 탐지 모델입니다. Amazon SageMaker 엔드포인트는 모델 배포를 위해 쉽게 확장 가능하고 비용 최적화된 솔루션을 제공합니다.
솔루션 개요
다음 이미지는 SageMaker 엔드포인트를 사용하여 YOLOv8 모델을 호스팅하고 엔드포인트를 사용자로 호출하는 데 사용되는 AWS 서비스를 간략하게 보여줍니다. 솔루션은 AWS 클라우드 포메이션 SageMaker 인스턴스 생성을 자동화하고 GitHub의 리포지토리를 인스턴스에 추가합니다. SageMaker 노트북은 YOLOv8 PyTorch 모델에 액세스 및 다운로드하고 모델과 함께 사용자 지정 추론 코드를 아마존 단순 스토리지 서비스 (Amazon S3) 버킷. 노트북 내의 단계는 YOLOv8 PyTorch 모델 및 사용자 지정 추론 코드를 호스팅하는 SageMaker 끝점 생성을 강조 표시합니다. 노트북은 또한 끝점을 테스트하고 결과를 구성하는 방법을 보여줍니다. 솔루션은 다음 단계로 구성됩니다.
- 두 개의 노트북이 있는 GitHub 리포지토리를 만들었습니다.
1_DeployEndpoint.ipynb
및2_TestEndpoint.ipynb
아래sm-notebook/
디렉토리. - AWS CloudFormation 템플릿이 실행되고 SageMaker 노트북 인스턴스가 생성된 다음 GitHub 리포지토리를 복제합니다.
- 노트북
1_DeployEndpoint.ipynb
YOLOv8 모델을 다운로드하는 데 사용됩니다. - YOLOv8 모델 및 추론 코드는 다음과 같이 저장됩니다.
model.tar.gz
아마존 S3에서. - SageMaker 엔드포인트는
model.tar.gz
. - 노트북
2_TestEndpoint.ipynb
엔드포인트를 테스트하고 결과를 수집하는 데 사용됩니다.
사전 조건
AWS 계정 AWS Identity and Access Management(IAM) 역할 다음에 대한 액세스를 제공합니다.
- AWS 클라우드 포메이션
- 아마존 세이지 메이커
- 아마존 S3
1. SageMaker 엔드포인트에서 YOLOv8 호스팅
Ultralytics에는 기능이 다른 여러 YOLOv8 모델이 있습니다. 다음과 같이 세분화됩니다.
- 객체 감지 (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - 분할 (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - 분류 (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
이 블로그에서는 다음을 사용하여 객체 감지에 중점을 둡니다. yolov8l.pt
파이토치 모델. SageMaker 엔드포인트에서 YOLOv8 모델 및 사용자 지정 추론 코드를 호스팅하려면 함께 압축하여 단일 파일로 만들어야 합니다. model.tar.gz
다음 구조로:
model.tar.gz ├─ code/ │ ├── inference.py │ └── requirements.txt └── yolov8l.pt
모델 가중치 yolov8l.pt
파일은 외부에 있어야 합니다. code/
디렉토리 및 주요 추론 파이썬 스크립트 inference.py
모델 로드, 입력 구문 분석, 추론 실행 및 출력 후처리에 필요한 기능이 포함된 은 다음 위치에 있어야 합니다. code/
예배 규칙서. 자세한 내용은 inference.py
다음 섹션에 나와 있습니다.
1.1. 사용자 지정 추론 코드
파이프라인 및 코드 워크플로에 따라 SageMaker 엔드포인트에 대한 입력 및 출력이 다를 수 있습니다. 이 게시물에서는 numpy
끝점에 배열하고 처리합니다. 그러나 엔드포인트에 대한 입력은 다음과 같을 수 있습니다. json
또는 텍스트도 마찬가지입니다. 작업 흐름에 따라 에서 기능을 수정해야 합니다. inference.py
다양한 입력과 출력을 수용할 수 있습니다. 또한 최신 YOLOv8 릴리스와 함께 Ultralytics 팀은 Python API를 릴리스하여 다음을 통해 직접 YOLO 라이브러리를 설치할 수 있습니다. requirements.txt
모델을 가져옵니다. inference.py
.
1.1.1. 의 내용 code/inference.py
:
import numpy as np
import torch, os, json, io, cv2, time
from ultralytics import YOLO def model_fn(model_dir): print("Executing model_fn from inference.py ...") env = os.environ model = YOLO("/opt/ml/model/code/" + env['YOLOV8_MODEL']) return model def input_fn(request_body, request_content_type): print("Executing input_fn from inference.py ...") if request_content_type: jpg_original = np.load(io.BytesIO(request_body), allow_pickle=True) jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8) img = cv2.imdecode(jpg_as_np, flags=-1) else: raise Exception("Unsupported content type: " + request_content_type) return img def predict_fn(input_data, model): print("Executing predict_fn from inference.py ...") device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(device) with torch.no_grad(): result = model(input_data) return result def output_fn(prediction_output, content_type): print("Executing output_fn from inference.py ...") infer = {} for result in prediction_output: if result.boxes: infer['boxes'] = result.boxes.numpy().data.tolist() if result.masks: infer['masks'] = result.masks.numpy().data.tolist() if result.probs: infer['probs'] = result.probs.numpy().data.tolist() return json.dumps(infer)
1.1.2. 의 내용 code/requirements.txt
:
모든 파일 내용이 model.tar.gz
완료되면 다음 명령을 실행하여 tar 볼을 만듭니다.
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2. 호스트 model.tar.gz
SageMaker 끝점으로:
여기에는 몇 가지 단계가 포함됩니다. model.tar.gz
먼저 S3 버킷에 업로드됩니다. 업로드된 아티팩트는 SageMaker PyTorchModel을 생성하는 데 사용됩니다. 마지막으로 이 PyTorchModel은 모델을 SageMaker Endpoint에 배포하는 데 사용됩니다.
1.2.1. S3에 모델 및 추론 코드 업로드:
from sagemaker import s3 bucket = "s3://NAME_OF_BUCKET"
prefix = "yolov8/demo-custom-endpoint"
model_data = s3.S3Uploader.upload("model.tar.gz", bucket + "/" + prefix)
1.2.2. SageMaker PyTorchModel 생성:
from sagemaker.pytorch import PyTorchModel model_name = 'yolov8l.pt' model = PyTorchModel(entry_point='inference.py', model_data=model_data, framework_version='1.12', py_version='py38', role=role, env={'TS_MAX_RESPONSE_SIZE':'20000000', 'YOLOV8_MODEL': model_name}, sagemaker_session=sess)
1.2.3. 모델을 엔드포인트로 컴파일하고 호스팅합니다.
from sagemaker.deserializers import JSONDeserializer INSTANCE_TYPE = 'ml.m5.4xlarge'
ENDPOINT_NAME = 'yolov8-pytorch-' + str(datetime.utcnow().strftime('%Y-%m-%d-%H-%M-%S-%f')) predictor = model.deploy(initial_instance_count=1, instance_type=INSTANCE_TYPE, deserializer=JSONDeserializer(), endpoint_name=ENDPOINT_NAME)
2. SageMaker 엔드포인트 테스트
엔드포인트가 성공적으로 호스팅되면 추론을 실행하는 데 사용할 수 있습니다. 이 단계에서는 먼저 이미지를 읽고 바이트로 변환한 다음 바이트를 끝점에 대한 입력으로 전달하여 추론을 실행합니다. 생성된 결과에는 호스팅에 사용되는 YOLOv8 모델 유형에 따라 경계 상자 또는 마스크 또는 신뢰도 점수가 있습니다. 그에 따라 출력을 플롯할 수 있습니다.
2.1.1. 추론 결과 생성 및 출력 플롯:
import cv2, random
import numpy as np
import matplotlib.pyplot as plt orig_image = cv2.imread('bus.jpg') image_height, image_width, _ = orig_image.shape
model_height, model_width = 300, 300
x_ratio = image_width/model_width
y_ratio = image_height/model_height resized_image = cv2.resize(orig_image, (model_height, model_width))
payload = cv2.imencode('.jpg', resized_image)[1].tobytes()
result = predictor.predict(payload) if 'boxes' in result: for idx,(x1,y1,x2,y2,conf,lbl) in enumerate(result['boxes']): # Draw Bounding Boxes x1, x2 = int(x_ratio*x1), int(x_ratio*x2) y1, y2 = int(y_ratio*y1), int(y_ratio*y2) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.rectangle(orig_image, (x1,y1), (x2,y2), color, 4) cv2.putText(orig_image, f"Class: {int(lbl)}", (x1,y1-40), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) cv2.putText(orig_image, f"Conf: {int(conf*100)}", (x1,y1-10), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) if 'masks' in result: # Draw Masks mask = cv2.resize(np.asarray(result['masks'][idx]), dsize=(image_width, image_height), interpolation=cv2.INTER_CUBIC) for c in range(3): orig_image[:,:,c] = np.where(mask>0.5, orig_image[:,:,c]*(0.5)+0.5*color[c], orig_image[:,:,c]) if 'probs' in result: # Find Class lbl = result['probs'].index(max(result['probs'])) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.putText(orig_image, f"Class: {int(lbl)}", (20,20), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) plt.imshow(cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB))
plt.show()
2.1.2. 결과:
개체 감지 및 분할 YOLOv8 모델의 출력은 다음 이미지에 표시됩니다.
3. 정리
CloudFormation 스택 삭제 원래 생성된 모든 리소스를 제거합니다. 그러나 CloudFormation은 현재 엔드포인트, 엔드포인트 구성 및 모델을 자동으로 제거하도록 구성되어 있지 않습니다. 호스팅된 끝점을 사용하지 않는 경우 비용을 절약하기 위해 제거하는 것이 좋습니다. 다음과 같이 할 수 있습니다.
import boto3 sm_client = boto3.client(service_name="sagemaker") response = sm_client.describe_endpoint_config(EndpointConfigName=endpoint_name)
print(response)
endpoint_config_name = response['EndpointConfigName'] # Delete Endpoint
sm_client.delete_endpoint(EndpointName=endpoint_name) # Delete Endpoint Configuration
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name) # Delete Model
for prod_var in response['ProductionVariants']: model_name = prod_var['ModelName'] sm_client.delete_model(ModelName=model_name)
결론
이 게시물에서는 사전 훈련된 YOLOv8을 호스트하는 방법을 시연했습니다. PyTorchModel
SageMaker 엔드포인트에서 엔드포인트를 호출하여 추론 결과를 테스트합니다. 자세한 코드는 GitHub의, 템플릿 CloudFormation 스택은 GitHub에서도 사용할 수 있습니다.
SageMaker 엔드포인트에 대해 자세히 알아보려면 다음을 확인하십시오. 엔드포인트 생성 및 모델 배포 및 Amazon SageMaker와 함께 PyTorch 사용, 다음을 사용하여 강조 표시 PyTorchModel
SageMaker에서. 다음을 사용하여 프로세스를 자동화할 수 있습니다. SageMaker에 대한 CloudFormation 지원.
저자 소개
케빈 송 AWS Professional Services의 데이터 과학자입니다. 그는 생물 물리학 박사 학위를 보유하고 있으며 컴퓨터 비전 및 기계 학습 솔루션 구축 분야에서 XNUMX년 이상의 업계 경험을 가지고 있습니다.
로밀 샤 AWS Professional Services의 IoT Edge 데이터 과학자입니다. Romil은 컴퓨터 비전, 기계 학습 및 IoT 에지 장치 분야에서 XNUMX년 이상의 업계 경험을 보유하고 있습니다. 그는 고객이 산업 설정에서 에지 장치용 기계 학습 모델을 최적화하고 배포하도록 돕는 일에 관여하고 있습니다.
- SEO 기반 콘텐츠 및 PR 배포. 오늘 증폭하십시오.
- 플라토 블록체인. Web3 메타버스 인텔리전스. 지식 증폭. 여기에서 액세스하십시오.
- 출처: https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- :이다
- 1
- 10
- 100
- 7
- a
- 소개
- ACCESS
- 수용하다
- 따라서
- 계정
- 또한
- 주소
- All
- 수
- 아마존
- 아마존 세이지 메이커
- 및
- API를
- 있군요
- 배열
- AS
- At
- 자동화
- 자동화
- 자동적으로
- 가능
- AWS
- AWS 전문 서비스
- 공
- 기반으로
- BE
- 존재
- 생물 물리학
- 블로그
- 박스
- 건물
- 버스
- by
- CAN
- 기능
- 검사
- 수업
- 암호
- 색
- COM
- 컴퓨터
- 컴퓨터 비전
- 자신
- 구성
- 이 포함되어 있습니다
- 함유량
- 내용
- 변하게 하다
- 비용
- 만들
- 만든
- 생성
- 창조
- 현재
- 관습
- 고객
- 데이터
- 데이터 과학자
- 날짜 시간
- 시연
- 보여줍니다
- 의존
- 배포
- 배치
- 전개
- 상세한
- 세부설명
- Detection System
- 장치
- 디바이스
- 다른
- 직접
- 분산
- 다운로드
- 다운로드
- 무승부
- 용이하게
- Edge
- 효율성
- 중
- 종점
- 엔지니어
- 실행
- 경험
- 를
- 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에
- 확정 된
- 최종적으로
- Find
- 먼저,
- 초점
- 수행원
- 다음
- 럭셔리
- 에
- 기능
- 추가
- 생성
- 생성
- GitHub의
- 좋은
- 있다
- 도움이
- 강조
- 하이라이트
- 보유
- 주인
- 호스팅
- 호스팅
- 호스트
- 방법
- How To
- 그러나
- HTML
- HTTPS
- 통합 인증
- IDX
- 영상
- 형상
- import
- in
- 산업
- 산업
- 입력
- 설치
- 예
- 관심
- 관심있는
- 참여
- IOT
- 발행물
- IT
- 그
- JPG
- JSON
- 알려진
- 성
- 배우다
- 배우기
- 도서관
- 특허
- 로드
- 롯
- 기계
- 기계 학습
- 본관
- 구축
- .
- 마스크
- 마스크
- 매트플롯립
- ML
- 모델
- 모델
- 수정
- 배우기
- 여러
- 필요
- 수첩
- numpy
- 대상
- 객체 감지
- of
- on
- 최적화
- 주문
- 원래
- OS
- 요점
- 출력
- 외부
- 통과
- 관로
- 플라톤
- 플라톤 데이터 인텔리전스
- 플라토데이터
- 부디
- 인기 문서
- 게시하다
- 연습
- Predictor
- 제시
- 제시
- 방법
- 처리
- 링크를
- 제공
- 제공
- Python
- 파이 토치
- 모집
- 닥치는대로의
- 읽기
- 독자들
- 최근
- 공개
- 출시
- 제거
- 저장소
- 요구조건 니즈
- 제품 자료
- 응답
- 결과
- 결과
- return
- 달리기
- 달리는
- 현자
- 찜하기
- 확장성
- 규모
- 스케일링
- 과학자
- 과학자
- Seaborn
- 섹션
- 분할
- 서비스
- 설치
- 셰이프
- 영상을
- 표시
- 단순, 간단, 편리
- 단일
- SIX
- 해결책
- 솔루션
- 스택
- 단계
- 단계
- 저장
- 저장
- 상점
- 구조
- 성공적으로
- SUPPORT
- 태스크
- 팀
- 이 템플릿
- test
- 그
- XNUMXD덴탈의
- 그들의
- 시간
- 에
- 함께
- 토치
- 토치비전
- 아래에
- 업로드
- us
- 사용자
- 시력
- 잘
- 어느
- 의지
- 과
- 이내
- 겠지
- 년
- 욜로
- 자신의
- 너의
- 제퍼 넷