Acumos AIの環境構築と機能検証の概要

初版: 2019/5/21<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リリースでの機能検証結果に基づいて記載しています。

第2回目となる今回は、Acumos AIの機能検証を行う環境の構築と、機能検証の概要について紹介します。

**投稿一覧：**
1. [Acumos AIの概要](https://qiita.com/y-furuyama/items/f474c492113688c02efe)
2. Acumos AIの環境構築と機能検証の概要 (本投稿)
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アプリケーションの展開と実行](https://qiita.com/y-furuyama/items/e8b02f4dd4c71d2f94cc)

# Acumos AIの環境構築
ここでは、Acumos AIの環境構築の結果について紹介します。



## 機能検証環境
本投稿では、プロキシサーバを経由しないインターネット接続環境下にAcumos AIプラットフォームを構築することを想定しています(<a href="#1">\*1</a>)。
実際に動作確認をした環境は下表の通りです。

<table>
<tr>
  <td>サーバ</td>
  <td>Amazon EC2(インスタンスタイプ：t2.xlarge)</td>
</tr>
<tr>
  <td>OS</td>
  <td>Ubuntu Server 18.04 LTS (HVM)</td>
</tr>
<tr>
  <td>CPU</td>
  <td>4個</td>
</tr>
<tr>
  <td>メモリ</td>
  <td>16GB</td>
</tr>
<tr>
  <td>HDD</td>
  <td>50GB</td>
</tr>
<tr>
  <td>Acumos AIの導入方法</td>
  <td>AthenaのAIO(all-in-one)インストーラによる自動インストール</td>
</tr>
<tr>
  <td>Acumos AIのデプロイ先</td>
  <td>シングルノードのプライベートKubernetes環境</td>
</tr>
</table>

<span id="1" style="font-size:small">*1: Athenaリリースはプロキシ環境に[未対応](https://jira.acumos.org/browse/ACUMOS-940)であるため、プロキシ環境では正常に動作できません。</span>


## Acumos AIの導入
本手順を実施するにあたり、以下の注意事項があります。

* 本手順書ではカレントディレクトリを/としています。
* 本手順はrootユーザで実施してください。<br>
コマンドの行頭の # はrootユーザのプロンプトを表します。
* 本手順はUbuntuを使用する場合のものです。<br>
CentOSを使用する場合は実行するコマンドや設定ファイルが異なります。
* 前提条件としてDockerとKubernetesの環境が必要です。
* 本検証では2019/2/20時点のsystem-integrationリポジトリを使用しています。<br>AIOインストーラが格納されているsystem-integrationリポジトリは頻繁に更新されているため、<br>バージョンによっては導入手順が本手順と異なる場合があります。

### Acumos AIのリポジトリ構築 [所要時間：2分程度]
Acumos AIのsystem-integrationリポジトリを複製します。

```
# git clone https://gerrit.acumos.org/r/system-integration
```

### Acumos AIプラットフォームの構築  [所要時間：5分～15分]

(1) AIO(all-in-one)インストーラを実行して、プライベートKubernetes環境にデプロイします。

```
# ./system-integration/AIO/oneclick_deploy.sh k8s
```

(2) AIOインストーラが正常終了すると、メッセージの最後尾は以下のように出力されます。

```
<省略>
+ echo 'You can access the Acumos portal and other services at the URLs below,'
You can access the Acumos portal and other services at the URLs below,
+ echo 'assuming hostname "ホスト名" is resolvable from your workstation:'
assuming hostname "ホスト名" is resolvable from your workstation:
+ [[ true == \t\r\u\e ]]
+ portal_base=https://ホスト名:30443
+ onboarding_base=https://ホスト名:30443
+ cat
+ cat acumos.url
Portal: https://ホスト名:30443
Onboarding API: https://ホスト名:30443/onboarding-app
Common Data Service: http://ホスト名:30800/ccds/swagger-ui.html
Kibana: http://ホスト名:30561/app/kibana
Hippo CMS: http://ホスト名:30980/cms/console/?1&path=/
Nexus: http://ホスト名:30881
Mariadb Admin: http://ホスト名:30380
Kong Admin: http://ホスト名:30081
```

(3) Acumos AIのsvc,pod が正常に動作している事を確認します。

```
# kubectl get svc,pods -n acumos
NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)
service/azure-client-service        ClusterIP   10.98.83.164     <none>        9081/TCP
service/cds-service                 NodePort    10.103.250.180   <none>        8000:30800/TCP
<省略>
service/portal-be-service           ClusterIP   10.97.29.29      <none>        8083/TCP
service/portal-fe-service           ClusterIP   10.111.42.70     <none>        8085/TCP

NAME                                     READY   STATUS    RESTARTS   AGE
pod/azure-client-6f9df4bf59-pxlj6        1/1     Running   0          68m
pod/cds-66d59576dc-ggghr                 1/1     Running   0          68m
<省略>
pod/portal-be-68ddc967f8-tph68           1/1     Running   0          68m
pod/portal-fe-f648db58b-lt2nl            1/1     Running   0          68m
　　　　　　　　　　　　　 　　　      　　　　　 　　　↑
　　　　　　　　　　　　　　　　　　　　　　※全てのpodのステータスが"Running"になっていること。
```

* Acumos AIのsvc,pod が正常に動作しない場合<br>
原因を取り除いた後、下記のツールでAcumos AIの初期化を実施してから、手順1.からやり直します。

```
# ./system-integration/AIO/clean.sh
```

(4) Webブラウザから"https://<ホスト名>:30443"に接続してAcumos AIポータルを表示し、Acumos AIが起動していることを確認します

![AcomosAI_portal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412003/4c827eeb-def1-407c-70fa-8506b662bf90.png)

# Acumos AIの機能検証概要
## 検証する機能
今回のAcumos AI動作検証では想定される代表的な利用ケースを踏まえ、[第1回の投稿](https://qiita.com/y-furuyama/items/f474c492113688c02efe)で示したAcumos AIでのAIアプリケーション開発の流れに沿って、以下の機能を検証しています。

1. 共通APIを使用した学習モデルのラッピング
2. 学習モデルの導入とDockerイメージの生成
3. Design StudioでのAIアプリケーション作成
4. 作成したAIアプリケーションの展開

## 機能検証の方法について
* 動作確認はAcumos Wikiで公開されている以下のテスト方法を参考にしています。<br>
[Soup-to-Nuts Example: Onboarding Models, Creating and Deploying a Composite Solution in Acumos](https://wiki.acumos.org/display/AC/Soup-to-Nuts+Example%3A+Onboarding+Models%2C+Creating+and+Deploying+a+Composite+Solution+in+Acumos)
* 本検証で使用する学習モデルはAcumos AIプロジェクトで公開されているface-privacy-filterテスト用のもので、Python scikit-learnライブラリを使用している2つの学習モデル(face-privacy-filter-detect(顔検出)学習モデルとface-privacy-filter-pixelate(モザイク化)学習モデル)になります。

## 機能検証の概要
検証では先に挙げた4つの機能について、以下の流れに沿って各機能が使用できることを確認しました。

**共通APIを使用した学習モデルのラッピング** …「検証する機能」1.の検証<br>

* face-privacy-filterテスト用のツールを使用して共通API化した学習モデルを生成

**Acumos AIポータルへのログイン**<br>

* Acumos AIポータルへのログイン<br>
	※本評価ではデフォルトの管理者ユーザを使用

**学習モデルの導入とDockerイメージの生成** …「検証する機能」2.の検証

* "ON-BORDING BY WEB"を使用した学習モデルのアップロード
* アップロートした学習モデルをDockerイメージの生成<br>
	※本評価では2つの学習モデルを使用

**Design Studioの操作(AIアプリケーションの作成)** …「検証する機能」3.の検証

* [準備] 学習モデル(Dockerイメージ)をMarketplaceに登録
* キャンバスを使用した学習モデルの編集操作
* 複数の学習モデルを組み合わせたAIアプリケーションの作成
* 作成したAIアプリケーションの保存

**AIアプリケーションの展開(プライベートkubernetes環境)** …「検証する機能」4.の検証

* 作成したAIアプリケーションをMarketplaceに登録
* ローカル環境用Solution Package(AIアプリケーション)のダウンロード
* プライベートkubernetes環境へのAI アプリケーション展開

**AIアプリケーションの実行**

* 顔検出学習モデルとモザイク化学習モデルを組み合わせて作成したAIアプリケーションによる、画像中の顔のモザイク化

## 機能検証で使用するAIアプリケーション
本検証で作成するAIアプリケーションは、face-privacy-filter-detect(顔検出)学習モデルとface-privacy-filter-pixelate(モザイク化)学習モデルを組み合わせたものです。入力した写真から顔を検出して、顔の部分だけにモザイク処理を施した写真を出力します。また、学習モデルの連携にはModel Connectorと呼ばれるコントローラーを経由し、各学習モデルの呼び出しにはREST APIが使用されています。
アプリケーションの概要を下図に示します。


![AI_application.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412003/7f5d7c7d-e827-f7b1-d7bf-a70509588f6a.png)


# おわりに
本投稿ではAcumos AIの機能検証を行う環境の構築と、機能検証の概要について紹介しました。次回の投稿からは、実際のAcumos AIの機能検証の結果について紹介します。

第3回：[Acumos AIの機能検証(1): 学習モデルのラッピングとDockerイメージの生成](https://qiita.com/y-furuyama/items/98ae10ced39a82d84b23)