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