Edited at

Watson Studio Experiment BuilderでGPUを時間課金利用する


はじめに

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を別にする)と、出力がまざらなくて便利です。