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が止まっちゃうので後戻りがかなり発生すること、 を許容できればいい。
- Cloud ML Runtime Version List | Cloud Machine Learning Engine (Cloud ML Engine) | Google Cloud Platform
- Development Environment Considerations | Cloud Machine Learning Engine (Cloud ML Engine) | Google Cloud Platform
GCP Cloud ML セットアップ手順
はじめに | Cloud Machine Learning Engine (Cloud ML Engine) | Google Cloud Platform を参照して実行。
Cloud ML を使う基本的なフロー
今回は、以下のうち、1と2までがWindowsでできるか検証。結果的には1だけでで断念。
- TensorFlow トレーナーを作成し、それをローカルで検証します。
- クラウド内の 1 つのワーカー インスタンスでトレーナーを実行します。
- クラウド内の分散トレーニング ジョブとしてトレーナーを実行します。
- ハイパーパラメータ チューニングを使用して、ハイパーパラメータを最適化します。
- 予測をサポートするモデルをデプロイします。
- オンライン予測をリクエストし、レスポンスを確認します。
- バッチ予測をリクエストします。
準備
- プロジェクト作成
- プロジェクトを課金対象にする
- Cloud Machine Learning Engine and Compute Engine API(複数)を有効
Cloud SDK をインストールして初期化
Quickstart for Windows | Cloud SDK Documentation | Google Cloud Platformを参照してインストール。
- Cloud SDK | Google Cloud PlatformでSDKをダウンロード。
- インストールする。この時、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.py
の import 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用のコードなんですね。 うーん、困った。
この辺でやめとこうかな。