<commit_before># Lab3a: Cloud Machine Learning

以下の作業は Cloud Shell 上で行うことを想定しています。
gcloud SDK がインストールされていればローカルで作業をすることも可能です。

## Job 実行までの最短手順

### サンプルコードのダウンロード

```sh
git clone https://github.com/topgate/training-gcp.git
cd CPB102/lab3a
```

### シェル変数の定義

後々使い回すために、プロジェクト ID と作業用の bucket 名をシェル変数に入れておきましょう。

```sh
PROJECT_ID=`gcloud config list project --format "value(core.project)"`
```

### Cloud Storage のバケット作成

```sh
gsutil mb -c regional -l us-central1 gs://${PROJECT_ID}-ml
```

### データセットの準備

学習用データの csv ファイルを Google Cloud Storage に移動させておきます。

```sh
gsutil cp data/taxi-[a-zA-Z]*.csv gs://${BUCKET_NAME}/dataset/taxifare/
```

### Job の実行

Job 名はプロジェクト内で一意でなければならないので、日付や時間の情報を入れて作成するのがおすすめです。

```sh
JOB_NAME="taxifare`date '+%Y%m%d%H%M%S'`"
touch .dummy && gsutil mv .dummy gs://${PROJECT_ID}-ml/taxifare/${JOB_NAME}/model/

gcloud beta ml jobs submit training ${JOB_NAME} \
  --package-path=trainer \
  --module-name=trainer.task \
  --staging-bucket="gs://${PROJECT_ID}-ml" \
  --region=us-central1 \
  --config=config.yaml \
  -- \
  --output_path=gs://${PROJECT_ID}-ml/taxifare/${JOB_NAME}
```

### モデルのデプロイ

2017-02-04 時点ではまだ alpha ですが Cloud ML には TensorFlow で学習したモデルをデプロイできる機能があるので試してみましょう。
`trainer/task.py` では `$gs://${PROJECT_ID}-ml/taxifare/{JOB_NAME}/model/` 以下に学習済みのモデルを保存しています。

```sh
gcloud beta ml models create taxifare
gcloud beta ml models versions create v1 --model taxifare --origin gs://${PROJECT_ID}-ml/taxifare/${JOB_NAME}/model
```

### モデルを使ってみる

```sh
gcloud beta ml predict --model=taxifare --json-instances=sample.json
```<commit_msg>bug fix<commit_after># Lab3a: Cloud Machine Learning

以下の作業は Cloud Shell 上で行うことを想定しています。
gcloud SDK がインストールされていればローカルで作業をすることも可能です。

## Job 実行までの最短手順

### サンプルコードのダウンロード

```sh
git clone https://github.com/topgate/training-gcp.git
cd training-gcp/CPB102/lab3a
```

### シェル変数の定義

後々使い回すために、プロジェクト ID と作業用の bucket 名をシェル変数に入れておきましょう。

```sh
PROJECT_ID=`gcloud config list project --format "value(core.project)"`
```

### Cloud Storage のバケット作成

```sh
gsutil mb -c regional -l us-central1 gs://${PROJECT_ID}-ml
```

### データセットの準備

学習用データの csv ファイルを Google Cloud Storage に移動させておきます。

```sh
gsutil cp data/taxi-[a-zA-Z]*.csv gs://${PROJECT_ID}-ml/dataset/taxifare/
```

### Job の実行

Job 名はプロジェクト内で一意でなければならないので、日付や時間の情報を入れて作成するのがおすすめです。

```sh
JOB_NAME="taxifare`date '+%Y%m%d%H%M%S'`"
touch .dummy && gsutil mv .dummy gs://${PROJECT_ID}-ml/taxifare/${JOB_NAME}/model/

gcloud beta ml jobs submit training ${JOB_NAME} \
  --package-path=trainer \
  --module-name=trainer.task \
  --staging-bucket="gs://${PROJECT_ID}-ml" \
  --region=us-central1 \
  --config=config.yaml \
  --async \
  -- \
  --output_path=gs://${PROJECT_ID}-ml/taxifare/${JOB_NAME}
```

### モデルのデプロイ

2017-02-04 時点ではまだ alpha ですが Cloud ML には TensorFlow で学習したモデルをデプロイできる機能があるので試してみましょう。
`trainer/task.py` では `$gs://${PROJECT_ID}-ml/taxifare/{JOB_NAME}/model/` 以下に学習済みのモデルを保存しています。

```sh
gcloud beta ml models create taxifare
gcloud beta ml models versions create v1 --model taxifare --origin gs://${PROJECT_ID}-ml/taxifare/${JOB_NAME}/model
```

### モデルを使ってみる

```sh
gcloud beta ml predict --model=taxifare --json-instances=sample.json
```
{'fraction_non_alphanumeric': 0.16608996539792387, 'fraction_numerical': 0.010066058508965083, 'mean_word_length': 4.559440559440559, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3061675', 'n_tokens_mistral': 1706, 'n_tokens_neox': 1596, 'n_words': 250}