run-local-server

説明

本コマンドを実行すると、 --image で指定した環境をローカル上に構築し、ローカルに存在するモデルを WebAPI として実行します。

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

概要

$ abeja model run-local-server [--help]
Usage: abeja model run-local-server [OPTIONS]

  Local run commands

Options:
  -h, --handler TEXT              Model hanlder  [required]
  -i, --image TEXT                Base-image name  [required]
  -d, --device_type [x86_cpu|x86_gpu|jetson_tx2|raspberry3]
                                  Device type
  -e, --environment ENVIRONMENTSTRING
                                  Environment variables
  -p, --port PORTNUMBER           port number assigned to local server (
                                  arbitrary number in 1 - 65535 )
  --no-cache, --no_cache          Not use built cache
  --v1                            Specify if you use old custom runtime image
  --help                          Show this message and exit.

オプション

-h, --handler

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

-i, --image

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

-d, --device_type

デバイスタイプを指定します。 [x86_cpu, x86_gpu, jetson_tx2, raspberry3]

-e, --environment

環境変数を指定します。登録された環境変数はコードから参照できるようになります。 例)IMAGE_WIDTH:100
ユーザーの指定可能な環境変数についての詳細は、こちらを参照ください。

-p, --port

ポート番号を指定します。 1 から 65535 の間の任意の整数値が指定可能です。

--no-cache, --no_cache

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

--v1

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

ローカルに WebAPI を立ち上げる

前提:

  • 以下のような状態になっているものとします。
$ cat main.py
def handler(iter, context):
    for data in iter:
        yield data

コマンド:

$ abeja model run-local-server -h main:handler -i abeja/all-cpu:18.10

出力:

[info] preparing image : abeja/all-cpu:18.10
[info] building image
Step 1/7 : FROM abeja/all-cpu:18.10

 ---> a8e1fd359712
Step 2/7 : ADD . /tmp/app

 ---> bccfa55096b5
Step 3/7 : WORKDIR /tmp/app

 ---> 781ceeb720b8
Step 4/7 : ENV SERVICE_TYPE HTTP

 ---> Running in fe0468ea22d9
 ---> f1c8bb5b505b
Step 5/7 : ENV HANDLER main:handler

 ---> Running in 3407d8c19b88
 ---> 971ce380a3a6
Step 6/7 : RUN if test -r requirements.txt; then pip install --no-cache-dir -r requirements.txt; fi

 ---> Running in ff413a5f3683
 ---> f1acfe271dfd
Step 7/7 : LABEL "abeja-platform-model-type"='inference' "abeja-platform-requirement-md5"=''

 ---> Running in 20afeb06abff
 ---> 67035f4c5d70
Successfully built 67035f4c5d70
Successfully tagged abeja/all-cpu/18.10/local-model:latest
[info] setting up local server
[info] waiting server running
{"log_id": "1ef02adf-c363-4e63-84e1-71f1e9e54bbc", "log_level": "INFO", "timestamp": "2018-07-12T08:00:30.785670+00:00", "source": "model:run.run.203", "requester_id": "-", "message": "start executing model. version:0.10.2", "exc_info": null}
{"log_id": "aa3ee889-ffe5-4c69-929f-769cc05e766d", "log_level": "INFO", "timestamp": "2018-07-12T08:00:30.786656+00:00", "source": "model:run.run.218", "requester_id": "-", "message": "start installing packages from requirements.txt", "exc_info": null}
{"log_id": "3c80881d-da66-4d9c-a077-f3aa857c6208", "log_level": "INFO", "timestamp": "2018-07-12T08:00:30.789035+00:00", "source": "model:run.run.224", "requester_id": "-", "message": "requirements.txt not found, skipping", "exc_info": null}
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 ----- Local Server -----
 Started successfully!

 Endpoint : http://localhost:58670
 Handler :  main:handler
 Image :    abeja/all-cpu:18.10

 you can now access this http api!

 press Ctrl + C to stop
 ------------------------

確認:

$ curl -H 'Content-Type: application/json' http://localhost:58670 -d '{"val": 12345}'
{"val": 12345}