はじめに
Amazon SageMaker Studioにカスタムイメージを適用する際に苦労したので備忘録です。
Cloud9のセットアップ
今回はCloud9を使用します。ローカルにAWS CLI環境が構築されている場合はそちらでも構いません。
環境を作成
- コンソールから [Create environment] をクリック
- [Additional instance types]からinstance typeをt2-mediumに変更
※後のイメージ作成の際にt2-microだとエラーになるため - その他の設定は任意で[Create]をクリック
ストレージサイズを変更
デフォルトの5GBだとイメージ作成に足りないため、拡張します。
カスタムイメージの作成
イメージの作成は以下を参考にしてます。
AWS 公式ドキュメント - カスタムイメージへのアクセス権をユーザーに提供する -
手順をまとめて自動化した リポジトリを作成しました。一通りのデプロイを試すにはこちらを使用すると良いです。
リポジトリをクローン
git clone https://github.com/ka70/sagemaker-custom-image-template.git
cd sagemaker-custom-image-template
カスタムイメージはECRにイメージを保存してSageMakerで使用します。
image_push.shでリポジトリの作成、イメージの作成、プッシュを行います。
各種設定
image_push.shを開いて、変数を設定します。
REPOSITORY_NAME="smstudio-custom"
ACCOUNT_ID=<ACCOUNT ID>
REGION="ap-northeast-1"
TAG_NAME="latest"
requirements.txtを開いて必要なライブラリを追加します。
実行
chmod +x push_image.sh
./push_image.sh
ECRにイメージが登録されているか確認してください。
イメージをSageMakerに登録
コンソールからカスタムイメージをSageMakerに登録します。
基本的に公式ドキュメントのやり方に沿って行います。
- SageMaker コンソールを開きます。
- 管理者設定 で、ドメイン を選択します。
- ドメイン のリストから、ドメインを選択します。
- 環境 タブを開きます。
- 個人用 Studio アプリのカスタムイメージ で、イメージのアタッチ を選択します。
- イメージソースを指定します。
- [次へ] を選択します。
- [送信] を選択します。
注意点は以下です。
-
IAMロールはAmazonSageMakerFullAccessがついているものを使用
-
"8. [送信] を選択します。"の前にimage typeで使用するapplication typeをクリックしておく
Spaceでカスタムイメージを使用する
SageMaker Studioを起動します。spaceを起動する際に作成したカスタムイメージを選択します。無事起動できれば完了です。Congratulation !!
※カスタムイメージが起動できない事象がありました。
SageMaker Studioでカスタムイメージが起動しない
もっと頑張りたい方へ
Dockerfile
私が作成したDockerfileでは雑にpipでインストールしています。
厳密にパッケージ管理をしたい方は、必要に応じてcondaやその他のパッケージ管理システムに書き換えてください。
また、Dockerfileの仕様例としてはAmazon Linux 2 イメージとAmazon SageMaker ディストリビューションイメージの2つがあります。(AWS 公式ドキュメント - カスタムイメージへのアクセス権をユーザーに提供する - )SageMaker ディストリビューションイメージは機械学習やデータサイエンスに使用するパッケージがあらかじめインストールされているため、追加の手間が少ないです。今回もSageMaker ディストリビューションイメージを使用しています。
一方で、一からカスタムしたいという場合はAmazon Linux 2 イメージを使用するといいでしょう。
Linuxディストリビューションについても以下の違いがあるそうです。
・Amazon Linux 2 テンプレート: Amazon Linux
・SageMaker ディストリビューションイメージテンプレート: Ubuntu