Sosogu LLC. Blog

Sosogu LLC. のブログ https://sosogu.net

ML-Engineを使ってDeep Learningのトレーニングを爆速化する

はじめに

Cloud Machine Learning Engine は、Googleが提供しているCloudのマシンラーニング環境です。 TensorFlow やKerasを使用して、大規模な機械学習モデルをトレーニングし、トレーニング済みのモデルをホストしてクラウド内の新しいデータに関する予測を行うことができます。

予備知識
ML Engineを扱うためには、ある程度のMachine LearningとTesnorflowの知識が必要です。
初めての方は、ローカルの環境でTensorflowで一度コーディングしてみることをお勧めします。

チュートリアル

これから書く内容は公式のチュートリアル の内容とほぼ同じです。

1. GCPプロジェクトの設定

まずはじめにGoogle Cloud Platformの設定を行います。

GCP プロジェクトを選択または作成します。[リソースの管理] ページに移動
プロジェクトに対して課金が有効になっていることを確認します。
課金を有効にする方法について
Cloud Machine Learning Engine と Compute Engine API(複数)を有効にする。ENABLE THE APIS
認証情報の設定:
GCP Console で [サービス アカウント キーの作成] ページに移動します。[サービス アカウント キーの作成] ページに移動
[サービス アカウント] プルダウン リストから [新しいサービス アカウント] を選択します。
[サービス アカウント名] フィールドに名前を入力します。
[役割] プルダウン リストで、[プロジェクト] > [オーナー] を選択します。
[作成] をクリックします。キーが含まれている JSON ファイルがパソコンにダウンロードされます。
環境変数 GOOGLE_APPLICATION_CREDENTIALS をサービス アカウント キーが含まれる JSON ファイルのファイルパスに設定します。
Linux または Mac OS

export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

Windows (Powershell)

env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

Cloud SDK をインストールし、初期化します。

2. Python環境

オプションになりますが、pyenvとvirtualenvで仮想環境を作成して実行することをお勧めします。
例:

pyenv virtualenv python2.7 ml-engine-test

Tensorflowをインストールします。

pip install tensorflow
3. 準備

Githubのレポをクローンして

git clone https://github.com/GoogleCloudPlatform/cloudml-samples.git

estimatorフォルダーに移動します。

cd cloudml-samples-master/census/estimator

サンプルデータをダウンロードします。

mkdir data
gsutil -m cp gs://cloud-samples-data/ml-engine/census/data/* data/

python依存関係のインストール
pip install -r ../requirements.txt

4. Google Storageバケットの設定

Project_ID, Bucket_Nameを設定します。

PROJECT_ID=$(gcloud config list project --format "value(core.project)")
BUCKET_NAME=${PROJECT_ID}-mlengine

Regionはus-central1に設定してください。

REGION=us-central1

新しいバケットを作成します。

gsutil mb -l $REGION gs://$BUCKET_NAME

次に、データファイルとJsonファイルを Cloud Storage バケットにアップロードします。

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
5. Googleクラウドでのトレーニング実行

さあ、いよいよ準備が整ったので、トレーニングを実行します。
Job NameとOutput Pathを設定します。

JOB_NAME=census_single_1
OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME

以下のコマンドでトレーニングを実行します。

gcloud ml-engine jobs submit training $JOB_NAME \
--job-dir $OUTPUT_PATH \
--runtime-version 1.4 \
--module-name trainer.task \
--package-path trainer/ \
--region $REGION \
-- \
--train-files $TRAIN_DATA \
--eval-files $EVAL_DATA \
--train-steps 1000 \
--eval-steps 100 \
--verbosity DEBUG

問題がなければ、あっという間にトレーニングは終わるはずです。
結果のログは以下のコマンドで表示させることができます。

gsutil ls -r $OUTPUT_PATH

または、GCPコンソールで結果をクリックすることもできます。

まとめ

今回は、GoogleのMLEngineを使ってクラウドでトレーニングを行いました。
TensorflowやKerasの知識があれば、非常に高速にトレーニングを行うことができます。
AmazonMicrosoftでも同様のサービスを提供していますが、
MLEngineは飛び抜けて高速にトレーニングできると感じました。TPU恐るべしです。
ローカルな環境でトレーニングを行うのは便利なのですが、
GPUは毎年アップデートされてく中で、その都度、高価なGPUを手に入れるのはコスパがよくありません。
今やクラウドサービスをうまく使って、効率よくトレーニングを行なって行くことが必要不可欠な時代ではないでしょうか。