解説:AIモデル機能の仕組み

今日は、ご質問の多いAIモデルの動きについて解説します。

AI Modelsとは

デバイスに配置した学習済みモデルNode-REDのノードとして表示することで、AIへのデータの受渡や出力結果を簡単に扱えるようにしようという機能です。現在β版となっています。
enebularでは学習済みモデルを表示するノードをAIノードと呼んでいます。現時点ではJSON形式、カラー画像の2つの形式をインプットデータとして選択できます。

基本的な仕組み

enebularに登録した学習済みモデルをAIモデルと呼びます。AIノードデバイスにあるAIモデルは、Web Server(Flask)を中継して通信します。これにより、デバイスにデプロイしたフローからAIモデルを扱えるようになります。
Node-RED 上の Flow と Docker Image の I/F には HTTP (Flask) を用いています。​そして、リクエストを受けた Flask は AI-Models の処理を呼出すために自動生成されるwrapper.py を介して handlerを呼び出します。
handlerは、AI Models の enebular設定画面にある Handler Functions で設定することができます。
Flow からのリクエストを Flask が受け、Flask が wrapper.py 経由で main.py の関数 handler を呼び出します。
main.handler 関数の返り値を wrapper.py が受け、それを Flask に返します。
自動生成されるwrapper.pyは以下の様なプログラムです。
JOSNの場合
---- wrapper.py 抜粋 ----
def handler1():
  r = request
  data = json.loads(r.data.decode("utf-8"))
  predict = main.handler(data) #★main.py の関数 handler を呼び出す。
  return Response(response=json.dumps(predict), status=200, mimetype="application/json")
------------------------


画像の場合
---- wrapper.py 抜粋 ----
def handler1():
    r = request
    with open("画像ファイル名.jpg", 'wb') as fh:
        fh.write(r.data.decode('base64'))
    img = imread("画像ファイル名.jpg")
    predict = sample.handler(img) 
    return Response(response=json.dumps(predict), status=200, mimetype="application/json")
------------------------

学習済みモデルについて

アップロードする学習モデルはPythonプログラムです。プログラムフォルダ全体をZip圧縮してenebularにアップロードします。

学習済みモデルのデプロイについて

デバイスに学習済みモデルをデプロイするとき、enebularは、Docker hubから指定されたdocker imageを一緒にデプロイします。
Docker imageには依存関係があるため、こちらのドキュメントを参考にしてください。

基本的な使用方法

AIモデル機能の主な使用手順としては、以下の様になります。設定や操作などはドキュメントをご覧ください。
  1. Docker imageを作る。 
  2. そのDocker image上でAIモデルを作る。 
  3. 動いたDocker imageをDocker hubにアップする。 
  4. AIモデルを呼び出すハンドラ関数を作る。 
  5. AIモデルとハンドラ関数をzipファイルにしてデバイスにデプロイする。 
  6. AIノードを使ったフローをenebular editorからリモートモードで作る。 

最後に

ご興味がある方は、ぜひenterprise Planのトライアルをお申し込みいただき、お試しください。
また、お時間のあるときに以下の機能紹介動画も合わせてご覧ください。

※現在β版でのご提供のため、予告なくサービス内容が変わる場合がございます。予めご了承ください。