はじめに
Watson StudioのExperiment BuilderはDeep Learning用のGPUを時間課金で利用するのに便利な環境です。ただ、バッチ処理の特殊な環境のため、ちょっとしたノウハウが必要です。
そのためのメモ
環境変数
メインプログラムに制御が移る時点で、いくつかの重要な環境変数がセットされています。
その意味と目的を記載します。
変数名 | 目的 | 備考 |
---|---|---|
${DATA_DIR} | 入力データ用 | 実体はCOS Bucket |
${RESULT_DIR} | 出力データ用 | 実体はCOS Bucket |
${MODEL_DIR} | プログラム用 | 制御が移ってくる時点でのカレントディレクトリ |
${HOME} | ユーザーホームディレクトリ | 自由に書き込み可能なワーク用として使う |
注意点
ディープラーニングの学習時には数万枚のオーダーの学習用イメージファイルを使う必要があります。
上の役割分担で考えると、${DATA_DIR}
に置くのが自然ですが、COSに大量のファイルを置くと、パフォーマンスが悪くなり実用に耐えません。
そこで、次のような対応をすることになります。
- 学習用データをtar/zipなどなんらかの形でアーカイブしたファイルを
${DATA_DIR}
に配置 - pythonのメインプログラムを起動する前処理として、アーカイブファイルを解凍するコマンドを入れる
- 解凍先はユーザーホーム(${HOME})配下が望ましい
- pythonアプリ上のデータディレクトリ(学習用データの保存先)は上のステップで解凍したユーザーホーム配下を指定
- pythonアプリに制御を入れる際には、カレントディレクトリは元の
${MODEL_DIR}
に戻す
コマンド指定例
解凍コマンドなど、前処理のコマンドはpythonのメインプログラム呼出し前に &&
でつなぎます。
例えば、次のような形にコマンド指定を行う形になります。
cd ${HOME} && unzip ${DATA_DIR}/TRAIN_IMAGES.zip && cd ${MODEL_DIR} && python main.py --iters 1000 --input_path ${HOME}/TRAIN_IMAGES --output_path ${RESULT_DIR}
複数ジョブ同時実行時のbest practice
Experiment Builderの便利さが最大限に発揮できるのは、条件を少し変えただけの学習を同時並行でいくつも行える点です。その際は、ジョブごとに出力バケットから別にする(=Experimentを別にする)と、出力がまざらなくて便利です。