AWS SageMaker에서 모델에서 추리로 배치 (일괄 처리 변환 작업)

본 보도에서 한 일


  • 저번 보도에서 진행된 훈련 작업 결과 생성된 모델의 배치.
  • S3에 배치된 데이터를 요약하여 추리하는 대량 변환 작업을 수행합니다.
  • 본 보도에서 하지 않는 일은 아래와 같으니 다른 보도를 참조하십시오.
  • 이전 글에서 진행된 단독 알고리즘으로 훈련 작업을 수행하는 방법
  • SageMaker, S3 등에 액세스하는 IAM 역할 만들기
  • 목표 독자

  • AWS SageMaker를 먼저 이동하고 싶은 사람
  • Docker에 대한 기초 지식이 있는 사람
  • 언어 사용

  • Python 3.6.3
  • 교육 작업 결과에서 생성된 모델 배치


    공식 문서에서 말한 바와 같이 모델을 배치할 때 응용 프로그램이 추리를 할 때 요청을 보내는 단점을 얻을 수 있습니다.따라서 교육 작업이 끝난 후에 모델 배치를 해야 한다.
    다음은 코드에서 모델을 배치하는 것이다.
    
    class SagemakerClient:
    
        def __init__(self):
            self.client = Session(profile_name="hoge").client("sagemaker", region_name="ap-northeast-1")
    
        def create_model(self, model_data_url):
    
            model_params = {
                "ExecutionRoleArn": "arn:aws:iam::123:role/dev-sagemaker", 
                "ModelName": "sample-model", # モデル名
                "PrimaryContainer": {
                    "Image": "123.dkr.ecr.ap-northeast-1.amazonaws.com/sagemaker-repo:latest", # ECRにプッシュしたイメージURL
                    "ModelDataUrl": model_data_url # モデルデータが格納されているS3のパス
                }
            }
    
            self.client.create_model(**model_params)
    
    
    if __name__ == '__main__':
        model_data_url = ...
        SagemakerClient().create_model(model_data_url)
    
    상기 코드 중의 create_model 방법의 매개 변수model_data_url는boto3의 describe_training_job에서 얻은 것이다이 방정식 문서.
    참고로 취득한 코드는 다음과 같다.또한 model_data_url의 매개 변수describe_training_job는 훈련 작업을 보낼 때 되돌아오는 TrainingJobName에서 얻은 것이다.
    client = Session(profile_name="hoge").client("sagemaker", region_name="ap-northeast-1")
    
    model_data_url = client.describe_training_job(TrainingJobName=training_job_name)['ModelArtifacts']['S3ModelArtifacts']
    
    다음과 같이 모델이 TransformJobArn 에 나타나면 완료됩니다.

    S3에 배치된 데이터를 취합하여 추리하는 대량 변환 작업 수행


    이번에는 추리에 사용된 데이터와 추리 결과의 출력 목적지 등이 아래의 폴더로 구성되어 S3에 놓여 있다.
    bucket
    ├── input-data-prediction
    │     └── YYYY-MM-DD
    │          └── multiclass
    │               └── iris.csv
    ├── output-data-prediction
    │     └── YYYY-MM-DD
    │          └── multiclass
    │               
    ├── input-data-training
    │     └── YYYY-MM-DD
    │          └── multiclass
    │               └── iris.csv
    └── output-model
          └── YYYY-MM-DD
               └── multiclass
                    └── model名(←ここからはSageMakerが出力する)
    
    
    다음 코드를 통해 배치 변환 작업을 보냅니다.
    작업을 보낼 때의 매개 변수Amazon SageMaker > モデル는 배치된 모델 이름을 사용합니다.
    배치된 모델 명칭은boto3의ModelName 방법을 통해 얻을 수 있다이 방정식 문서.(모델 이름에 포함된 문자열과 배치된 시간만 검색할 수 있을 것 같다)
    
    class SagemakerClient:
    
        def __init__(self):
            self.client = Session(profile_name="hoge").client("sagemaker", region_name="ap-northeast-1")
    
        def submit_transform_job(self):
    
            model_name = self.client.list_models(
                NameContains="base_model_name", # 各自デプロイしたモデル名に含まれている文字列
                SortOrder='Descending',
                SortBy='CreationTime')["Models"][0]["ModelName"]
    
            transform_params = {
                "TransformJobName": "sample-transform_job_name", # バッチ変換ジョブ名
                "ModelName": model_name, # デプロイしたモデル名
                "MaxConcurrentTransforms": 2,
                "MaxPayloadInMB": 50,
                "BatchStrategy": "MultiRecord",
                "TransformOutput": {
                    "S3OutputPath": "s3://bucket/output-data-prediction/YYYY-MM-DD/multiclass/" # 推論結果を格納するS3パス
                },
                "TransformInput": {
                    "DataSource": {
                        "S3DataSource": {
                            "S3DataType": "S3Prefix",
                            "S3Uri": "s3://bucket/input-data-prediction/YYYY-MM-DD/multiclass/" # 推論を行うインプットデータが格納されているS3パス
                        }
                    },
                    "ContentType": "text/csv",
                    "SplitType": "Line"
                },
                "TransformResources": {
                    "InstanceType": "ml.c4.xlarge",
                    "InstanceCount": 1
                }
            }
    
            self.client.create_transform_job(**transform_params)
    
    if __name__ == '__main__':
        SagemakerClient().submit_transform_job()
    
    
    아래와 같이 상태가 Completed이면 완료됩니다.위에서 지정한 S3의 경로에 추리 결과가 저장되어 있어야 합니다.

    끝날 때


    이번에는 배치 모델~일괄 처리 변환 작업을 보내는 코드만 기재되어 있지만 SageMaker의 Docker 용기 내list_modelsAmazon SageMaker > バッチ変換ジョブ직접공식적인github의 샘플을 사용합니다.

    좋은 웹페이지 즐겨찾기