背景
- SageMaker Python SDKを使用
- ローカルのJupyter Notebookを使用
- SageMaker組み込みアルゴリズム randomcutforestを使用
- 学習済みモデルアーティファクトはS3に格納済み
- モデルイメージのリージョンとモデルアーティファクトの格納先リージョンは同じ
上記の条件において、
を参考に、以下のようなコードでモデルをデプロイしようとした。
roleArn = SageMakerFullAccessとS3FullAccessポリシーをアタッチしたもの image_uri = sagemaker.image_uris.retrieve(framework=組み込みアルゴリズム名, region=リージョン名, version=バージョン) model = sagemaker.model.Model( image_uri=image_uri, model_data="s3://model.tar.gzの置き場所", role=roleArn ) model.deploy( endpoint_name="エンドポイント名", initial_instance_count=1, instance_type="ml.c5.large" )
ところが、
ClientError: An error occurred (ValidationException) when calling the CreateModel operation: RoleArn: Cross-account pass role is not allowed.
と出てしまった。
修正方法
以下のように、sagemaker_sessionという引数を与える必要がある。リージョンは、組み込みアルゴリズムの参照先コンテナイメージのリージョンとする。
boto_session = boto3.Session( region_name=リージョン名, aws_access_key_id="**************", aws_secret_access_key="**************" ) session = sagemaker.Session(boto_session=boto_session) model = sagemaker.model.Model( image_uri=image_uri, model_data=MODEL_DATA, role=SM_EXECUTION_ROLE, sagemaker_session=session # これが必要 )
これで、数時間悩んでしまった。 ネット上に情報がなく、おそらくここでハマる人はあまりいないのだろう。残念。