休みの時間を利用して、こちらのSageMakerのサンプルを試していました。
aws.amazon.com
問題
ただ、ローカルのPC(Mac Book)から利用する場合、下のStackOverflowにある通り、エラーが出て get_execution_role
関数が使えません。
stackoverflow.com
def trained_estimator_from_hyperparams(s3_train_data, hyperparams, output_path, s3_test_data=None):
knn = sagemaker.estimator.Estimator(containers[boto3.Session().region_name],
get_execution_role(),
train_instance_count=1,
train_instance_type='ml.m5.2xlarge',
output_path=output_path,
sagemaker_session=sagemaker.Session())
knn.set_hyperparameters(**hyperparams)
そもそも、ドキュメントには次のように書かれています。
次の Python コードをコピーして、ノートブックの最初のセルに貼り付けます。「Amazon SageMaker をセットアップします」で作成した S3 バケットの名前を追加し、コードを実行します。get_execution_role 関数は、ノートブックインスタンスの作成時に作成した IAM ロールを取得します。
SageMakerの利用し始めには多少混乱すると思いますが、「ノートブックインスタンス」と「トレーニングインスタンス」が別に存在して、 get_execution_role
は「ノートブックインスタンスから自分のroleを取得する」ための関数です。
対処
aws.amazon.com
「オンプレミス環境から Amazon SageMaker を利用する」の記事にもある通り、単純に自前で文字列で指定すればいいだけです。
ひとまず私は、SageMakerとS3(モデルやデータの読み込みに必要)を読み込むロールを付けて直接文字列で指定しました。
def trained_estimator_from_hyperparams(s3_train_data, hyperparams, output_path, s3_test_data=None):
knn = sagemaker.estimator.Estimator(containers[boto3.Session().region_name],
"arn:aws:iam::***********:role/sagemaker-execution",
train_instance_count=1,
train_instance_type='ml.m5.2xlarge',
output_path=output_path,
sagemaker_session=sagemaker.Session())
knn.set_hyperparameters(**hyperparams)