Kagglerにも便利!? Deep Learning開発＆運用環境「KAMONOHASHI」を Azure上に構築する

## はじめに
### KAMONOHASHIってなに？
![logo_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258705/be1a9709-7605-1efc-44d8-35a3ea09f07d.png)

[KAMONOHASHI](https://kamonohashi.ai/)はDeep Learningのモデル開発を効率的に行うためのAI開発プラットフォームです。

学習で使用するデータの管理や、学習の履歴管理(どのデータ使ってどのモデル使ったか、学習結果はどうだったか)、GPUノードの管理等を行えます。

過去にはKAMONOHASHIを活用して弊社のDeep LearningエンジニアがKaggleにチームで挑戦し世界6位を取った実績もあります。
[Kaggle世界ランク6位をマークしたNSSOL Deep Learning研究チームの力とは　～AI開発プラットフォーム『KAMONOHASHI』が支えた快挙～](https://www.nssol.nipponsteel.com/technology/ai/kamonohashi-02.html)

そんなKAMONOHASHI、実はOSSであり、現在どなたでも使用することができるのです。
リポジトリ：[https://github.com/KAMONOHASHI/kamonohashi](https://github.com/KAMONOHASHI/kamonohashi)

### 本記事の内容
本記事ではKAMONOHASHIをAzureを使用して構築する方法を記載します。
オンプレミス前提のインストーラのため、Azure上で構築するには少々追加の設定が必要です。


## 手順概要
- KAMONOHASHI構築に使用する管理系サーバ(VM)を作成する
- 準備したサーバにKAMONOHASHIをインストールする
- 設定を修正する


## KAMONOHASHI構築に使用する管理系サーバの準備
### Azure portal上でVM作成
Azure portalで管理マシン用のVM3台とNVIDIA GPUを搭載したVMを1台以上用意します。
すべてのマシンに共通のアカウントでsshログインできるようにしてください。
![vm作成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258705/040a5fdb-da4c-9317-7f07-0b5a1511bcf5.png)

以下では参考例として、サーバ名とリソースサイズを記載します。

||サーバ名|リソースサイズ|
|:---|:----|:----|
|Kubernetes master|test-k8sserver01|Standard_F2s_v2|
|KAMONOHASHI|test-kqiserver01|Standard_F4s_v2|
|Storage|test-storageserver01|Standard_F2s_v2|
|GPU|test-gpuserver01|Standard_NC6|

詳細なリソース要件は[インストールガイドの最小リソース要件](https://kamonohashi.ai/docs/install-and-update#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95)を参照してください。


### すべてのVMで共通の設定
- OSはUbuntu Server 16.04LTS
- すべてのマシンに共通のアカウントでsshログインできるようにする
- sudoできるようにする	

### KAMONOHASHI VMの準備
ネットワーク設定>受信セキュリティ規則の追加から、80番ポートへの通信を許可します
![kyoka.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258705/ecd098bc-27f1-e49a-7e51-cea6193165a2.png)

### Storage VMの準備
ネットワーク設定>受信セキュリティ規則の追加から、9000番ポートへの通信を許可します

### GPUサーバの準備
- GPUサーバにGPUドライバをインストール
    - ドライバを[NVIDIAドライバダウンロードサイト](https://www.nvidia.co.jp/Download/index.aspx?lang=jp)からダウンロードします。
    - GPUサーバにsshし、ダウンロードしたドライバのrunファイルを起動します。
    - GPUサーバを再起動します

以下はGPUサーバにsshしドライバのrunファイルを起動するサンプルコードです。

```
ssh ユーザ名@(gpu VMのip)
sudo su -
apt update
apt install -y gcc make
wget http://jp.download.nvidia.com/tesla/418.67/NVIDIA-Linux-x86_64-418.67.run
chmod +x NVIDIA-Linux-x86_64-418.67.run
./NVIDIA-Linux-x86_64-418.67.run -s
```

コマンドを打ち、GPUドライバがインストールできたことを確認します。

```
nvidia-smi
```


## KAMONOHASHIインストール
- Kubernetes master用に用意したマシンにログインし、rootになります。

```
ssh user@(Kubernetes masterマシンのip)
sudo su -
```
- デプロイコマンドを実行

[webサイトのインストールガイド](https://kamonohashi.ai/docs/install-and-update#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95)にあるコマンドを実行します。
バージョンは2019/12/5現在の最新バージョンであるv1.1.4を指定しています。


```
KQI_VERSION=1.1.4 
wget -O /tmp/deploy-tools-$KQI_VERSION.tar.gz https://github.com/KAMONOHASHI/kamonohashi/releases/download/$KQI_VERSION/deploy-tools-$KQI_VERSION.tar.gz
mkdir -p /var/lib/kamonohashi/deploy-tools/$KQI_VERSION/
cd /var/lib/kamonohashi/deploy-tools/$KQI_VERSION/
tar --strip=1 -xf /tmp/deploy-tools-$KQI_VERSION.tar.gz
./deploy-basic-cluster.sh deploy
```

- 用意したマシンの設定情報を対話形式で入力

対話形式で設定を聞かれるので、準備したサーバのマシン名を入力します。
sshユーザ名には構築の準備で使用したユーザ名を入力します。
パスワードを使用している場合はパスワードを入力します。
プロキシ設定は使用しない場合、Nを入力します。
KAMONOHASHIのadminパスワードは8文字以上のパスワードを入力します。

![KQIインストールstep1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258705/5eca1020-4436-5c53-9927-8c1653a156ae.png)


設定を入力すると、自動でKubernetesとKAMONOHASHIのインストールが始まります。


- 20分ほど待つ

構築には約20分かかります。

![KQIインストールstep2-3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258705/28d970ed-1913-225c-fe17-0ecd94a4e476.png)

## 設定修正
### KAMONOHASHIのコンテナの停止
以下のコマンドを実行してKAMONOHASHIのコンテナを停止します。

```
/var/lib/kamonohashi/deploy-tools/1.1.4/kamonohashi/deploy-kqi.sh clean
```
### KAMONOHASHI構築設定編集
以下のコマンドを実行してKAMONOHASHIの設定を編集します。

```
vi /var/lib/kamonohashi/deploy-tools/1.1.4/kamonohashi/conf/settings.yml
```
リバースプロキシ設定の下のexternalIPsをPIPに変更します。

- before
![before.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258705/847cb1f9-7b3a-09d4-f5f5-5021e8c574c4.png)

- after

![after.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258705/957ea541-f183-7ee1-7a41-64fc9525adbc.png)


### KAMONOHASHIのコンテナの起動
以下のコマンドを実行してKAMONOHASHIのコンテナを起動します。

```
/var/lib/kamonohashi/deploy-tools/1.1.4/kamonohashi/deploy-kqi.sh deploy
```

## 構築完了確認
`http://test-kqiserver01.eastus.cloudapp.azure.com`(上記setting.ymlのVirtuaHostsに書いた外部host名)にアクセスします。
ユーザ名admin、パスワードは構築時に設定したKAMONOHASHI用のパスワードを入力します。
![KAMONOHASHIログイン.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258705/cf83fe52-dcd4-88e9-fd2b-40f2c351407e.png)

## おわりに
これでKAMONOHASHIの構築は完了です。
[チュートリアル](https://kamonohashi.ai/docs/tutorial)を参考に、実際にAI開発の履歴管理、GPUノードの管理など様々な機能を体感していただけると嬉しいです。

### よりカスタマイズした要件でKAMONOHASHIを使用したい場合

導入の有償サポートを行っています。カスタマイズした環境への導入などのご要望や質問がある場合、
下記までお問い合わせください。
Mail：kamonohashi-support@jp.nssol.nipponsteel.com
Twitter:[@Kamonohashi_kqi](https://twitter.com/Kamonohashi_kqi)

### 不具合や機能要望がある場合

修正・改善要望は[GitHubのIssue](https://github.com/KAMONOHASHI/kamonohashi/issues)にて受け付けています。