qiita.com
↑の記事を参考にして進めた。
諸事情でIAMユーザー発行&アクセスキー等発行できないので、EC2インスタンス上で行った。リージョンはオレゴン
IAM
- roleを作成
aipa-hogehoge-fugafuga-train
- policy
- AmazonEC2ContainerRegistryFullAccess
- AmazonS3FullAccess
- AmazonSageMakerFullAccess
- 信頼されたエンティティ
- ec2.amazonaws.com
- sagemaker.amazonaws.com
S3
s3://aipa-hogehoge-fugafuga-train
で作成
手順
$ sudo apt update -y
$ sudo apt install awscli
$ aws ecr create-repository --repository-name aipa-hogehoge-fugafuga-test --region us-west-2
# チュートリアル
$ git clone https://github.com/aws/amazon-sagemaker-examples.git
$ cd amazon-sagemaker-examples/advanced_functionality/scikit_bring_your_own/container/
$ aws s3 cp local_test/test_dir/input/data/training/iris.csv s3://aipa-sagemaker-train/input-data/
$ aws s3 cp .gitkeep s3://aipa-sagemaker-train/output-data/
$ touch .gitkeep
$ bash build_and_push.sh aipa-hogehoge-fugafuga-test
$ python sagemaker_client.py
sagemaker_client.py
from boto3.session import Session
class SagemakerClient:
def __init__(self):
self.client = Session().client("sagemaker", region_name="us-west-2")
def submit_training_job(self):
training_params = {
"TrainingJobName": "sample-training", # トレーニングのジョブ名(同じ名前は駄目)
"HyperParameters": { # 学習時のパラメータ
'objective': 'multiclass',
'num_class': '3'
},
"AlgorithmSpecification": {
'TrainingImage': "hogehoge.aws.com/aipa-hogehoge-fugafuga-test:latest", # トレーニング時に使用するDocker イメージ
'TrainingInputMode': 'File'
},
"RoleArn": "arn:aws:iam::129119569090:role/aipa-hogehoge-fugafuga-train", # SageMakerにアタッチするロール
"InputDataConfig": [
{
'ChannelName': 'training',
'DataSource': {
'S3DataSource': {
'S3DataType': 'S3Prefix', # s3上のファイルを使う場合はこちらを指定する
'S3Uri': "s3://aipa-hogehoge-fugafuga-train/input-data/iris.csv" # トレーニング時に使用するデータを入れたS3のパス
}
}
}
],
"OutputDataConfig": {
'S3OutputPath': "s3://aipa-hogehoge-fugafuga-train/output-data/" # トレーニングした後にモデルを出力するためのS3のパス
},
"ResourceConfig": {
'InstanceType': 'ml.m4.xlarge', # インスタンスタイプ
'InstanceCount': 1, # 学習インスタンス台数
'VolumeSizeInGB': 10 # 学習インスタンスのボリューム
},
"StoppingCondition": {
'MaxRuntimeInSeconds': 60 * 60
}
}
response = self.client.create_training_job(**training_params)
print(response)
if __name__ == '__main__':
SagemakerClient().submit_training_job()
雑感
- 慣れたら多分すごい便利(環境構築とか何もいらん&Dockerでやるから確認は必要なんだけども)
- デバッグがめんどそう