前提
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のパス)を設定します
- S3DataSource(必須)
- 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になります
また、リスト形式で複数指定できます
- SecurityGroupIds(必須):sg-xxxxxxxxの形式のVPCセキュリティグループIDになり、 下記のSubnetで指定されているVPCのセキュリティグループを指定します
RoleArn(必須)
データへのアクセスに使用されるロールのARNになります。
GenerateCandidateDefinitionsOnly
データプリプロセッサ、アルゴリズム、およびアルゴリズムパラメータ設定の組み合わせで、モデルをトレーニングせずに候補を生成するかを「True」「False」で指定します。
Tags
各タグは、キーとオプションの値で構成されます。
タグキーはリソースごとに一意である必要があります。
また、リスト形式で複数指定できます。
- Key(必須):タグのキーになります
- Value(必須):タグの値になります
最後に
おそらく性質上、設定値等は頻繁に変わると思われますが、何が設定できるのかを知っておくと便利に使えると思います。