[Project Bonsai] Bonsaiをローカル環境で使ってみる


はじめに

Project Bonsaiについて調べてみましたの4回目です。
過去の内容はこちら。
1回目は「Bonsaiを触ってみる」
2回目は「Bonsaiをいじってみる」
3回目は「BonsaiをBonsaiのシミュレータを触ってみる」

今回は、学習されたBonsaiをローカル環境で使ってみたいと思います。

Bonsaiって何?

Microsoftが提供している自律システム向け機械教示サービスです。(現在はPublic Preview)
産業制御システムに焦点を当てた汎用ディープ強化学習プラットフォームのようです

Bonsaiを使ってみる

学習結果は、Dockerのコンテナとしてパッケージ化して使用することができます。

使用するにあたり、以下のソフトが必要となります。
インストール方法や操作方法は、ここでは説明いたしませんので、個別でお調べください。

学習されたBonsaiを出力する

まずは、学習済みの情報を表示させ、「Train」ページから「Export Brain」をクリックします。

出力するコンテナの形式を指定します。
※例えばRaspberryPi3で動作させたい場合は、arm64(v8)などを指定します。
利用する環境の出力形式が決定したら「Export」ボタンをクリックします。
完了には少し時間がかかります。

コンテナをダウンロード&実行

Exportが完了すると、左のメニューの「Simulators」の下に、Expoeted Brainsの項目が追加されます。

追加された項目の右にある「...」を選択し、メニューから「View deployment instructions」をクリックします。

ログインから、取得、起動までのコマンドが表示されますので、コピーしてローカル環境で実行します。

コマンドは以下の通りです。


# Azure Container Registryにログイン
az acr login

# イメージのダウンロード
docker pull \
WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE

# 起動
docker run              \
  --detach              \
  --publish 5000:5000   \
  --name CONTAINER_NAME \
WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE

WORKSPACE_NAME: Bonsaiのワークスペースに付けた名前。
WORKSPACE_ID: Azure によって割り当てられたBonsaiのWokespace ID。
CONTAINER_NAME: ローカルのDocker コンテナー名前。

コピー内容を実行すると、ACRへのログイン、ダウンロード、実行が実行されます。

起動の確認

起動コマンドまで実行出来たら、Bonsaiが起動されているか確認するため、以下のコマンドを実行します。

docker logs -f CONTAINER_NAME

Bonsaiが正常に実行されている場合は、Bosanaiのログが表示されます。

動作の確認

起動させたローカルのBonsaiに対して、RESTにて学習の結果を取得することができます。

以下のURLに対して、学習カリキュラムで指定したSimStateのJSON情報をPOSTすることで、内容に対するSimActionが返却されます。

http://localhost:5000/v1/prediction

ためしに以下に情報を送信してみます。

{
  "cart_position":0,
  "cart_velocity":0,
  "pole_angle":0,
  "pole_angular_velocity":0
}


しっかり、SimStateに対するSimAction(command)が返却されています。

ちなみに、pole_angleのパラメータを削除して、実行した場合は、以下のようなエラーとなります。

余談

APIのマニュアルは、http://localhost:5000/v1/doc/index.html で参照することができます。

まとめ

今回は、学習後にBonsaiをどうやって使用していくのか?を中心に調べてみました。
お手軽にできるのはいい感じです。
ただ、学習させたCartpoleを現実環境でテストできる環境がないのが残念なところです。

ここまででBonsaiについて一通り触ることができたので、次(いつになるかわからないけど)は、全部独自で用意してみたいと思います。