概要
AWS SageMakerで学習用インスタンスを立ち上げ、学習させる際に
依存ライブラリや独自のソースコードを使うための方法をまとめる。
ディレクトリ構成
- notebook.ipynb
- src
- train.py
- requirements.txt
- my_source/
- lib
- library/
Notebook
今回はMXNetの例を用いる。
notebookで学習インスタンスを立ち上げるパラメータを以下のように設定する。
パラメータsource_dir
とdependencies
が依存するディレクトリの設定である。
notebook.py
from sagemaker.mxnet import MXNet
gluon_bert = MXNet("train.py",
role=sagemaker.get_execution_role(),
source_dir = "src",
train_instance_count=1,
train_instance_type="ml.m4.xlarge",
framework_version="1.6.0",
dependencies=['lib'],
distributions={'parameter_server': {'enabled': True}},
py_version = "py3",
hyperparameters={'batch-size': 16,
'epochs': 1,
'log-interval': 1})
src
このディレクトリには、
- 学習用コード
train.py
- pipでインストールするリスト
requirements.txt
-
train.py
で依存する独自コード(※my_source/
などディレクトリに分けてもよい)
等を格納する。
requirements.txt
は学習時にインストールされる。
lib
src
との違いはlib
にはnotebook上でインストールしたライブラリを入れる点である。
例えばgithubからcloneし、元コードを書き換える必要がある場合に使用する。
注意する点は、notenookインスタンスのOSはamazon linuxであり、学習インスタンスのOSはubuntsである点である。
そのため、OSに依存するパッケージや特に書き換えが必要ない場合はrequirements.txt
に書く方ことをオススメする。
学習用コードの書き換え
lib
のディレクトリを反映するためtrain.py
内でpathを通す。
import sys
sys.path.append('./lib/')