AWS Sagemaker Studioで独自Containerを使う-中編-
はじめに
この記事はAWS Sagemaker Studioで独自Containerを使う-前編-の続きです。
この記事を見ていない方はそちらからどうぞ。
IAMロールの設定
新しくsagemaker用のIAMロールを作成します。ここではSagemakerExcutionRoleという名前で作成します。(名前は適宜変更してください)
まず初めに、「許可を追加」からポリシーをアタッチを選択して、[AmazonSageMakerFullAccess]を追加します。
その後、codebuildのアクセス許可を含める必要があります。
ここでは[build-and-push-container-image-in-sagemaker-studio]という名前でポリシーを作成してアタッチしています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codebuild:DeleteProject",
"codebuild:CreateProject",
"codebuild:BatchGetBuilds",
"codebuild:StartBuild"
],
"Resource": "arn:aws:codebuild:*:*:project/sagemaker-studio*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogStream",
"Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*"
},
{
"Effect": "Allow",
"Action": [
"logs:GetLogEvents",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*:log-stream:*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ecr:CreateRepository",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:DescribeImages",
"ecr:DescribeRepositories",
"ecr:UploadLayerPart",
"ecr:ListImages",
"ecr:InitiateLayerUpload",
"ecr:BatchCheckLayerAvailability",
"ecr:PutImage"
],
"Resource": "arn:aws:ecr:*:*:repository/sagemaker-studio*"
},
{
"Sid": "ReadAccessToPrebuiltAwsImages",
"Effect": "Allow",
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Resource": [
"arn:aws:ecr:*:763104351884:repository/*",
"arn:aws:ecr:*:217643126080:repository/*",
"arn:aws:ecr:*:727897471807:repository/*",
"arn:aws:ecr:*:626614931356:repository/*",
"arn:aws:ecr:*:683313688378:repository/*",
"arn:aws:ecr:*:520713654638:repository/*",
"arn:aws:ecr:*:462105765813:repository/*"
]
},
{
"Sid": "EcrAuthorizationTokenRetrieval",
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::sagemaker-*/*"
},
{
"Effect": "Allow",
"Action": [
"s3:CreateBucket"
],
"Resource": "arn:aws:s3:::sagemaker*"
},
{
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:ListRoles"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::*:role/*",
"Condition": {
"StringLikeIfExists": {
"iam:PassedToService": "codebuild.amazonaws.com"
}
}
}
]
}
更にcode buildには信頼ポリシーも必要なためこれを追加します。
上記のように「信頼関係」タグから以下を記述します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"codebuild.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
さらに、S3のデータを参照し学習、学習結果をアップロードするためS3へのアクセス許可も追加します。ここではsagemaker-execution-policy
として作成してアタッチしています。
sagemakerで始まる名前以外のバケットを参照したい場合、your-bucket-nameにあるように自分が使いたいバケット名を記述します。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::SageMaker"
]
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::SageMaker/*"
]
},
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::your-bucket-name"
]
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
IAMロールの設定は以上です。お疲れ様でした。
Sagemaker Studio側の設定
さて、今度はSagamaekr Studio側の設定を行います。
Amazon Sagemakerへ移動し、左側のコントロール画面からStudioを選択します。
「ユーザーの追加」で新しくユーザーを追加します。
名前を入力し(ここではnn-trainingとしています)、先ほど作成したIAMロールを選択します。
setp2,3の設定はデフォルトで構いません。
ユーザーが作成できたら「アプリケーション起動」から[studio]を選択しsagemaker studioを起動しましょう。起動にはしばらく時間がかかります。
Dockerのビルド
studioが起動したら、次にdockerのビルドを行います。
AWS Sagemaker Studioで独自Containerを使う-前編-
で作成したコードとDockerfileをstudioにコピーします。 左側のフォルダアイコンを選択し、「upload Files」でstudioに取り込むことができます。
また、Studioではgitと連携もできるので、githuib上にアップしたものを取り込むこともできます。
維持管理を行う場合、こちらのほうが良い選択となるでしょう。
新規にNotebookを作成し、下記のようにしてdocker containerをビルドします。
はじめにsagemaker-studio-image-build
をインストールします。
!pip install sagemaker-studio-image-build
次にdockerのビルドを行います。
!sm-docker build . --repository nnclass:latest
オプション等の詳しい使い方はこちらを参照してください。
ここで、sagameker studioでdockerをビルドする際のチャートを掲載します。
図のとおりですが、初めにS3に必要なデータがアップロードされ、CodeBuildでビルドが実行され、ビルドが成功するとECRにプシュされるという仕組みです。
長くなったので今回はここまでとします。次回いよいよ、 独自containerを使ったトレーニングを行います。
Discussion