2023-05-05 15:23:52

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으로 따로 빼놓은 상태입니다. 이런 식으로 요청하면, 요청에 대한 응답이 잘 돌아옵니다.