---
# System prepended metadata

title: Google AI Platform
tags: [8月勉強会]

---

###### tags:　`8月勉強会`

# Google AI Platform

## Google AI Platformとは

GCP(Google Cloud Platform)のマネージドなMLaaS(Machine Learning as a Service)。

2019年4月から****Cloud ML Engine****に機能が付いて改名されました。

---

### 機能
機械学習モデルをクラウド上で分散学習、また、APIをバッチ、オンライン予測の両方でスケーリングしてくれる。
:::warning
現時点でTensorFlow 1.13.1までサポート
[AI Platformのランタイムバージョン リスト](https://cloud.google.com/ml-engine/docs/tensorflow/runtime-version-list?hl=ja)
手動スケーリングの場合、予測に使われていない場合でも課金されます。
:::

---

### 競合
- Amazon SageMaker
- FloydHub
etc...

REST API推奨

推論を行う方法としてServingも存在するが、APIを提供するAI Platformを選ぶ理由として、
- マイクロアーキテクチャー化できる
- アプリケーションで他の言語が使える

---

## 環境整備
[Google Cloud SDKのインストール](https://cloud.google.com/sdk/downloads?hl=JA)

---

## 変数定義
```bash=
REGION=us-central1
PROJECT_ID=your-project-id
BUCKET_NAME=$PROJECT_ID

USR_DIR="gs://$PROJECT_ID/usr"
DATA_DIR="gs://$PROJECT_ID/data"
OUTPUT_DIR="gs://$PROJECT_ID/train"

PROBLEM=my_problem
MODEL=transformer
HPARAMS=transformer_base_single_gpu
```
:::warning
現時点で東京リージョン(`asia-northeast1`)は、オンライン予測しか使えません。
[ML Engineのリージョン](https://cloud.google.com/ml-engine/docs/tensorflow/regions?hl=ja)
:::

---

# Running on Cloud ML Engine | Tensor2Tensor
:::warning
あくまでもクラウド上で学習するという用途です。
予測(デプロイ)は難しいかもしれません
:::

---
## データ生成
```bash=
t2t-datagen \
  --t2t_usr_dir=$USR_DIR \
  --data_dir=$DATA_DIR \
  --tmp_dir=$TMP_DIR \
  --problem=$PROBLEM \
  --t2t_usr_dir=$USR_DIR
```

---

## 学習
```bash=
t2t-trainer \
  --problem=$PROBLEM \
  --model=$MODEL \
  --hparams_set=$HPARAMS \
  --data_dir=$DATA_DIR \
  --output_dir=$OUTPUT_DIR \
  --t2t_usr_dir=$USR_DIR
  --cloud_mlengine
```

---

ハイパーパラメータ・チューニング
```bash=
t2t-trainer \
  --problem=$PROBLEM \
  --model=$MODEL \
  --hparams_set=$HPARAMS \
  --data_dir=$DATA_DIR \
  --output_dir=$OUTPUT_DIR \
  --t2t_usr_dir=$USR_DIR \
  --cloud_mlengine \
  --hparams_range=transformer_base_range \
  --autotune_objective='metrics-translate_ende_wmt32k/neg_log_perplexity' \
  --autotune_maximize \
  --autotune_max_trials=100 \
  --autotune_parallel_trials=3
```
チューニングはまだ試していませんが、載せておきます。
[Running on Cloud ML Engine](https://tensorflow.github.io/tensor2tensor/cloud_mlengine.html)

完了！

---


## モデルのデプロイ
```bash=
MODEL_NAME=your_model_name
JOB_NAME="'$MODEL_NAME+'`date '+%Y%m%d%H%M%S'`"

#モデルのコンテナを用意
gcloud ai-platform models create $MODEL_NAME \
  --regions $REGION

#最初のバージョンを作成
gcloud ai-platform versions create v1 \
  --model $MODEL_NAME \
  --origin gs://$BUCKET_NAME/$MODEL_NAME/$JOB_NAME/model
```
:::warning
SavedModelは、250MBまでの制限があります。
:::

---

## 予測リクエストを送信

```bash=
INPUT_DATA_FILE="instances.json"

gcloud ai-platform predict --model $MODEL_NAME --json-instances $INPUT_DATA_FILE
```

---
ローカルで学習したい場合、
[Python3でGoogle Cloud ML Engineをローカルで動作する方法](https://www.kabuku.co.jp/developers/python3_local_google-cloud-ml-engine)


---

## サーバーレスな機械学習基盤の構築入門
### Google Cloud Platformによる機械学習システム構築
[![title](https://i.imgur.com/o6PmZOs.jpg)](https://www.amazon.co.jp/Google-Cloud-Platform%E3%81%AB%E3%82%88%E3%82%8B%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%A7%8B%E7%AF%89-%E5%90%89%E5%B7%9D%E9%9A%BC%E4%BA%BA/dp/4865941711)

---
