AWS SageMaker 入門: 機械学習モデルの構築とデプロイ

AWS SageMaker 入門: 機械学習モデルの構築とデプロイ

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

AWS SageMakerは、Amazon Web Services(AWS)が提供する、機械学習(ML)モデルを構築、訓練、デプロイするためのサービスです。本記事では、AWS SageMakerを使用して、MLモデルを構築し、CloudFormationを使用してデプロイする方法を解説します。

はじめに

AWS SageMakerを使用すると、MLモデルを構築、訓練、デプロイすることができます。AWS SageMakerを使用すると、MLモデルを構築するためのツールキットが提供され、MLモデルを訓練するためのハイパーパラメータを設定したり、MLモデルをデプロイするためのサービスを提供します。

CloudFormationを使用すると、MLモデルをデプロイするためのインフラストラクチャを自動的に構築できます。

MLモデルの構築

AWS SageMakerを使用してMLモデルを構築するには、まず、AWS SageMakerのコンソールから新しいノートブックインスタンスを作成します。ノートブックインスタンスを作成したら、MLモデルを構築するためのPythonコードを作成します。

MLモデルを構築するためのPythonコードを作成するには、AWS SageMakerのノートブックインスタンスで提供されているライブラリを使用します。例えば、TensorFlowやKerasなどのライブラリを使用して、MLモデルを構築することができます。

import sagemaker
from sagemaker.tensorflow import TensorFlow

sagemaker_session = sagemaker.Session()
bucket = sagemaker_session.default_bucket()
prefix = 'sagemaker/my-training'

estimator = TensorFlow(entry_point='train.py',
                       role='arn:aws:iam::1234567890:role/MySageMakerRole',
                       framework_version='2.1.0',
                       train_instance_count=1,
                       train_instance_type='ml.c5.xlarge',
                       output_path='s3://{}/{}/output'.format(bucket, prefix),
                       base_job_name='my-training-job')

inputs = 's3://{}/{}/data'.format(bucket, prefix)

estimator.fit(inputs)

MLモデルを構築するためのPythonコードを作成したら、AWS SageMakerのノートブックインスタンスでコードを実行します。コードを実行すると、MLモデルが構築されます。

MLモデルの訓練

MLモデルを構築したら、MLモデルを訓練する必要があります。MLモデルを訓練するために、AWS SageMakerのノートブックインスタンスで提供されている訓練用のツールを使用します。

訓練用のツールを使用してMLモデルを訓練するには、MLモデルを訓練するためのハイパーパラメータを設定する必要があります。ハイパーパラメータを設定すると、MLモデルを訓練するためのデータセットを指定したり、訓練用のアルゴリズムを指定したりすることができます。

以下はPyTorch のカスタムコードを使用して MNIST データセットをトレーニングする方法です。

import boto3
import sagemaker
import os
from sagemaker.pytorch import PyTorch

sagemaker_session = sagemaker.Session()

# S3 bucket name for storing training data
bucket = sagemaker_session.default_bucket()
prefix = 'sagemaker/pytorch-mnist-example'

# S3 location to store training data
input_data = 's3://{}/{}/'.format(bucket, prefix)

# S3 location for model artifacts
output_path = 's3://{}/{}/output'.format(bucket, prefix)

# IAM role for executing the training job
role = 'arn:aws:iam::1234567890:role/MySageMakerRole'

# Get the PyTorch estimator
estimator = PyTorch(entry_point='train.py',
                    source_dir='source',
                    role=role,
                    framework_version='1.8.0',
                    train_instance_count=1,
                    train_instance_type='ml.c5.2xlarge',
                    output_path=output_path,
                    sagemaker_session=sagemaker_session,
                    hyperparameters={
                        'epochs': 10,
                        'batch-size': 128,
                        'learning-rate': 0.01,
                        'backend': 'gloo',
                        'rank': 0,
                        'world-size': 1
                    })

# Launch the training job
estimator.fit(inputs=input_data)

MLモデルを訓練するためのハイパーパラメータを設定したら、MLモデルを訓練するためのコードを作成します。MLモデルを訓練するためのコードを作成したら、AWS SageMakerのノートブックインスタンスでコードを実行します。コードを実行すると、MLモデルが訓練されます。

MLモデルのデプロイ

MLモデルを訓練したら、MLモデルをデプロイする必要があります。MLモデルをデプロイするために、CloudFormationを使用します。CloudFormationを使用すると、MLモデルをデプロイするためのインフラストラクチャを自動的に構築できます。

次にCloudFormationを使用してMLモデルをデプロイするためのコードを作成します。

実装方法

簡単なCloudFormationの例を記載します。

Resources:
  SageMakerExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: sagemaker.amazonaws.com
            Action: sts:AssumeRole
      Path: /
      Policies:
        - PolicyName: SageMakerExecutionPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - s3:ListBucket
                  - s3:GetObject
                  - s3:PutObject
                  - sagemaker:CreateTrainingJob
                  - sagemaker:DescribeTrainingJob
                  - sagemaker:CreateModel
                  - sagemaker:CreateEndpointConfig
                  - sagemaker:CreateEndpoint
                  - sagemaker:DeleteEndpoint
                  - sagemaker:InvokeEndpoint
                  - sagemaker:ListEndpointConfigs
                  - sagemaker:ListEndpoints
                Resource: '*'
  MySageMakerInstance:
    Type: AWS::SageMaker::NotebookInstance
    Properties:
      InstanceType: ml.t2.medium
      RoleArn: !GetAtt SageMakerExecutionRole.Arn
      NotebookInstanceName: my-notebook-instance
  • AssumeRolePolicyDocument: ロールがアクセス可能なサービスと、ロールが権限を委任できる場合の許可ポリシーが設定されています。
  • Policies: このロールにアタッチするポリシーが設定されています。S3 と SageMaker のアクセス権が設定されています。
  • InstanceType: SageMaker ノートブックインスタンスのインスタンスタイプを設定します。
  • RoleArn: SageMaker ノートブックインスタンスが使用する IAM ロールの ARN を設定します。
  • NotebookInstanceName: SageMaker ノートブックインスタンスの名前を設定します。

まとめ

本記事では、AWS SageMakerを使用して、MLモデルを構築し、簡易的ですがCloudFormationを使用したデプロイを解説しました。AWS SageMakerを使用すると、MLモデルを構築するためのツールキットが提供され、MLモデルを訓練するためのハイパーパラメータを設定したり、MLモデルをデプロイするためのサービスを提供します。CloudFormationを使用すると、MLモデルをデプロイするためのインフラストラクチャを自動的に構築できます。

サーバーレス開発低コストなAWS開発内製化はお気軽にお問い合わせください。