休みの時間を利用して、こちらのSageMakerのサンプルを試していました。
問題
ただ、ローカルのPC(Mac Book)から利用する場合、下のStackOverflowにある通り、エラーが出て get_execution_role
関数が使えません。
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を取得する」ための関数です。
対処
「オンプレミス環境から 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) # 後略