SageMakerは所定の場所に置かれたファイル以外はインスタンス停止によってリフレッシュされます。そのためSageMakerにプリインストールされていないコマンドやライブラリなどを使いたい場合、起動のたびにインストールする必要があります。
ライフサイクルイベントにてノートブックインスタンスの起動時に実行されるスクリプトを設定できますので、今回はkaggleコマンドの導入を例にしてその方法を紹介します。
- Dockerイメージを定義する方法もありますが、ちょっとしたコマンド程度にそこまでしたくないです
ライフサイクルイベントの設定
ノートブックインスタンスの編集画面から追加設定 > ライフサイクル設定にて、新しいライフサイクル設定の作成を選択します。設定を行うためにはインスタンスを停止している必要があります。
スクリプトを実行できるライフサイクルイベントとして、ノートブックインスタンスの起動時・作成時の2つがあります。
今回は起動時にkaggleコマンドのインストールとキーファイルの作成を行うスクリプトを作成します。
- このスクリプトはrootユーザで実行されますので、ec2-userに適用したい場合はsudoする必要があります
設定を更新してインスタンスを起動してターミナルで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