debug-local

説明

本コマンドを実行すると、 --image で指定した環境をローカル上に構築し、ローカルに存在するモデルをその環境上で一度だけ実行します。 --input で指定したファイルの中身をモデルの入力として実行し、その結果を出力します。

debug-local コマンドを使用するためには、 docker がインストールされている必要があります。

概要

$ abeja training debug-local --help
Usage: abeja training debug-local [OPTIONS]

  Local train commands

Options:
  -h, --handler TEXT              Training handler  [required]
  -i, --image TEXT                Specify base image name and tag in the
                                  "name:tag" format  [required]
  -o, --organization_id TEXT      Organization ID, organization_id of current
                                  credential organization is used by default
                                  [required]
  -d, --datasets DATASETPARAMSTRING
                                  Datasets name
  -e, --environment ENVIRONMENTSTRING
                                  Environment variables
  -v, --volume VOLUMEPARAMSTRING  Volume driver options, ex) /path/source/on/h
                                  ost:/path/destination/on/container
  --no-cache, --no_cache          Not use built cache
  --v1                            Specify if you use old custom runtime image
  --runtime TEXT                  Runtime, equivalent to docker run
                                  `--runtime` option
  --build-only                    Build a docker image only. Not run train
                                  command.
  -q, --quiet                     Suppress info logs
  --config PATH                   Read Configuration from PATH. By default
                                  read from `training.yaml`
  --help                          Show this message and exit.

オプション

-h, --handler

呼び出す関数のパスを指定します。 --handler main:handler とした場合には、 main.py のファイル内に定義されている handler を呼び出します。 呼び出すファイルが src ディレクトリ直下に置かれている場合は、 src.main:handler になります。

-i, --image

使用するイメージを指定します。 各イメージについてはこちらを参照して下さい。

-o, --organization_id

オーガニゼーションIDを指定します。ここで指定したオーガニゼーションIDは、ABEJA_ORGANIZATION_ID というキーで環境変数に登録され、実行する学習コードから参照可能になります。

-d, --datasets

使用するデータセットを次のフォーマットにて指定します。 {dataset_name}:{dataset_id} 登録されたデータセットは学習コードの引数として与えられるコンテキストから参照できるようになります。

( バージョン 0.14.0 以降 ) training.yaml が存在すれば、 training.yamldatasets の値が使用されます。
このオプションで training.yamldatasets に定義されている環境変数を上書きすることができます。

-e, --environment

環境変数を指定します。登録された環境変数はコードから参照できるようになります。 例)IMAGE_WIDTH:100

( バージョン 0.14.0 以降 ) training.yaml が存在すれば、 training.yamlenvironment ( params ) の値が使用されます。
このオプションで training.yamlenvironment に定義されている環境変数を上書きすることができます。

-v, --volume

docker run コマンドの --volume オプションに相当します。 --volume /path/source/on/host:/path/destination/on/container の形式で、マウント元となるホスト側のパスとマウント先となるコンテナ側のパスを指定します。 複数指定することも可能です。 なお、 docker run コマンドの --read-only オプションには対応していません。

--runtime

docker run コマンドの --runtime オプションに相当します。

debug-local コマンドでは学習ジョブをコンテナとして実行します。 --runtime オプションでは、そのコンテナを起動するランタイムを指定します。

例えば、コマンドを実行する環境に nvidia-docker2 がインストールされていることを前提に、 --runtime nvidia と指定することで GPU を使用する学習を実行することが出来ます。

--build-only

image のビルドだけを行い、学習自体は実行されません。 ビルドされた image は [指定した image 名]/[指定した image のタグ]/train-local-model という名前になります。

--v1

18.10 系のカスタムイメージを使用する際にはこのオプションを与える必要があります。

--no_cache, --no-cache

再ビルドを行い、イメージを作り直します。

-q, --quiet

info ログの出力を抑制します。

学習をローカルでデバッグする

前提:

  • 以下のような状態になっているものとします。
$ cat main.py
def handler(context):
    dataset_alias = context.datasets
    dataset_id = dataset_alias['dataset_name']
    ...

コマンド:

$ abeja training debug-local \
    -h main:handler \
    -i abeja/all-cpu:18.10 \
    --organization_id 1234567890123 \
    --datasets dataset_1:1000000000

出力:

[info] preparing image : abeja/all-cpu:18.10
[info] building image
INFO: start installing packages from requirements.txt
INFO: packages are installed from requirements.txt
...

ハンドラーの環境変数

debug-local で実行したハンドラー関数では、以下の環境変数を使用することが可能です。

環境変数名 説明
ABEJA_ORGANIZATION_ID オーガニゼーションのID
デフォルトでは~/.abeja/config に設定されているオーガニゼーションのオーガニゼーションID が設定されています
--organization_id で指定することで別のオーガニゼーションID を設定することが可能です
HANDLER ハンドラー関数へのパス
DATASETS データセット情報
ABEJA_PLATFORM_USER_ID ユーザID
デフォルトでは ~/.abeja/config に設定されている abeja-platform-user のユーザID が設定されます ( バージョン 0.12.4 以降 )
--environmentABEJA_PLATFORM_USER_ID に別のユーザ ID を設定することが可能です
ABEJA_PLATFORM_PERSONAL_ACCESS_TOKEN ユーザID
デフォルトでは ~/.abeja/config に設定されている personal-access-token のパーソナルアクセストークンが設定されます ( バージョン 0.12.4 以降 )
--environmentABEJA_PLATFORM_PERSONAL_ACCESS_TOKEN に別のパーソナルアクセストークンを設定することが可能です