LoginSignup
0
1

More than 3 years have passed since last update.

Amazon SageMaker Autopilotで実行時に渡す設定

Last updated at Posted at 2020-01-27

前提

AWSのSageMakerが新しくなり、Autopilotというサービスができました。
いわゆるAutoMLで、GCPの「AutoML Tables」やAzureの「Automated machine Learning」とほぼ同じ機能なのですが、ちょっとめんどくさいところとして、多少コードを書く必要があります。
※GUIからも実行できますが、細かい設定ができません

そこで、ここでは設定できるパラメータをまとめておきたいと思います。

準備

なお、AutopilotはBoto3で実行しますので、事前に動作できるようにしておく必要があります。

pip install boto3

またpythonから呼び出すときは、以下のようにします。

import sagemaker
import boto3
from sagemaker import get_execution_role

region = boto3.Session().region_name

session = sagemaker.Session()
bucket = session.default_bucket()
prefix = 'sagemaker/autopilot-dm'

role = get_execution_role()

sm = boto3.Session().client(service_name='sagemaker',region_name=region)

で、こんな感じで設定(後でこの辺りを説明)を準備し、

input_data_config = [{
      'DataSource': {
        'S3DataSource': {
          'S3DataType': 'S3Prefix',
          'S3Uri': 's3://{}/{}/train'.format(bucket,prefix)
        }
      },
      'TargetAttributeName': 'y'
    }
  ]

output_data_config = {
    'S3OutputPath': 's3://{}/{}/output'.format(bucket,prefix)
  }

こんな感じに実行します。

from time import gmtime, strftime, sleep
timestamp_suffix = strftime('%d-%H-%M-%S', gmtime())

auto_ml_job_name = 'automl-banking-' + timestamp_suffix
print('AutoMLJobName: ' + auto_ml_job_name)

sm.create_auto_ml_job(AutoMLJobName=auto_ml_job_name,
                      InputDataConfig=input_data_config,
                      OutputDataConfig=output_data_config,
                      RoleArn=role)

ということで、Autopilotのジョブを作成する「sm.create_auto_ml_job()」の引数を説明していきます。

こちらのコードを参考にさせていただきました

設定値一覧

では、先ほどの「client.create_auto_ml_job()」の引数を説明していきます。
原文はこちらになります。

response = client.create_auto_ml_job(
    AutoMLJobName='string',
    InputDataConfig=[
        {
            'DataSource': {
                'S3DataSource': {
                    'S3DataType': 'ManifestFile'|'S3Prefix',
                    'S3Uri': 'string'
                }
            },
            'CompressionType': 'None'|'Gzip',
            'TargetAttributeName': 'string'
        },
    ],
    OutputDataConfig={
        'KmsKeyId': 'string',
        'S3OutputPath': 'string'
    },
    ProblemType='BinaryClassification'|'MulticlassClassification'|'Regression',
    AutoMLJobObjective={
        'MetricName': 'Accuracy'|'MSE'|'F1'|'F1macro'
    },
    AutoMLJobConfig={
        'CompletionCriteria': {
            'MaxCandidates': 123,
            'MaxRuntimePerTrainingJobInSeconds': 123,
            'MaxAutoMLJobRuntimeInSeconds': 123
        },
        'SecurityConfig': {
            'VolumeKmsKeyId': 'string',
            'EnableInterContainerTrafficEncryption': True|False,
            'VpcConfig': {
                'SecurityGroupIds': [
                    'string',
                ],
                'Subnets': [
                    'string',
                ]
            }
        }
    },
    RoleArn='string',
    GenerateCandidateDefinitionsOnly=True|False,
    Tags=[
        {
            'Key': 'string',
            'Value': 'string'
        },
    ]
)

AutoMLJobName(必須)

ジョブの名前になります。

InputDataConfig(必須)

入力データの情報になります。
ファイルフォーマットはCSVのみとなっています。
リストの形式で、複数の入力データを指定できます。

  • DataSource(必須)
    • S3DataSource(必須)
      • S3DataType(必須):データの種類を「ManifestFile」か「S3Prefix」で設定します
      • S3Uri(必須):入力データのURI(S3のパス)を設定します
  • CompressionType:圧縮形式を「None(デフォルト)」か「Gzip」で設定します
  • TargetAttributeName(必須):例えば「y」のように、目的変数の名前です

OutputDataConfig(必須)

出力データの情報になります。
ファイルフォーマットはCSVになります。

  • KmsKeyId:AWS KMSにおける暗号化キーのIDです
  • S3OutputPath(必須):出力データのURI(S3のパス)を設定します(128文字以下)

ProblemType

前処理とアルゴリズムの種類として、「BinaryClassification」「MulticlassClassification」「Regression」のどれかを指定します。

AutoMLJobObjective

ジョブの目的を定義します。
MetricNameを指定すると、AutoMLが最小化または最大化を推測します。
この項目が指定されない場合、問題タイプに最もよく使用されるObjectiveMetricが選択されます。

  • MetricName(必須):メトリックの名前を「Accuracy」「MSE」「F1」「F1macro」から指定します

AutoMLJobConfig

ジョブの設定になります。

  • CompletionCriteria
    • MaxCandidates:トレーニングジョブの実行が許可される最大回数になります
    • MaxRuntimePerTrainingJobInSeconds:ジョブの実行が許可される最大時間(秒単位)になります
    • MaxAutoMLJobRuntimeInSeconds:AutoMLジョブが試行の完了を待機できる最大時間(秒単位)で、MaxRuntimePerTrainingJobInSeconds以上である必要があります
  • SecurityConfig
    • VolumeKmsKeyId:保存されたデータの暗号化に使用されるキーになります
    • EnableInterContainerTrafficEncryption:コンテナレイヤー間でトラフィック暗号化を使用するかどうかを「True」「False」で指定します
    • VpcConfig
      • SecurityGroupIds(必須):sg-xxxxxxxxの形式のVPCセキュリティグループIDになり、 下記のSubnetで指定されているVPCのセキュリティグループを指定します
        また、リスト形式で複数指定できます
      • Subnets(必須):トレーニングジョブまたはモデルを接続するVPC内のサブネットのIDになります
        また、リスト形式で複数指定できます

RoleArn(必須)

データへのアクセスに使用されるロールのARNになります。

GenerateCandidateDefinitionsOnly

データプリプロセッサ、アルゴリズム、およびアルゴリズムパラメータ設定の組み合わせで、モデルをトレーニングせずに候補を生成するかを「True」「False」で指定します。

Tags

各タグは、キーとオプションの値で構成されます。
タグキーはリソースごとに一意である必要があります。
また、リスト形式で複数指定できます。

  • Key(必須):タグのキーになります
  • Value(必須):タグの値になります

最後に

おそらく性質上、設定値等は頻繁に変わると思われますが、何が設定できるのかを知っておくと便利に使えると思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1