Acumos AIの機能検証(3): AIアプリケーションの展開と実行

初版: 2019/5/31<br>
著者: 古山 悠介, 株式会社 日立製作所

# はじめに
この投稿では、[Acumos AI](https://www.acumos.org/)の概要と機能検証結果を紹介します。
本投稿の内容は[The Linux Foundation](https://www.linuxfoundation.org/)、[LF Deep Learning Foundation](https://lfdl.io/)の公開資料と、Acumos AIの最新リリース(2019/05現在)であるAthenaリリースでの機能検証結果に基づいて記載しています。

最終回となる今回は、Acumos AIのGUI開発ツールである、Design Studioで開発したAIアプリケーションの展開と実行例について紹介します。

**投稿一覧：**
1. [Acumos AIの概要](https://qiita.com/y-furuyama/items/f474c492113688c02efe)
2. [Acumos AIの環境構築と機能検証の概要](https://qiita.com/y-furuyama/items/9b0b8f722116cc9c5879)
3. [Acumos AIの機能検証(1): 学習モデルのラッピングとDockerイメージの生成](https://qiita.com/y-furuyama/items/98ae10ced39a82d84b23)
4. [Acumos AIの機能検証(2): Design StudioによるAIアプリケーション開発](https://qiita.com/y-furuyama/items/57a86f7f198efdaea496) 
5. Acumos AIの機能検証(3): AIアプリケーションの展開と実行 (本投稿)


# AIアプリケーションのMarketplaceへの登録(<a href="#1">\*1</a>)
<span id="1" style="font-size:small">*1: Marketplaceへの登録はAIアプリケーションの展開や実行に必要な作業ではありませんが、Marketplaceを活用する場合の機能検証として、実施しています。</span>

(1) Acumos AIポータルの[MY MODELS]から公開したいAIアプリケーションを選択(ここでは[第4回](https://qiita.com/y-furuyama/items/57a86f7f198efdaea496)の投稿で作成したアプリケーションを選択しています)後、”Manage My Model”をクリックします。

![publish_AIapp_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412003/35bea3c3-15b8-4fc8-16ed-10fb616e264a.png)


(2) [Publish to Public Marketplace]を選択後、各項目を設定します。
設定後、”Submit To Publication”をクリックします。<br>
※ ここでは例としてPublic Marketplaceを選択しています。Company Marketplaceも選択可能です。

![publish_AIapp_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412003/a1455f5b-f494-2328-eae7-d7d25a2d892a.png)


(3) Marketplaceへの登録に成功すると右端のアイコン表示が下のスクリーンショットのように変化します。

![publish_AIapp_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412003/34d01dad-f353-8bec-e482-f98fef1b22d6.png)


(4) 左メニューから[MARKETPLACE]を選択すると設定した公開範囲に登録したAIアプリケーションが表示されます。

![publish_AIapp_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412003/677b34d7-f6b3-472e-050b-cc5de5e5a7f6.png)


# AIアプリケーションの展開
今回の検証ではAcumos AIと同じサーバにあるプライベートKubernetes環境(以下、デモ環境と表記します)にAIアプリケーションを展開します。

(1) Acumos AIポータルの[MY MODELS]からデプロイしたいAIアプリケーションを選択後、”Manage My Model”をクリックします。

![deploy_app_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412003/51c09ccf-0ad8-597c-24a2-fbbf091de9db.png)


(2) [Export/Deploy to Cloud]を選択後、"Export To Cloud"→"Deploy to local"を選択し、"Download Solution Package"をクリックしてzipファイルをダウンロードします

![deploy_app_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412003/a329e461-5782-11bd-9947-ee2694104661.png)


(3) ダウンロードしたSolution Package(zipファイル)をデモ環境に転送します。

(4) デモ環境でzipファイルを展開します。

```
# unzip solutin.zip -d /tmp/solution
```

(5) 以下のコマンドを実行してプライベートKubernetes環境にAIアプリケーションを展開します(deploy.shはAcumos AIが提供している展開用のスクリプトです)。

```
# cd /tmp/solution
# docker login nexus3.acumos.org:10001 -u docker -p docker
# ./deploy.sh . <docker-proxyのusername> <docker-proxyのpassword>
```

※docker-proxyのusername/passwordは、/system-integration-master/AIO/acumos-env.shの中
で定義されています。

(6) 展開したAIアプリケーションのsvc,pod が正常に動作している事を確認します。

```
# kubectl get svc,pod -n acuos          ※本表示例では関係ないsvc,podを省いています。
NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S) 
service/modelconnector              NodePort    10.111.153.218   <none>        8555:30555/TCP
service/detect1                     ClusterIP   10.100.100.215   <none>        8557/TCP
service/pixelate1                   ClusterIP   10.101.5.159     <none>        8558/TCP 

NAME                                     READY   STATUS    RESTARTS   AGE
pod/modelconnector-74b74bcd56-x4dfc      1/1     Running   0          99s
pod/detect1-846c8c5597-kbf24             1/1     Running   0          99s
pod/pixelate1-6f77f9b9f-vs4j7            1/1     Running   0          99s
```

# AIアプリケーションの実行
(1) デモ環境でWebサーバを起動します。

```
# cd /root/face-privacy-filter/web_demo
# python3 simple-cors-http-server-python3.py 8000

```

(2) デモ環境に接続できるブラウザを起動して、以下のURLに接続します。<br>
http://＜AWSのパブリックDNS名＞:8000/face-privacy.html

(3) 入力情報を設定後、画像を選択(ここでは左から2番目の画像を選択しています)するとAIアプリケーションが動作し、画像の顔部分にモザイクがかかることが確認できます。

* 入力情報<br>
Transform URL: http://＜AWSのパブリックDNS名＞:30555/ <br>
Protobuf Method: detect (input: Image, output: Image)

![AIapp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412003/ead476f9-bcb4-31c6-4f61-1645adde4c7d.png)



# 課題・気づいたこと
ここでは検証を通して明らかになったAcumos AIの課題や気づいたことについて記載します。

【構築】
(1) Acumos AIで使用する環境変数は、/system-integration-master/AIO/acumos-env.shで定義されています。各username、password、port番号等が変更可能です。

(2) AIO(all-in-one)インストーラやAcumos AIプラットフォームによる学習モデル操作は、実行中にインターネット上にあるパッケージや設定ファイルおよびDockerイメージ等を度々ダウンロードします。現状のAthenaリリースはプロキシ環境に未対応であるため、これらの通信が失敗する事が多々ありAcumos AIプラットフォームの構築および運用が非常に困難です。(Acumos AIとしての正式なプロキシ対応は次期リリース(Boreas)で予定されています。)
実際にプロキシ下のVM環境(CentOS7.6を使用)でAthenaリリースの構築を試みた際、デフォルトの状態では構築が出来ませんでした。そのため下記のような対策を試行しました。

* 各ツール(yum、wget、curl、Docker、Dockerコンテナ)に、CA証明書、PROXY、NO-PROXY
の項目を設定
* AIOツールに含まれる環境変数に、PROXY、NO-PROXYの項目を設定<br>
　　/system-integration/AIO/acumos-env.sh
* AIOツールに含まれる下記ファイルを編集(IPアドレスの変更、CA証明書の追加)<br>
　　/system-integration/AIO/docker-engine/kubernetes/docker-deployment.yaml<br>
　　/system-integration/AIO/elk-stack/logstash/Dockerfile


この試行の結果、AIOツールを使用したAcumos AIプラットフォームの構築には成功しました。しかし、この対策だけではAcumos AIポータルの"ON-BOARDING BY WEB"を使用したDockerイメージの生成に失敗して、学習モデルの導入が出来ませんでした。AIOツールに様々な対策を施すことは、リリースされたAthenaの評価として望ましくないため、今回の機能検証ではプロキシ下ではないAWSの環境を使用しました。



【運用】
(3) systemctl restart docker を実行後(システムの再起動も含む)、Acumos AIポータルに接続すると{"message":"no API found with those values"} とブラウザに表示され、Acumos AIポータルが使えなくなる現象が発生します。この場合、/system-integration/AIO/clean.sh でAcumos AIを初期化した後、再度 oneclick_deploy.sh を実行して再構築する必要があります。

【機能】
(4) Acumos AIポータルのメニューにあるMarketplace機能は、作成した学習モデル/AIアプリケーションを共有する機能ですが、インターネット上のAcumos Marketplaceサイト(※)と連携されている訳ではなく、Public MarketplaceとCompany Marketplaceのどちらも構築したAcumos AIプラットフォームの中で閉じたものである事が分かりました。
<br>(※) https://marketplace.acumos.org/#/marketPlace

(5) Acumos AIのAthenaリリースには未実装機能が多くあります。今回の検証で確認した主な未実装機能は以下の通りです。

* AIO(all-in-one)インストーラのプロキシ環境対応
* [DESIGN STUDIO]メニューのトレーニング機能
* [SITE ADMIN]メニューのモニタリング機能
* AWS,GCP環境への学習モデル/AIアプリケーション展開機能

# おわりに
ここまで、Acumos AIの概要と機能検証結果について5回に分けてご紹介しました。

機能検証の結果、Acumos AIには、現時点のAthenaリリースで以下のような機能が実装されていることが確認できました。

* 各種学習ライブラリに対応した、学習モデルのAPI共通化
* Dockerを使用した、学習モデルやAIアプリケーションのデプロイ
* GUI開発環境によるAIアプリケーション開発(Design Studio)
* 学習モデルやAIアプリケーションの公開・共有(Marketplace)

データの変化に伴って学習モデルが陳腐化するAIアプリケーション開発では、開発のスピードが要求されます。Acumos AIの上記機能を活用することにより、以下のような効果が得られ、開発の効率化が可能です。

* 異なる学習アルゴリズムで作成された学習モデルのDesign Studio上での組み合わせ(学習モデルのAPI共通化によって実現)利用の簡単化
* Marketplaceで共有された学習モデルを活用することによる、学習に必要なデータや時間の削減
* Dockerコンテナでの学習モデル・AIアプリケーションのデプロイによるシステムリリースの高速化

今回確認できた機能や今後実装予定の機能は各パブリッククラウドで提供されている既存のAI開発環境提供サービスの機能と多くの部分で類似のものであり、AIアプリケーション開発者の一般的なニーズに応えるものと言えます。
一方、Acumos AIがパブリッククラウドのサービスと異なる点としては、オンプレミス環境に構築可能なAIプラットフォームであること、また、アプリケーションのデプロイ先としてもオンプレミスのKubernetes環境が選択できることがあり、これらの点はエンタープライズのお客様のニーズに対応するものとなっています。
今後、Athenaリリースで未実装のトレーニングなどの追加機能が実装され、Acumos AIがエンタープライズ向けに活用可能なものになっていくのかどうか、次期リリース(Boreas)について動向を継続して確認していきたいと考えています。