SageMaker StudioのCode Editor Spaceをカスタムイメージで起動する方法
こんちには。
データアナリティクス事業本部 機械学習チームの中村(nokomoro3)です。
本記事ではSageMaker StudioのCode Editor Spaceをカスタムイメージで起動する方法をご紹介します。
ドキュメントとしては以下に記載がありますので、こちらを参考にご紹介します。
なお、Code Editorのカスタムイメージは2024/04/04のアップデートでできるようになっていまして、比較的最近のアップデートとなります。
手順としてはJupyterLabの方の以下の記事とほぼ同じになります。
Dockerfileのみ異なる形ですので、既にJupyterLabの方をやられた型はDockerfileの部分をご参照ください。
準備
SageMaker Studioの作成
コンソールから「ドメイン」を選択した後、「ドメインを作成」を押下します。
今回は「クイックセットアップ」を選択し、「設定」を押下します。
作成中となるので、完了を待ちます。
完了後、ユーザープロファイルも作成されますので、そちらから「Studio」を起動します。
以下のような画面が立ち上がればStudioの準備は完了です。
Code Editor向けのカスタムイメージの作成
ECRレポジトリの作成
まずはカスタムイメージ用のECRレポジトリを作成します。ECRのマネジメントコンソールから以下を選択します。
「リポジトリを作成」を押下します。
名前を考えて設定します。設定後はデフォルトのまま作成を実行します。
以上でECRレポジトリの作成は完了です。
Dockerfileの作成
次にイメージを作成していきます。以下のようなDockerfileをローカルに作成します。
FROM public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu ARG NB_USER="sagemaker-user" ARG NB_UID=1000 ARG NB_GID=100 ENV MAMBA_USER=$NB_USER USER root # install scrapy in the base environment RUN micromamba install -y --name base -c conda-forge scrapy # download VSCodeVim RUN \ wget https://github.com/VSCodeVim/Vim/releases/download/v1.27.2/vim-1.27.2.vsix \ -P /tmp/exts/ --no-check-certificate # Install the extension RUN \ extensionloc=/opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions \ && sagemaker-code-editor \ --install-extension "/tmp/exts/vim-1.27.2.vsix" \ --extensions-dir "${extensionloc}" USER $MAMBA_USER WORKDIR "/home/${NB_USER}" ENTRYPOINT ["entrypoint-code-editor"]
こちらは以下に記載のものをそのまま使用しました。
具体的にJupyterLabと異なる点は何かというと以下が挙げられるかなと思います。
- micromambaのインストールが異なる
- ENTRYPOINTが異なる
- VSCodeのExtensionのインストールがある
もう少しベーシックなDockerfileの例を見ると分かりますが、Code Editor自体はconda-forgeチャンネルのsagemaker-code-editorパッケージとして準備されているものをインストールしているようです。
JupyterLab含む最小条件を満たすようなDockerfileの作成には今後チャレンジしていきたいと思います。
dockerのbuildとpush
dockerやAWS CLIの設定は事前に行っておく必要があります。
buildとpush用にbashスクリプトを作成します。PROFILE
は各自のものを設定してお使いください。REPOSITORY_NAME
は先ほど作成したECRレポジトリ名を設定してください。
PROFILE="{AWSプロファイル名}" REPOSITORY_NAME="cm-nakamura-sample-code-editor" docker build -f Dockerfile . -t $REPOSITORY_NAME # REGION=$(aws configure get region --profile $PROFILE) REGION="us-east-1" ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text --profile $PROFILE) ECR_BASE_URL="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com" ECR_IMAGE_URI="${ECR_BASE_URL}/${REPOSITORY_NAME}" echo "ECR_BASE_URL: ${ECR_BASE_URL}" echo "ECR_IMAGE_URI: ${ECR_IMAGE_URI}" # ECRへのログイン aws ecr get-login-password --region ${REGION} --profile $PROFILE | docker login --username AWS --password-stdin ${ECR_BASE_URL} # tagの付け替え docker tag "${REPOSITORY_NAME}:latest" "${ECR_IMAGE_URI}:latest" # ECRへのpush docker push "${ECR_IMAGE_URI}:latest"
上記を実行すれば、ECRにイメージがpushされるところまで完了するはずです。
SageMaker Studioへの設定
ECRレポジトリをSageMaker Studioに関連付け
マネジメントコンソールに戻り、SageMaker Studioのドメインの設定画面で「環境」を選択して、「イメージをアタッチ」を押下します。
「新しいイメージ」を選択して、作成したイメージのURIを入力します。入力後「次へ」を押下します。
イメージ名、イメージ表示名を設定して、IAMロールを設定します。IAMロールは新規作成を選択すると、AmazonSageMakerFullAccessがアタッチされたロールとなるようです。
冒頭のドメイン作成時に高速セットアップを選択した場合、既にAmazonSageMakerFullAccessがアタッチされたロールがAmazonSageMaker-ExecutionRole-{タイムスタンプ}
で新規作成されているのでそちらを今回は設定します。
次にイメージタイプとして「Code editor image」をクリックして選択します。
選択されたことが分かりにくく、未設定の場合はRStudioとなるのでご注意ください。
設定後、「送信」を押下します。
しばらく待つと以下のようにアタッチされた状態となります。
動作確認
Studioからのカスタムイメージの起動
左上またはHomeから「Code Editor」を起動します。
「Create Code Editor Space」を押下します。
スペース名を設定して、「Create Space」を押下します。
スペースが作成された状態となるので、「Image」に先ほどアタッチしたものがあることを確認して選択します。選択後は「Run space」で起動します。
(これ以降、Spaceを停止するまでは料金が発生いたしますのでご注意ください)
起動後は以下のようになりますので、「Open CodeEditor」で起動します。
以下のような画面が起動すればOKです。
まとめ
如何でしたでしょうか。本記事がSageMaker Studioをお使いになる方の参考になれば幸いです。