Amazon Sagemaker에서 생성한 모델에 의한 추론 처리를 REST API로 게시

했던 일



SageMaker에서 작성한 모델을 사용한 추론 처리를 REST API로 공개해 보았다.

구성



API Gateway에서 공개되는 API에 액세스하고 Lambda를 실행합니다. Lambda로부터 SageMaker로 작성한 Model을 엔드 폰트로부터 호출해, 추론 처리를 실시, 리퀘스트측에 결과를 돌려준다, 라고 하는 느낌.


구축 절차


  • SageMaker에서 학습 모델 만들기
  • 모델 배포 및 엔드 폰트 만들기
  • Lambda에서 SageMaker 엔드 포인트를 호출하기위한 역할을 만듭니다
  • Lambda 함수 구현
  • Amazon API Gateway 설정
  • Curl에서 REST API의 동작 확인

  • 1,2만으로 상당한 양이 되므로 별도로 쓰기 중.
    이하, 3 이후에 대해서 기재.

    3. Lambda에서 SageMaker 엔드포인트를 호출하는 역할을 생성합니다.



    Lambda에서 SageMaker 엔드포인트에 액세스하는 역할을 만듭니다. 여기의 기재가 없는 기사가 많았으므로, 굳이 설정 순서 기재.
  • 서비스에서 IAM을 선택
  • 탐색에서 역할을 선택하고 역할 만들기를 클릭하십시오
  • 유스 케이스 선택에서 Lambda를 선택하고 "다음 단계"
    여기서는 어떤 서비스에 역할을 할당할지 생각해 보겠습니다. 이번에는 Lambda에 역할을 할당하므로 Lambda를 선택합니다.

  • 정책 필터에 [sagemaker]를 입력합니다. AmazonSageMakerFullAccess를 선택하고 다음 단계

    참고로 정책 이름을 클릭하면 이 정책의 액세스 권한을 확인할 수 있습니다. "Statement"를 보면,"Effect": "Allow","Action": ["sagemaker:*"]," 의 기재가 있어, 이것은 sagemaker에 대한 모든 액션을 허가한다고 하는 의미입니다. 이렇게하면 Lambda에서 모델의 엔드 폰트를 호출 할 수 있습니다.
  • 역할 이름을 지정하고 역할 만들기를 클릭합니다.

    4. Lambda 함수 구현



    Lambda는 추론 처리를 구현합니다. 아래와 같은 느낌으로, 언어는 이번 파이썬으로 기재했습니다.
    import boto3
    
    ENDPONT_NAME = "YOUR_ENDPOINT_NAME" #ここにはエンドポイントの名前を指定する
    
    
    def lambda_handler(event, context):
        runtime_client = boto3.client('runtime.sagemaker', region_name="ap-northeast-1")
        values = list(event.values())
    
        try:
            response = runtime_client.invoke_endpoint(EndpointName=ENDPONT_NAME, 
                                       ContentType='text/csv', 
                                       #Body=value_single)
                                       Body='{0},{1},{2},{3}'.format(values[0], values[1], values[2], values[3]))
    
            result = response['Body'].read()
            result = result.decode("utf-8")
            return result
    
        except:
            return {
                'statusCode': 400,
                'body': 'Exception Occur'
            }
    
    

    5. Amazon API Gateway 설정



    여기 을 참고로 설정을 마쳤습니다.

    6. Curl에서 REST API의 동작 확인



    사쿠토 확인
    > curl --request POST --header 'Content-Type: application/json' --data '{\"key1\":0.25,\"key2\":0.666,\"key3\":1,\"key4\":1}' 'https://your-api'
    curl: (6) Could not resolve host: application
    curl: (1) Protocol "'https" not supported or disabled in libcurl
    

    어라, 어째서.
    조사해 보면, windows 터미널에서는 싱글 쿼테이션을 사용할 수 없는 것 같다.
    Windows 환경에서 curl 명령 사용 요약 (헤세이 최종 버전) 알기 쉬웠다.

    수정하고 다시 실행.
    > curl --request POST --header "Content-Type: application/json" --data "{\"key1\":0.25,\"key2\":0.666,\"key3\":1,\"key4\":1}" "https://your-api"
    "106.2766342163086"
    

    흠. 좋아.
  • 좋은 웹페이지 즐겨찾기