SageMaker StudioのCode Editor Spaceをカスタムイメージで起動する方法

2024.04.12

こんちには。

データアナリティクス事業本部 機械学習チームの中村(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をお使いになる方の参考になれば幸いです。