分析手順をAI-APIとして実行する

はじめに

AI-APIは、分析手順(モデル作成、予測)などの処理内容を記述・デプロイ可能なAPIです。 AI-APIの詳細については AI-API作成ガイド を参照してください。

ここでは分析手順(Notebookファイル)をデプロイし、AI-APIとして実行する例を示します。

作成済みのAAClusterがない場合は、AAClusterを作成する に従って作成してください。 作成したら、Jupyter Notebookへ接続する を参照し、Jupyter Notebookへ接続してください。

AI-APIをデプロイする

Jupyter Notebookのルートディレクトリ配下に /opt/aapf/1.5.4/docs/getting_started.zip に含まれる examples/getting_started-ai-api.ipynb を配置します。

  1. Jupyter Notebookで [New] ボタンを押下し、 [Terminal] を選択してください。

  2. 下記のコマンドを実行してください。

    $ mkdir -p ~/aiapi
    $ unzip /opt/aapf/1.5.4/docs/getting_started.zip -d ~/work
    $ cp -r ~/work/examples/* ~/aiapi/
    
  3. Terminal上で exit コマンドを実行した後、Terminalタブを閉じてください。

AI-APIの外部仕様を確認する

Jupyter Notebook上でAI-APIの外部仕様(APIのエンドポイント、パラメーター、実行コード例)を 確認することができます。

Jupyter Notebook上で [aiapi] ディレクトリに移動し、 getting_started-ai-api.ipynb を開きます。ツールバー右端の歯車ボタンを押します。

_images/doc_button.bmp

外部仕様書が開きます。

_images/execution_document.bmp

AI-APIの外部仕様書作成機能の詳細は、 nbexec User Guide - Execution Document を参照してください。

AI-APIを実行する

AI-APIをWebAPIとして実行するPythonコードを作成し、実行します。

AI-APIは <JUPYTER_ENDPOINT>/api/executionsPOST リクエストを送信すると実行されます。 リクエストパラメータとして最低限以下を指定する必要があります。

  • token
    • Jupyter Tokenを設定します。Jupyter Notebookはこのパラメータに設定された値を認証に使用します。
  • notebook
    • 実行するNotebookファイルのパスを指定します。

また、今回はAI-APIを同期的に実行するため、HTTPヘッダーに X-Response-Encoding: chunked を設定します。

Notebookを作成するため、Jupyter Notebook上で [New] ボタンを押下し、 [Python 3] を選択します。
In [1] 内で下記2点についてコードを書き換えて実行し、レスポンスのステータスコードが正常(202)であることを確認します。

  1. AI-API実行時の認証用Jupyter Tokenを設定する
  • AAPF WebUIにログインし、使用中のAAClusterの [Access Jupyter Notebook] ボタンを押下し、表示される Jupyter Token をコピーします。
  • コード中のJUPYTER_TOKENを書き換えて設定してください。
  1. エンドポイント(Jupyter NotebookのURL)を設定する
  • Jupyter Notebook上で、ブラウザのURL欄に表示されているURLをコピーします。
  • コード中のJUPYTER_ENDPOINTを書き換えて設定してください。
In [1]:
import requests

JUPYTER_TOKEN = 'c1663431be5df1873505524d720f958aa1fecbfd9fc06123' # set the Jupyter Token gotten in the previous clause
JUPYTER_ENDPOINT = 'http://aapf.example.com/proxy/09e1d5cedf23ad9d7d25cb0bdc58e5b9/jupyter' # set the Jupyter Notebook URL

notebook = 'aiapi/getting_started-ai-api.ipynb'
exec_endpoint = '{}/api/executions'.format(JUPYTER_ENDPOINT)

headers = {'Accept': 'application/json', 'X-Response-Encoding': 'chunked'}
params = {
    'token': JUPYTER_TOKEN,
    'notebook': notebook,
}

res = requests.post(exec_endpoint, params, headers=headers)
res.status_code
Out[1]:
202

AI-APIの実行結果を確認し、実行が正常に完了したことを確認します。
以下ではAI-APIで実行したNotebook 'aiapi/getting_started-ai-api.ipynb' の最後のセルの
出力結果'jupyter-notebook'がレスポンスのoutputsのdataに存在することを確認しています。

In [2]:
import json

text = res.text.split('\r\n')[-3] # get the information of the last cell of the executed AI-API
json.loads(text)
Out[2]:
{'event': 'end',
 'timestamp': 1549943601.505296,
 'progress': '5/5',
 'cell': {'cell_type': 'code',
  'execution_count': 4,
  'metadata': {'collapsed': True,
   'nbexec': {'start_time': '2019-02-12T12:53:21.492797+09:00',
    'end_time': '2019-02-12T12:53:21.505296+09:00',
    'duration': 0.012499}},
  'outputs': [{'output_type': 'execute_result',
    'metadata': {},
    'data': {'text/plain': "'jupyter-notebook'"},
    'execution_count': 4}],
  'source': 'import os\nos.uname()[1] # get hostname'}}

AI-APIとして実行されたNotebookは別途保存されます。
Jupyter Notebook上で [aiapi] ディレクトリに移動し、実行されたNotebook(getting_started-ai-api-Executed1.ipynb)の内容を確認できます。

使用できるリクエスト(GET, POST, DELETE)やレスポンスの詳細については、nbexec User Guide - Execution APIを参照してください。
また、AI-APIにパラメーターを定義し、WebAPI実行時にパラメーターを指定して実行することもできます。パラメーターの定義方法の詳細は、nbexec User Guide - Notebook Parametersを参照してください。