SageMakerで起動時に実行するスクリプトを設定する

SageMakerは所定の場所に置かれたファイル以外はインスタンス停止によってリフレッシュされます。そのためSageMakerにプリインストールされていないコマンドやライブラリなどを使いたい場合、起動のたびにインストールする必要があります。

ライフサイクルイベントにてノートブックインスタンスの起動時に実行されるスクリプトを設定できますので、今回はkaggleコマンドの導入を例にしてその方法を紹介します。

  • Dockerイメージを定義する方法もありますが、ちょっとしたコマンド程度にそこまでしたくないです

ライフサイクルイベントの設定

ノートブックインスタンスの編集画面から追加設定 > ライフサイクル設定にて、新しいライフサイクル設定の作成を選択します。設定を行うためにはインスタンスを停止している必要があります。

f:id:ohke:20190921233153p:plain

スクリプトを実行できるライフサイクルイベントとして、ノートブックインスタンスの起動時・作成時の2つがあります。

今回は起動時にkaggleコマンドのインストールとキーファイルの作成を行うスクリプトを作成します。

  • このスクリプトはrootユーザで実行されますので、ec2-userに適用したい場合はsudoする必要があります

f:id:ohke:20190921233253p:plain

設定を更新してインスタンスを起動してターミナルでkaggleコマンドを実行すると、無事使えるようになってます。

[ec2-user ~]$ kaggle -h
usage: kaggle [-h] [-v] {competitions,c,datasets,d,kernels,k,config} ...

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit

commands:
  {competitions,c,datasets,d,kernels,k,config}
                        Use one of:
                        competitions {list, files, download, submit, submissions, leaderboard}
                        datasets {list, files, download, create, version, init, metadata, status}
                        config {view, set, unset}
    competitions (c)    Commands related to Kaggle competitions
    datasets (d)        Commands related to Kaggle datasets
    kernels (k)         Commands related to Kaggle kernels
    config              Configuration settings

ちなみにこのとき実行されたコマンドのログはCloudWatch Logsに以下で出力されています。うまくいかない場合は↓から確認してみてください。

  • ロググループ: /aws/sagemaker/NotebookInstances
  • ログストリーム: ノートブックインスタンス名/LifecycleConfigOnStart

参考

ノートブックインスタンスをカスタマイズする - Amazon SageMaker