- 概要
- スタートアップガイド
- ユーザガイド
-
リファレンス
-
ABEJA Platform CLI
- CONFIG COMMAND
- DATALAKE COMMAND
- DATASET COMMAND
- TRAINING COMMAND
-
MODEL COMMAND
- check-endpoint-image
- check-endpoint-json
- create-deployment
- create-endpoint
- create-model
- create-service
- create-trigger
- create-version
- delete-deployment
- delete-endpoint
- delete-model
- delete-service
- delete-version
- describe-deployments
- describe-endpoints
- describe-models
- describe-service-logs
- describe-services
- describe-versions
- download-versions
- run-local
- run-local-server
- start-service
- stop-service
- submit-run
- update-endpoint
- startapp command
-
ABEJA Platform CLI
- FAQ
- Appendix
CLI で Web API を作成
はじめに
このドキュメントでは、ABEJA Platformを利用して、サンプルモデルをWebAPIとして起動する方法について説明します。
ABEJA Platform CLIを設定
ABEJA Platfrom CLI を利用することで、作成したモデルを ABEJA Platform へアップロードしたり、設定を変更したり、削除することが可能です。
インストール
ABEJA Platform CLIをインストールします。動作環境についてはこちらを参照してください。
$ curl -s https://packagecloud.io/install/repositories/abeja/platform-public/script.python.sh | bash
$ pip install abejacli
設定
ABEJA Platform CLIの設定を行います。ABEJA Platform の認証情報を設定してください。
$ abeja config init
User ID : {USER_ID}
Personal Access Token: {PERSONAL_ACCESS_TOKEN}
Organization ID : {ORGANIZATION_ID}
[INFO]: ABEJA credentials setup completed!
サンプルのモデルを作成
サンプルモデルのダウンロード
こちらよりサンプルモデルのソースコードをダウンロードします。
ダウンロードしたソースコードには、簡単な計算を行う関数の実装が含まれています。
ソースコードを main.py
として空のディレクトリに配置し、配置したディレクトリ上でコマンドを実行していきます。
$ ls
main.py
$ cat main.py
def handler(iter, context):
for line in iter:
if 'total_without_tax' not in line:
raise context.exceptions.InvalidInput('total_without_tax not in the request')
total_without_tax = line['total_without_tax']
total_without_tax = int(total_without_tax)
total = total_without_tax * 1.08
yield {'total': total}
サンプルモデルのハンドラー関数をローカル実行
クラウド上にWebAPIの作成を開始する前に、ローカルでサンプルモデルのソースコードが動作することを確認します。
モデルハンドラー関数のテスト入力用に以下のようなJSONファイルを用意します。
$ cat request.json
{
"total_without_tax": 100
}
run-local
コマンドを実行し、サンプルモデルのハンドラー関数を呼び出します。
ハンドラー関数は main.py
に handler
という名前の関数として定義されているため、--handler
にはmain:handler
と指定します。
最終出力には入力であるrequest.json
にハンドラー関数を適用した結果が表示されます。
$ abeja model run-local --image abeja/all-cpu:18.10 --handler main:handler --input request.json
[info] preparing image : abeja/all-cpu:18.10
...
[info] building image
...
[info] setting up local server
...
[info] waiting server running
...
[info] sending request to model
...
[info] finish requesting to model
{'total': 108.0}
モデルの作成
create-model
コマンドでモデルを作成します。
--name
及び--description
には識別可能な任意の文字列を指定します。
$ abeja model create-model --name getting-started --description "this is a getting-started example model"
{
"created_at": "2018-05-01T02:07:16.459526Z",
"description": "this is a getting-started example model",
"model_id": "1111111111111",
"modified_at": "2018-05-01T02:07:16.459641Z",
"name": "getting-started",
"versions": []
}
モデルバージョンの作成
create-version
コマンドでモデルバージョンを作成します。
--model_id
にはcreate-model
コマンドで作成したモデル識別子を指定します。
$ abeja model create-version --model_id {MODEL_ID} --version 0.0.1 \
--image abeja-inc/all-cpu:18.10 --handler main:handler
{
"version": "0.0.1",
"version_id": "ver-1111111111111111"
}
デプロイメントの作成
create-deployment
コマンドでデプロイメントを作成します。
--model_id
にはcreate-model
コマンドで作成したモデル識別子を指定します。
$ abeja model create-deployment --name getting-started --model_id {MODEL_ID}
{
"created_at": "2018-05-02T04:46:04.469269Z",
"daemons": [],
"default_environment": {},
"deployment_id": "2222222222222",
"model_id": "1111111111111",
"modified_at": "2018-05-02T04:46:04.469381Z",
"name": "getting-started",
"runs": [],
"services": [],
"triggers": []
}
サービスの作成
create-service
コマンドでサービスを作成し、対象モデルバージョンを WebAPIとして起動します。
--deployment
にはcreate-deployment
コマンドで作成したデプロイメント識別子、 --version_id
にはcreate-version
コマンドで作成したバージョン識別子を指定します。
$ abeja model create-service --deployment_id {DEPLOYMENT_ID} --version_id {VERSION_ID}
{
"created_at": "2018-05-02T05:38:19.312332Z",
"deployment_id": "2222222222222",
"instance_number": 1,
"instance_type": "cpu-0.25",
"metrics_url": "https://p.datadoghq.com/sb/aaaaaaaaa-6951475d7c4b91c840dbe30a07652620",
"model_version": "0.0.1",
"model_version_id": "ver-1111111111111111",
"modified_at": "2018-05-02T05:38:21.301214Z",
"service_id": "ser-1111111111111111",
"status": "IN_PROGRESS",
"user_env_vars": {}
}
作成されたサービスの起動状態の確認
サービスが利用可能な状態になっているか確認します。
describe-services
コマンドを使用し、サービスのステータスを確認します。ステータスが READY
になっていることを確認し、疎通確認を行います。
$ abeja model describe-services --deployment_id {DEPLOYMENT_ID}
{
"entries": [
{
"created_at": "2018-05-02T05:38:19.312332Z",
"deployment_id": "2222222222222",
"instance_number": 1,
"instance_type": "cpu-0.25",
"metrics_url": "https://p.datadoghq.com/sb/c61020b12-6951475d7c4b91c840dbe30a07652620",
"model_version": "0.0.1",
"model_version_id": "ver-1111111111111111",
"modified_at": "2018-05-02T05:38:21.301214Z",
"service_id": "ser-1111111111111111",
"status": "READY",
"user_env_vars": {}
}
]
}
statusが `READY` になるまで、5 分以上かかります。
作成されたサービスの動作を確認
create-service
コマンドで作成されたWebAPIを呼び出し、 main.py の処理結果のレスポンスを確認します。
簡易チェックツールを利用する場合
JSONを入力として扱う WebAPIの動作チェックを行う場合、 check-endpoint-json
コマンドを使用します。
$ abeja model check-endpoint-json --deployment_id {DEPLOYMENT_ID} --service_id {SERVICE_ID} \
--key total_without_tax --value 100
{
"total": 108.0
}
デプロイされた WebAPI がまだ利用可能ではない場合、レスポンスは HTTP エラー(503) となります。
curlを利用する場合
curl で動作を確認する場合、以下のリクエストを行います。
$ curl --user user-{ABEJA-PLATFORM-USER}:{PERSONAL-ACCESS-TOKEN} \
-H 'Content-Type:application/json' \
-XPOST -d '{"total_without_tax": 100}' \
https://{ORGANIZATION_NAME}.api.abeja.io/deployments/{DEPLOYMENT_ID}/services/{SERVICE_ID}
サービスのエイリアス名の指定(エンドポイントの作成)
create-endpoint
コマンドを実行すると、指定したサービスにエイリアス(エンドポイント)を与えアクセスすることが可能になります。 その際に、endpoint
という管理単位が作成され describe-endpoints
で確認することができます。
起動したサービスへの利用時は、 https://{ORGANIZATION_NAME}.api.abeja.io/deployments/{DEPLOYMENT_ID}/services/{SERVICE_ID}
へのリクエストが必要ですが、 エイリアスを与えることで https://{ORGANIZATION_NAME}.api.abeja.io/deployments/{DEPLOYMENT_ID}/{エイリアス}
としてアクセスすることが可能になります。
1つのサービスに複数のエイリアス(エンドポイント)を与えた場合も、いずれのエンドポイントへのリクエストもcreate-service
で起動した同一のサービスが実態としてリクエストを受け付けます。
$ abeja model create-endpoint --deployment_id {DEPLOYMENT_ID} --service_id {SERVICE_ID} \
--custom_alias default
{
"custom_alias": "default",
"endpoint_id": "pnt-1111111111111111",
"service_id": "ser-1111111111111111"
}
作成されたエンドポイントの動作を確認
create-endpoint
コマンドで作成されたエンドポイントを呼び出し、 main.py の処理結果のレスポンスを確認します。
簡易チェックツールを利用する場合
JSONを入力として扱う WebAPIの動作チェックを行う場合、 check-endpoint-json
コマンドを使用します。
$ abeja model check-endpoint-json --deployment_id {DEPLOYMENT_ID} \
--key total_without_tax --value 100
{
"total": 108.0
}
curlを利用する場合
curl で動作を確認する場合、以下のリクエストを行います。
$ curl --user user-{ABEJA-PLATFORM-USER}:{PERSONAL-ACCESS-TOKEN} \
-H 'Content-Type:application/json' \
-XPOST -d '{"total_without_tax": 100}' \
https://{ORGANIZATION_NAME}.api.abeja.io/deployments/{DEPLOYMENT_ID}