ABEJA Platform Advent Calendar 2018の6日目です。
概要
学習コードの開発は機械学習を使って独自サービスを作る上で必須になってくると思います。本記事は、ABEJA Platformのための学習コードを効率よく開発するためのtipsについて解説します。学習コードをローカル環境で動かすための、ローカル推論と学習機能について簡単に紹介します。
ABEJA Platformにおける開発
ABEJA Platformは一言で言えば、コードをアップロードすると、クラウド上で学習や推論を行なってくれるプラットフォームです。コードには、プラットフォーム特有の作法が幾つかあるため、直接はローカルのPCでは動きません。例えば、推論コードは以下のようなルールになりますし、学習も同様です。
この場合、どうやって開発をすれば良いでしょう。
直接コードをアップロードして動作を確認しようとするのでは、後ろのクラウド側のリソースの確保やログの出力に多少の時間がかかってしまいます。数分待ってインデントエラーで終了とか、残念すぎますよね。モジュール単位でならテストコードである程度は確認できるものの、学習全体パスについては実際に動かしてみないと分かりません。
ローカル学習機能と推論機能
ABEJA Platformは、ローカル推論および学習機能というものを備えています。これらは、プラットフォームにコードをアップロードせずとも、手元の環境で動作させることのできる機能です。手元のリソースで実行できるため、通常のコードと同様に立ち上げることができ、素早く動作を確認できます。これにより、素早くバグのチェックを行うことができます。バグが取れたら、最後にプラットフォームで実行することで、効率良い開発が可能となります。
ABEJA CLIのインストール
はじめに、ABEJA Platformをコンソールから叩くためのツールであるABEJA CLIをインストールします。プラットフォームを叩くだけであれば、pythonが入っていれば良いです。ただし、今回のローカル推論・学習機能を使うためにはDockerもインストールされている必要がありますので、予め環境に応じてインストールしておいてください。
CLIのインストール
ABEJA CLIは以下のようにしてインストールします。
$ curl -s https://packagecloud.io/install/repositories/abeja/platform-public/script.python.sh | bash
$ pip install abejacli
初期設定
CLIのインストールが完了したら、まずはクレデンシャルを設定します。abeja configure
コマンドを叩くことで、クレデンシャルを設定できますので、自身のユーザー名・アクセストークンを入力してください。
$ abeja configure
abeja-platform-user : {User-ID}
personal-access-token: {Token}
organization-name : {Organization-ID or Organization-Name}
- 注意点
- user名には
user-
は入れないこと- ○
1234567890123
- ×
user-1234567890123
- ○
- user名には
ローカル推論機能の使い方
ローカル推論機能は以下の様に使います。
$ abeja model run-local \
-h main:handler \
-i abeja/all-cpu:18.10 \
--input image.jpg
-h
でエントリポイントを指定します。-i
は推論のベースイメージです。ABEJA PlatformのコードはDockerの技術を使っており、上記ベースイメージから作成したコンテナに、アップロードしたコードを載せて実行されます。--input
が入力データとなります。
ローカル学習機能の使い方
ローカル学習は以下のように使います。
$ abeja training train-local -h train:handler \
-i abeja/all-cpu:18.10 \
-o XXXXXXXXXX \
-d train:XXXXXXX
-h
でエントリポイントを指定します。-i
は学習のベースイメージです。-o
はオーガニゼーション、-d
は学習データの指定となります。上記であれば、IDがXXXXXXというDataSet(アノテーション済みデータ)にtrainという名前をつけることを意味します。上記を実行すると手元の環境で学習が走ります。詳細な使い方は公式ドキュメントを参照してください。なお、一度上記を実行した後に-d
パラメータを変更したい場合は、--no_cache
オプションをつけて、再作成する必要があるので注意してください。
終わりに
高速な開発はPoCを進めるために重要となります。本記事ではABEJA Platform上での開発を促進するための機能であるローカル推論・学習機能の使い方について述べました。ガシガシ使っていただければ幸いです。