Amazon SageMaker実運用: "Lifecycle Configuration"でEFSを自動マウント

前回の記事に続いてマネージド Jupyter サービスAmazon SageMakerの Notebook インスタンスに EFS のボリュームを自動マウントする。

なおこの発言の真意ですが、Kaggle 社内ランク制度なるものができ部内に Kaggler な方が増える今日この頃、インフラ的な細かな作業に気持ちと時間を取られずにスコアを叩き出していただきたいという意図です。
SageMaker の Terminal すら開かずに使えてほしい。

解答

前回"AWS Machine Learning Blog"の記事をご紹介したが、Amazon Web Services ブログに和訳があった。

Notebook インスタンス作成時

前回の記事通りだが、Notebook インスタンス作成時に以下を指定することで、EFS ボリュームがマウントされた状態で Notebook インスタンスが起動されるようになる。

  • VPC, Subnet(s), Security group(2), Direct internet access
  • Lifecycle configuration
    • 今回は mount-efs を選択すると EFS ボリュームがマウントされるようにする

Lifecycle configuration スクリプトの作成/登録

順番が前後するが、あらかじめ以下のように Lifecycle configuration スクリプトを作成し登録しておく。

  1. SageMaker のダッシュボードから Lifecycle configurations の画面に移動する
  2. Create configuration ボタンをクリックする

すると以下のようなスクリプトを登録できる画面になる。

Namemount-efs と入力。
スクリプトのタイプは、Notebook インスタンス起動時に毎回実行されてほしいので Start notebook を選ぶ。
スクリプトの内容は以下のようにした。

  1. マウントポイントとなるディレクトリを作成
  2. 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