AWS의 SageMaker에 올려져 있는 ML/AI 추론 모델 엔드포인트에 request 날리는 코드는 다음과 같습니다. 관련된 공식 레퍼런스(https://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/neo-requests-boto3.html)의 코드는 다음과 같습니다.
import boto3
import json
endpoint = 'insert name of your endpoint here'
runtime = boto3.Session().client('sagemaker-runtime')
# Read image into memory
with open(image, 'rb') as f:
payload = f.read()
# Send image via InvokeEndpoint API
response = runtime.invoke_endpoint(EndpointName=endpoint, ContentType='application/x-image', Body=payload)
# Unpack response
result = json.loads(response['Body'].read().decode())
그런데 이것만으로는 실제 활용할 때 삽질을 할 가능성이 있습니다. 저의 경우에는 이 코드를 아래와 같이 수정해서 사용했습니다.
import boto3
import json
sm = boto3.client('sagemaker-runtime',
region_name='ap-northeast-2',
aws_access_key_id='AccessKey 입력', # AccessKey
aws_secret_access_key='SecretKey 입력' # SecretKey
)
with open('./test.json', 'r') as f:
json_data = json.load(f)
endpoint_name = "엔드포인트 이름"
response = sm.invoke_endpoint(EndpointName=endpoint_name,
Body=json.dumps(json_data), # valid types: <class 'bytes'>, <class 'bytearray'>, file-like object
ContentType='application/json')
response_json = json.loads(response['Body'].read())
위 코드에서 요청을 날릴 때 Body에 담을 JSON은 test.json으로 따로 빼놓은 상태입니다. 이런 식으로 요청하면, 요청에 대한 응답이 잘 돌아옵니다.
'DevOps > AWS' 카테고리의 다른 글
[AWS] AWS CLI 멀티 프로필 설정 방법 (0) | 2023.10.24 |
---|---|
[AWS] ec2 ssh 접속 permission denied (publickey) 해결 방법 (0) | 2023.10.23 |
[aws] RDS 타임존 변경하는 방법 (0) | 2023.10.20 |
[aws] ec2 인스턴스 타입 변경하는 방법 (0) | 2023.10.02 |
[aws] S3 버킷에 여러 파일 한번에 업로드하는 방법 (0) | 2023.09.24 |
[AWS] Lambda timeout 시간 변경하기 (0) | 2023.09.24 |
[AWS] AWS CLI로 ECR 이미지 삭제하기 (1) | 2023.09.04 |
jaeger가 수신한 span을 AWS OpenSearch에 저장하는 방법 (0) | 2023.06.02 |