Google Cloud Platform - Cloud Machine Learning Engine (Cloud ML Engine) + ローカルWindowsで試す

GCP の Cloud ML Engine の使い方を勉強中です。 ローカルの開発環境をWindowsにしても、大丈夫か試してみました。

目的

Cloud ML Engineのローカル開発環境としてWindowsが使えるか試すこと。

結論

完全には難しい。リスクを抱えて行うにはいいけどね。 原因は、WindowsでTensorflow1.2+Python2.xの組みあわせが動かないこと。

環境 OS Python Tensorflow
GCP Cloud ML Ubuntu 2.7 1.2.x
ローカル開発環境 Windows 10 3.6 1.4.0

ローカル開発環境を、Windows + Python2.7 + Tensorflow1.2 にしたいが、 Windows + Python2.7 で Tensorflow は動かない。

といいわけで、やればできるけど、 バージンの違い(Python 2と3)を吸収するコードを書くこと、 もし動かなかったときJobが止まっちゃうので後戻りがかなり発生すること、 を許容できればいい。

GCP Cloud ML セットアップ手順

はじめに  |  Cloud Machine Learning Engine (Cloud ML Engine)  |  Google Cloud Platform を参照して実行。

Cloud ML を使う基本的なフロー

今回は、以下のうち、1と2までがWindowsでできるか検証。結果的には1だけでで断念。

  1. TensorFlow トレーナーを作成し、それをローカルで検証します。
  2. クラウド内の 1 つのワーカー インスタンスでトレーナーを実行します。
  3. クラウド内の分散トレーニング ジョブとしてトレーナーを実行します。
  4. ハイパーパラメータ チューニングを使用して、ハイパーパラメータを最適化します。
  5. 予測をサポートするモデルをデプロイします。
  6. オンライン予測をリクエストし、レスポンスを確認します。
  7. バッチ予測をリクエストします。

準備

Quickstart Using the Command-Line  |  Cloud Machine Learning Engine (Cloud ML Engine)  |  Google Cloud Platformを参照して準備。

  • プロジェクト作成
  • プロジェクトを課金対象にする
  • Cloud Machine Learning Engine and Compute Engine API(複数)を有効
Cloud SDK をインストールして初期化

Quickstart for Windows  |  Cloud SDK Documentation  |  Google Cloud Platformを参照してインストール。

  • Cloud SDK  |  Google Cloud PlatformSDKをダウンロード。
  • インストールする。この時、gcloudのみのPythonランタイムをインストールすることを忘れずに。
  • gcloud init を実行して初期化

念のためアップデート

gcloud components update
Cloud SDK インストール済みですでにデフォルト設定がある場合は、プロジェクトの設定
gcloud config set project [project-id]
TensorFlow をインストール

ここで、ローカルはWindows 10 なので、Anaconda + python3.5 。 あらかじめ環境を仮想環境を構築(python3.5)してある。 以下のコマンドでとりあえずインストール。また、当方の環境はPowerShellです。

activate.ps1 google-cloud-platform
pip install --ignore-installed --upgrade tensorflow

サンプルプログラムをローカルにダウンロード

git clone https://github.com/GoogleCloudPlatform/cloudml-samples.git
cd .\cloudml-samples\census\estimator\

トレーナーをローカルで開発して検証する

データをダウンロードしてパス設定。ちなみに、当方の環境はPowerShellです。

mkdir data
gsutil -m cp gs://cloudml-public/census/data/* data/
$TRAIN_DATA = "${PWD}\data\adult.data.csv"
$EVAL_DATA = "${PWD}\data\adult.test.csv"

依存関係モジュールをインストールする

pip install -r ../requirements.txt

実行してみる。

$MODEL_DIR = "output"
mkdir $MODEL_DIR
rm $MODEL_DIR/* -Recurse -Force
gcloud ml-engine local train `
    --module-name trainer.task `
    --package-path trainer/ `
    -- `
    --train-files $TRAIN_DATA `
    --eval-files $EVAL_DATA `
    --train-steps 1000 `
    --job-dir $MODEL_DIR `
    --eval-steps 100 `
    --verbosity DEBUG

結果エラー

...
  File "D:\home\hironori\Documents\edu\google-cloud-platform\cloudml-samples\census\estimator\trainer\task.py", line 4,
in <module>
    import model
ModuleNotFoundError: No module named 'model'

しょうがない、Python3なんだもん。 ということで、 task.pyimport model 部分を from . import model に変更。

もう一回実行。

gcloud ml-engine local train `
    --module-name trainer.task `
    --package-path trainer/ `
    -- `
    --train-files $TRAIN_DATA `
    --eval-files $EVAL_DATA `
    --train-steps 1000 `
    --job-dir $MODEL_DIR `
    --eval-steps 100 `
    --verbosity DEBUG

やっぱだめだわ。

...
  File "D:\home\hironori\Documents\edu\google-cloud-platform\cloudml-samples\census\estimator\trainer\model.py", line 23
7, in json_serving_input_fn
    for key, tensor in inputs.iteritems()
AttributeError: 'dict' object has no attribute 'iteritems'

うーんやっぱPython2.7用のコードなんですね。 うーん、困った。

この辺でやめとこうかな。