Google Cloud ML EngineでTensorFlowを使って機械学習をします。クラウド側で実行すれば、GPUが手軽に使えるので非常に速く実行できます。
#参考
- 公式チュートリアル
- GitHub(GoogleCloudPlatform/cloudml-samples)
- Google AI Platform - Cloud ML Engineを初心者が動かして理解(前半)
- Google AI Platform - Cloud ML Engineを初心者が動かして理解(後半)
- Google AI Platform - Cloud ML EngineとファイルI/O
#環境
種類 | バージョン | 内容 |
---|---|---|
Host OS | Windows8.1 64bit | 自宅環境なのでProfessionalでもないです |
Guest OS | Ubuntu18.04 LTS 64bit | Oracle VirtualBox上に環境作成 |
Python | Python3.5 | Google Cloud MLのランタイム1.10を使うのでPythonは最新の3.7を使いません(2018/12/24時点) |
TensorFlow | TensorFlow1.10 | Google Cloud MLのランタイム1.10を使うのでTensorFlowは最新の1.12を使いません(2018/12/24時点) |
※**Google Cloud MLのランタイムを確認するときは英語のページで見てください。**日本語ページは更新が遅れています。
#前提
pyenvはインストール済
GCPのアカウントを持っていること
#手順
##1. GCP プロジェクトの設定
公式ガイドをもとにGoogle Cloud Platform設定。
###1.1. プロジェクト作成
「リソースの管理」ページでプロジェクト作成
「プロジェクトを作成」ボタンクリック
###1.2. 課金有効の確認
ガイド をもとにプロジェクトに対して課金が有効かを確認します(デフォルトで有効っぽい)。
###1.3. API有効化
GCPコンソールからCloud Machine Learning Engine と Compute Engine API(複数)を有効化
プロジェクトを選択して「続行」ボタンクリック
###1.4. 認証情報設定
「サービス アカウント キーの作成」ページで新しいサービスアカウントを作成(「役割」はプロジェクトオーナー)してJSON形式で秘密鍵を保存。
環境変数にダウンロードしたJSON形式の秘密鍵を設定(下記のファイルパスとファイル名を変更してください)。
export GOOGLE_APPLICATION_CREDENTIALS="/home/<user>/Downloads/<service-account-file.json>"
###1.5. Google Cloud SDKインストール
公式ガイドに従い、Google Cloud SDKをインストールします。Ubuntuなのでapt-getを使っています。
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install google-cloud-sdk
gcloud init
Google Cloud SDK の確認をします。
まずは下記コマンド実行するとURLを返してくれるので、ブラウザでそのURLにアクセスします。
gcloud auth login
これでGoogle Cloud SDKの設定ができたので、プロジェクト名を設定してモデル一覧を表示します(まだ作っていないので0で返ってきます)。プロジェクト名はIDであることに注意ください。
gcloud config set project <project id>
# 昔は gcloud ml-engine だった(2019/7/8)追記
gcloud ai-platform models list
##2. 訓練コードとデータ設定
訓練用コードとデータをダウンロードし、クラウドにアップロードします。
###2.1. 訓練用コードダウンロード
GitHubから訓練用のコードをダウンロードして解凍します(git cloneでもいいはず)。
###2.2. 訓練データダウンロード
カレントディレクトリを手順「2.1. 訓練用コードダウンロード」で解凍したcloudml-samples-master/census/estimatorに設定して、"data"フォルダーを作り、公開されているGoogle Cloud Storageから訓練データをダウンロードします。
cd cloudml-samples-master/census/estimator
mkdir data
gsutil -m cp gs://cloud-samples-data/ml-engine/census/data/* data/
###2.3. 環境変数の設定
TRAIN_DATA および EVAL_DATA 変数をローカル ファイルパスに設定します。
TRAIN_DATA=$(pwd)/data/adult.data.csv
EVAL_DATA=$(pwd)/data/adult.test.csv
##3. Python環境構築
###3.1. Pythonバージョン3.5設定
前提としてpyenv(ver1.2.8)とvenvを使っています。
pyenvでPythonバージョンを3.5.6に設定します。今回はローカル環境ではなく、クラウド側で訓練をするのでPythonは必須ではありません。TensorBoardで訓練情報を確認するためだけに構築します。
pyenvとvenvに関しては記事「WSLのUbuntuにpyenvとvenvでPython開発環境構築」も参考にしてください。
pyenv global 3.5.6
python --version
which python
###3.2. 仮想環境作成
カレントディレクトリをvenv用の場所に設定して、venvで"clml-tf10"という仮想環境を作成し、有効化。
python -m venv clml-tf10
source clml-tf10/bin/activate
###3.3. TensorFlow等インストール
カレントディレクトリを手順「2.1. 訓練用コードダウンロード」で解凍したcloudml-samples-master/census/estimatorに設定して、requirementsファイルからTensorFlow等をインストールします。チュートリアル通りに--userオプションをつけると仮想環境にインストールされないので注意してください。
pip install -r ../requirements.txt
##4. 訓練実行
###4.1. バケット関連の環境変数設定。
バケット(Google Cloud Storage)関連の環境変数としてバケット名とリージョンを設定。
BUCKET_NAME="cl-ml01"
REGION=us-central1
###4.2. バケットに訓練データアップロード
バケットに訓練データをアップロードし、環境変数にそのパスを設定します。
gsutil cp -r data gs://$BUCKET_NAME/data
gsutil cp ../test.json gs://$BUCKET_NAME/data/test.json
TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv
EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv
TEST_JSON=gs://$BUCKET_NAME/data/test.json
###4.3. 訓練ジョブ関連の環境変数設定
訓練ジョブ関連の環境変数を設定します。
JOB_NAME=census_single_1
OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
###4.4. 訓練ジョブ実行
訓練ジョブをクラウド上で実行します。
gcloud ml-engine jobs submit training $JOB_NAME \
--stream-logs \
--runtime-version 1.10 \
--job-dir $OUTPUT_PATH \
--module-name trainer.task \
--package-path trainer/ \
--region $REGION \
-- \
--train-files $TRAIN_DATA \
--eval-files $EVAL_DATA \
--train-steps 1000 \
--eval-steps 100 \
##5. 結果確認
###5.1. コンソールから確認
GCPのコンソールでジョブステータスを確認します。
View Logsのリンクをクリックすると詳細画面に行けます。トラブルシュートする場合に、このログが非常に重要です。
###5.2. TensorBoardから確認
TensorBoardを起動しようとしたら権限エラーが出たので、事前にログインしておきます。
gcloud auth application-default login
以下のコマンドでTensorBoardを起動して訓練情報を確認します。Windowsの場合、logdirにGoogle Cloud Storageのパスを指定して実行できませんでした。
tensorboard --logdir=$OUTPUT_PATH