Amazon SageMaker実運用: "Lifecycle Configuration"でEFSを自動マウント
前回の記事に続いてマネージド Jupyter サービスAmazon SageMakerの Notebook インスタンスに EFS のボリュームを自動マウントする。
なおこの発言の真意ですが、Kaggle 社内ランク制度なるものができ部内に Kaggler な方が増える今日この頃、インフラ的な細かな作業に気持ちと時間を取られずにスコアを叩き出していただきたいという意図です。
SageMaker の Terminal すら開かずに使えてほしい。
おれは
— Hidenori Matsuki (@mazgi) May 7, 2018
kaggle masterに
sedとかmountとか
叩かせたくないんや!
解答
前回"AWS Machine Learning Blog"の記事をご紹介したが、Amazon Web Services ブログに和訳があった。
- ライフサイクル構成およびインターネットアクセスを無効にするオプションを使用して Amazon SageMaker ノートブックインスタンスをカスタマイズする
- EFS ファイルシステムを Amazon SageMaker ノートブックに (ライフサイクル設定を含めて) マウントする
Notebook インスタンス作成時
前回の記事通りだが、Notebook インスタンス作成時に以下を指定することで、EFS ボリュームがマウントされた状態で Notebook インスタンスが起動されるようになる。
- VPC, Subnet(s), Security group(2), Direct internet access
- 前回の記事通りに設定
- Lifecycle configuration
- 今回は
mount-efs
を選択すると EFS ボリュームがマウントされるようにする
- 今回は
Lifecycle configuration スクリプトの作成/登録
順番が前後するが、あらかじめ以下のように Lifecycle configuration スクリプトを作成し登録しておく。
- SageMaker のダッシュボードから
Lifecycle configurations
の画面に移動する Create configuration
ボタンをクリックする
すると以下のようなスクリプトを登録できる画面になる。
Name
は mount-efs
と入力。
スクリプトのタイプは、Notebook インスタンス起動時に毎回実行されてほしいので Start notebook
を選ぶ。
スクリプトの内容は以下のようにした。
- マウントポイントとなるディレクトリを作成
- EFS ボリュームをマウント
#!/bin/bash
set -e
sudo mkdir -p /mnt/nfs
sudo mount -t nfs \
-o rw,relatime,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \
fs-********.efs.us-east-1.amazonaws.com:/ /mnt/nfs
Create configuration
ボタンをクリックすると以下のようにスクリプトが登録される。
以上で、SageMaker の Terminal すら開かずに EFS ボリュームがマウントされるようになった。
いずれこれらを全て Terraform でできるようになってほしいと願いながら Issue をウォッチしている。
https://github.com/terraform-providers/terraform-provider-aws/issues/2493