ホーム » Google Cloud Machine Learning

Google Cloud Machine Learning」カテゴリーアーカイブ

Google Cloud ML: HowTo: Cloud ML のための TensorFlow アプリケーション作法

Google Cloud ML: HowTo: Cloud ML のための TensorFlow アプリケーション作法

Google Cloud ML では、クラウドで TensorFlow トレーナー・アプリケーションを実行することによってモデルをトレーニングします。実行させるためには、アプリケーションに2、3の変更を行ない、トレーニング・サービスが利用できる形式にする必要があります。

つまり Google Cloud ML でトレーニングして予測のためにホスティングするには、TenosrFlow のトレーナー・アプリケーションのコード変更が必要なわけです。
以下のドキュメントにこの必要なステップについて記述してありますので、要点をまとめてみました :

Preparing Your TensorFlow Application for Training in the Cloud

* 動作確認済みです。
* あくまでベータですので仕様が変更される可能性はありますのでご注意ください

出力を定義する

トレーニングの間貴方は多分個々のインスタンスのために予測をエクスポートすることはしなかったでしょう、何故なら集約 (aggregates) は重要だからです。予測のためにモデルを配備する準備をする際には、一つあるいはそれ以上の出力テンソルを作成する必要があります。入力テンソルと同じ shape と共に、モデル・タイプのための適切なタイプの出力テンソルが通常は必要です。モデルの特定な要請に適合するよう異なる値を出力するために TenosrFlow グラフを構成することができます。

例えば、Google Cloud Machine Learning : 入門編 (3) – 予測 で使用されたサンプルではトレーニングの間にロジット層から raw スコアを生成するだけのモデルから始めます。 予測のためには、すべての可能性ある数字の確率分布に加えて、モデルが決定した、入力画像により尤もらしいと表される数字 (i.e. 0 から 9) を出力することを望みます。

このためには、TensorFlow グラフに以下の ops を追加しました :

prediction = tf.argmax(logits, 1)
scores = tf.nn.softmax(logits)

入力を作成する

配備するモデルは、入力値を受け取るための適切な型の一つあるいはそれ以上の入力テンソルを含むべきです。これは推論グラフにおける TensorFlow プレースホルダー であるべきです。

可変なバッチ・サイズをサポートする

トレーニングのためにグラフをセットアップする共通の方法は固定されたバッチサイズを使用することです。これは予測可能なサイズの入力データのテンソルを渡すことを簡単にします。予測のためにモデルを使用する準備ができた時、様々な数のインスタンスとともに予測リクエストを発行するクライアントをサポートするために、可変サイズの入力バッチをサポートすることを望むかもしれません。

これは、Google Cloud Machine Learning : 入門編 (3) – 予測 で使用されているサンプルでデモされているように、予測グラフにおいて入力テンソルのバッチ次元を None に設定することで成されます :

keys_placeholder = tf.placeholder(tf.int64, shape=(None,))
images_placeholder = tf.placeholder(tf.float32, shape=(None,  mnist.IMAGE_PIXELS))
labels_placeholder = tf.placeholder(tf.int32, shape=(None,))

インスタンス・キーを使用する

バッチ予測サービスは入力とは異なった順序で出力を書き出すかもしれませんので、入力インスタンスを出力予測とマッチできるように配備したモデルは一意のキーを使用してインスタンスを識別するべきです。

一つまたはそれ以上のキー (e.g. 単純な連続整数値) を予測時のインスタンスに追加できます。これを行なう一つの単純な方法は適切な型のプレースホルダーを追加して、入力データと同じ shape を使い、それをそのまま予測結果にスルーして渡すことです。

次はサンプルからの例です :

keys_placeholder = tf.placeholder(tf.int64, shape=(None,))

# To be able to extract the id, we need to add the identity function.
keys = tf.identity(keys_placeholder)

注意 : キーは必ずしも入力を通して直接渡す必要はありません; 実行時に計算される推論グラフにおける内部的なテンソルかもしれません。

グラフに入力と出力コレクションを追加する

Cloud ML 予測サービスがトレーニングしたモデルを実行できるようにするには、TensorFlow グラフ・コレクション における 入力と出力テンソルをそれぞれ inputs と outputs という名前で指定しなければなりません。これを行なうには各コレクションの辞書を作成してその JSON serialized 表現を tf.add_to_collection でグラフに追加します。

内部的なテンソル名の代わりに、予測のための入力あるいは出力テンソルを表すためにエイリアスを使用できます。 これらのエイリアスは、バッチ予測のための入力/出力ファイルあるいはオンライン予測のためのリクエスト/レスポンスにおいてテンソルに名前をつけるために使用されます。

以下はサンプルからの例です :

inputs = {'key': keys_placeholder.name, 'image': images_placeholder.name}
tf.add_to_collection('inputs', json.dumps(inputs))

outputs = {'key': keys.name,
           'prediction': prediction.name,
           'scores': scores.name}
tf.add_to_collection('outputs', json.dumps(outputs))

これは Cloud ML 予測サービスが :

  • 各予測入力に ‘key’ と ‘image’ を含むことを想定して
  • ‘key’, ‘prediction’, そして ‘scores’ を返す

ことを保証してくれます。

最終的なモデルをエクスポート(保存)する

トレーニング・スクリプトがモデルのトレーニングを終えたら、TensorFlow : How To : 変数: 作成、初期化、保存そしてロード のための標準的な手続きを使ってグラフをエクスポートします。 特に実行中のセッションを復旧してそれを MetaGraph にエクスポートするためには tf.train.Saver() を使います。

貴方のグラフはモデルの効率性や精度を助ける幾つかの ops を多分含むでしょう、しかしそれらは予測では使用されません。例えば、貴方のトレーニング・モデルに過学習に対するガードとしてトレーニング・データの複数表現を育成することを押し進めるためにドロップアウトを使うことを選択するかもしれません。一般的には配備モデルにおいてはそのような ops を含めることを望まないでしょう。トレーニング仕様の ops の全てを省くために、最終的なエクスポートの前に TensorFlow グラフを再構築すべきです

注意 : ドロップアウトのような幾つかのケースでは、TensorFlow はトレーニング中心の ops をトレーニングのためには有効にしてテストと予測のためには無効にするように configure することを可能にします。予測のための配備の前にそのような ops をモデルから完全に削除するか configuration の変更だけにするかは貴方次第です。

以下はサンプルから最終的なモデルをエクスポートする例です :

if not os.path.isdir(FLAGS.model_dir):
  os.makedirs(FLAGS.model_dir)
saver.save(sess, os.path.join(FLAGS.model_dir, 'export')

エクスポート・ファイルを configure する

Cloud ML の予測サービスとの互換性のために、モデルは TensorFlow グラフ・ファイルと TensorFlow metagraph にエクスポートされなければなりません。これらのファイルはそれぞれ export と export.meta という名前でなければなりません。

TensorFlow アプリケーションへの変更

コマンドライン引数

Cloud ML は実行時、トレーナー・モジュールにコマンドライン引数を渡すことができます。アプリケーションにどのような引数が必要かを決めるのは貴方次第ですが、通常はこれらの引数を少なくともハイパーパラメータ値 (e.g. 隠れ層のサイズ) とチェックポイントを書き出す Google Storage パスを指定するために使うことを望むでしょう。

コードをパッケージ化する

貴方の既存の TensorFlow コードを Google Cloud Machine Learning と共に利用するためには、それを Python モジュールに含めなければなりません。多くの場合、それはサブディレクトリに __init__.py という名前の空ファイルと共に配置することを意味します。

もし貴方のトレーナーコードが依存としての追加の Python ライブラリを必要としないのであれば、gcloud beta ml jobs submit training はトレーニングコードを自動的にパッケージ化してトレーニングジョブのワーカーに配備します。

もしトレーナーコードが local.tar.gz あるいは .whl Python パッケージファイルとして利用可能な追加の Python ライブラリを必要とするならば、それらのパスを gcloud beta ml jobs submit training –packages フラグを使って指定可能です。

けれども、もしトレーナーコードが PyPi からの追加の Python パッケージを必要とするか、他のカスタムパッケージングを必要とするのであれば、カスタム setup.py ファイルを作成する必要があります。これについては次のセクションで記述されます。

パッケージをカスタマイズする

貴方のプロジェクトのためにカスタム・パッケージ仕様を作成するためには多くの方法があります。Setuptools を使った幾つかの簡単な説明をしておきます。

プロジェクトの root ディレクトリで setup.py という名前のスクリプトを作成します。このファイルに次のコードを入力します :

from setuptools import find_packages
from setuptools import setup

setup(
  name='your package name',
  version='your version number',
  packages=find_packages())

Setuptools のためにはより多くのオプションがあり、それらについては developer’s guide で見つかります。

トレーニング・ジョブを submit するために “gcloud beta ml jobs submit training” を実行する時、–package-path フラグを通常のようにトレーナー・モジュールを含むディレクトリに対してセットします; gcloud はデフォルトパッケージ仕様を使用する代わりに <–package-path>/../setup.py で指定されたようにトレーナー・コードをパッケージ化します。

 

以上

Google Cloud Datalab notebook を GCP で実行

Google Cloud Datalab notebook を GCP で実行

Google Cloud ML の運用に Datalab が推奨されていますので、Docker 環境における導入 : Google Cloud Machine Learning : 入門編 (4) – Datalab とは別に、以下のドキュメントに従って GCE ベースでインストールしてみました :

Run Cloud Datalab notebooks on Google Cloud Platform | Google Cloud Datalab Documentation

本記事では、GCP 上で Cloud Datalab 全体をどのようにセットアップして実行するかを示します。GCP 上で Cloud Datalab を実行すると以下が可能になります :

  • Cloud Platform VM の computing とディスク・リソースが notebook コマンドを実行し迅速に結果を得るために利用できます。
  • Cloud Platform を使用して Google Cloud Strage データに直接アクセスすることによりローカルマシンにデータをダウンロードする時間消費を回避できます。 
  • ローカルマシンに Docker をインストールすることなく Cloud Datalab を実行できます。

始める前に

プロジェクトを選択する

Cloud Datalab notebook を実行するためには GCE API が有効になった GCP プロジェクトが必要です :

gcloud projects list

後で使いますので、選択したプロジェクト ID をメモしておきます。gcloud コマンドをインストールするには Google Cloud SDK をインストールします。

GCP で Compute Engine VM を作成する

1. datalab-network を作成します :

gcloud compute networks create "datalab-network" \
  --project ${PROJECT_ID} \
  --description "Network for Datalab servers"

実行結果です :

Created [https://www.googleapis.com/compute/v1/projects/${PROJECT_ID}/global/networks/datalab-network].
NAME             MODE  IPV4_RANGE  GATEWAY_IPV4
datalab-network  auto

Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running:

$ gcloud compute firewall-rules create <FIREWALL_NAME> --network datalab-network --allow tcp,udp,icmp --source-ranges <IP_RANGE>
$ gcloud compute firewall-rules create <FIREWALL_NAME> --network datalab-network --allow tcp:22,tcp:3389,icmp

2. ネットワークへの SSH アクセスを許可します :

gcloud compute firewall-rules create datalab-network-allow-ssh \
  --project ${PROJECT_ID} \
  --allow tcp:22 \
  --network "datalab-network" \
  --description "Allow SSH access"

実行結果です :

Created [https://www.googleapis.com/compute/v1/projects/${PROJECT_ID/global/firewalls/datalab-network-allow-ssh].
NAME                       NETWORK          SRC_RANGES  RULES   SRC_TAGS  TARGET_TAGS
datalab-network-allow-ssh  datalab-network  0.0.0.0/0   tcp:22

3. Cloud Datalab VM をどのようにセットアップするかを定義する YAML ファイルをダウンロードします :

gsutil cp gs://cloud-datalab/server.yaml ./datalab-server.yaml

4. VM を作成します (ref. Choosing a region and zone) :

gcloud compute instances create "instance-datalab" \
  --project "${PROJECT_ID}" \
  --zone "us-central1-b" \
  --network "datalab-network" \
  --image-family "container-vm" \
  --image-project "google-containers" \
  --metadata "google-container-manifest=$(cat datalab-server.yaml)" \
  --machine-type "n1-highmem-2" \
  --scopes "cloud-platform"

実行結果です :

Created [https://www.googleapis.com/compute/v1/projects/${PROJECT_ID}/zones/us-central1-b/instances/instance-datalab].
NAME              ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
instance-datalab  us-central1-b  n1-highmem-2               10.128.0.2   104.154.18.56  RUNNING

Cloud Datalab に接続するために SSH tunnel を使用する

1. 次のコマンドを実行します :

gcloud compute ssh --quiet \
    --project "${PROJECT_ID}" \
    --zone "us-central1-b" \
    --ssh-flag="-N" \
    --ssh-flag="-L" \
    --ssh-flag="localhost:8081:localhost:8080" \
    "${GUSER}@instance-datalab"

2. Cloud Datalab notebook リストページを開くために、ブラウザを http://localhost:8081 に接続します。

datalab_ml_iris2

 

以上

Google Cloud Machine Learning : 入門編 (4) – Datalab

Google Cloud Machine Learning : 入門編 (4) – Datalab

Google Cloud ML 入門編 (1) では Google Cloud ML パブリック Beta のクライアント環境のセットアップと MNIST のシングル・ワーカー・ジョブの投入までを試しました。
入門編 (2) では Cloud ML の TensorFlow 分散訓練の方法から始めてハイパーパラメータ調整を行ないました。
入門編 (3) では予測 (prediction) を主題として Cloud ML 上で TensorFlow モデルをサービス提供する方法、オンラインとバッチ予測リクエストを実行しました。

本記事 – 入門編 (4) では以下のドキュメントに従って Cloud Datalab を試します :

Developing Machine Learning Using Cloud Datalab | Google Cloud Machine Learning

このドキュメントには Docker コンテナを使用する方法が記述されているのですが、GCE の VM を利用して Datalab を実行する方法も試してみました。

* あくまでベータですので仕様が変更される可能性はありますのでご注意ください

Datalab クイックスタート

Google Cloud Datalab はデータで作業するために、jupyter ベースの対話的な notebook 環境を提供します。Cloud Datalab を Google Cloud Machine Learning と共に作業するために使用することが可能で、機械学習に特に適合するような幾つかのコマンドも用意されています。

開始するためには Cloud Datalab documentation に記述されているようにセットアップする必要があります。

<YOUR-PROJECT-ID> を置き換えて次のコマンドで Cloud Datalab を実行開始できます:

cd ~
mkdir -p datalab
docker run -it -p "127.0.0.1:8081:8080" -v "${HOME}/datalab:/content" \
  -e "PROJECT_ID=" \
  gcr.io/cloud-datalab/datalab:local

Datalab コンテナの実行が成功すれば、ブラウザで localhost:8081 に navigate できます。そのページで /datalab/docs/tutorials/Machine%20Learning において Cloud ML チュートリアル notebook が見つかります。

datalab_ml_iris2

Datalab の Cloud ML 機能は Alpha 版で、活発に更新がかけられています。

GCE の VM 上で動作させるための instructions については、 Google Cloud Datalab documentation を参照してください。

冒頭にも書いたように、GCE の VM を利用して Datalab を実行する方法も試してみました。

Google Cloud Datalab notebook を GCP で実行

 

以上

Google Cloud Machine Learning : 入門編 (3) – 予測

Google Cloud Machine Learning : 入門編 (3) – 予測

Google Cloud ML 入門編 (1) では Google Cloud ML パブリック Beta のクライアント環境のセットアップと MNIST のシングル・ワーカー・ジョブの投入までを試しました。
入門編 (2) では Cloud ML の TensorFlow 分散訓練の方法から始めてハイパーパラメータ調整を行ないました。

本記事 – 入門編 (3) では以下のドキュメントに従って :

Prediction Quickstart | Google Cloud Machine Learning

予測 (prediction) を主題として Cloud ML 上で TensorFlow モデルをサービス提供する方法を扱います。Training クイックスタートでトレーニングしたものと同様なモデルに対してオンラインとバッチ予測リクエストの両方を送ることができます。

* あくまでベータですので仕様が変更される可能性はありますのでご注意ください

Prediction クイックスタート

クラウド上で予測のためにモデルをアップデートする

クラウド上で予測を有効にするためには、Training クイックスタートで使用した TensorFlow MNIST サンプル・コードに小さな変更を行なう必要があります。

これらの変更については Exporting and Deploying Your Model for Prediction how-to に記述されていますが、このクイックスタートのためには既に変更を加えています; 単に作業ディレクトリを ~/google-cloud-ml/samples/mnist/deployable/ に移してください :

cd ~/google-cloud-ml/samples/mnist/deployable/

クラウドでアップデートしたモデルをトレーニングする

最初に、モデルがローカルでトレーニングできることを一応確認しておきます :

# Clear the output from any previous local run.
rm -f data/{checkpoint,events,export}*
# Train locally.
python -m trainer.task

トレーニングの最後に、export された最終的なモデルは data/export と data/export.meta ファイル群に置かれます :

$ ls -1 data/
checkpoint
checkpoint-1999
checkpoint-1999.meta
checkpoint-999
checkpoint-999.meta
eval_sample.tensor.json
events.out.tfevents.1477226741.cs-6860-devshell-vm-e1e01071-54f6-495c-bcec-d79c9d38047f-114
export
export.meta
predict_sample.tensor.json

次に、トレーニング・ジョブのための名前を選択します、e.g. “mnist_deployable_yourusername”.
英字で始まり、英数字とアンダースコアを含みます。

JOB_NAME=<your job name>

そしてトレーニング・スクリプトをクラウドに submit します :

$ PROJECT_ID=`gcloud config list project --format "value(core.project)"`
$ echo $PROJECT_ID
classcat-tensorflow

$ TRAIN_BUCKET=gs://${PROJECT_ID}-ml
$ echo $TRAIN_BUCKET
gs://classcat-tensorflow-ml

$ TRAIN_PATH=${TRAIN_BUCKET}/${JOB_NAME}
$ echo $TRAIN_PATH
gs://classcat-tensorflow-ml/mnist_deployable_classcat

# Clear the output from any previous cloud run.
$ gsutil rm -rf ${TRAIN_PATH}

$gcloud beta ml jobs submit training ${JOB_NAME} \
  --package-path=trainer \
  --module-name=trainer.task \
  --staging-bucket="${TRAIN_BUCKET}" \
  --region=us-central1 \
  -- \
  --train_dir="${TRAIN_PATH}/train" \
  --model_dir="${TRAIN_PATH}/model"

実行直後です :

createTime: '2016-10-23T12:57:33Z'
jobId: mnist_deployable_classcat
state: QUEUED
trainingInput:
  args:
  - --train_dir=gs://classcat-tensorflow-ml/mnist_deployable_classcat/train
  - --model_dir=gs://classcat-tensorflow-ml/mnist_deployable_classcat/model
  packageUris:
  - gs://classcat-tensorflow-ml/cloudmldist/1477227451/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1
masao_cc@classcat-tensorflow:~/google-cloud-ml/samples/mnist/deployable$ gcloud beta ml jobs describe --project ${PROJECT_ID} 
${JOB_NAME}
createTime: '2016-10-23T12:57:33Z'
jobId: mnist_deployable_classcat
state: PREPARING
trainingInput:
  args:
  - --train_dir=gs://classcat-tensorflow-ml/mnist_deployable_classcat/train
  - --model_dir=gs://classcat-tensorflow-ml/mnist_deployable_classcat/model
  packageUris:
  - gs://classcat-tensorflow-ml/cloudmldist/1477227451/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1

最後に、ジョブの進行をチェックして終了を待ちます :

gcloud beta ml jobs describe --project ${PROJECT_ID} ${JOB_NAME}

クラウドにモデルを配備する

最初に、モデルの名前を選択します、e.g. “mnist_yourusername”。
英字で始まり、英数字とアンダースコアを含みます。

MODEL_NAME=<your model name>

そして予測のための Cloud ML モデルとバージョンを作成します :

gcloud beta ml models create ${MODEL_NAME}
gcloud beta ml models versions create \
  --origin=${TRAIN_PATH}/model/ \
  --model=${MODEL_NAME} \
  v1
gcloud beta ml models versions set-default --model=${MODEL_NAME} v1

alternative として、GCP コンソールでもモデルとバージョンを作成できます :

  1. “モデルを作成” をクリックします(または既に一つ以上のモデルがある場合には “+ モデルを作成”)。
  2. モデル名を入力します、 e.g. mnist_yourusername。
  3. “作成” をクリックします。
  4. 新しいモデルの名前をクリックします。
  5. “バージョンを作成する” または “+ バージョンを作成する” をクリックします。
  6. 次の情報を入力します :
    • 名前 : v1
    • ソース : ${TRAIN_PATH}/model/ の値 (ブラウズで選択できます)。
  7. “作成” をクリックします。
  8. モデルバージョン “v1” の隣の「デフォルトに設定」をクリックします(但し、1個だけの時は自動的にデフォルトに設定される感じです)。

クラウドで新しいインスタンスを予測する

これでモデルに予測リクエストを送ることができます。各インスタンスは JSON オブジェクトで、その属性は事前に宣言してあるテンソル・エイリアスです (“image”, “key”)。”image” 属性は float のリストとしての手書き数字画像データ(i.e. モデルに予測させたいもの)を含み、一方で “key” (i.e. JSON ファイルの画像のインデックス)は単一の integer です :

head -n2 data/predict_sample.tensor.json

以下と同様の出力が見れるはずです :

{"image": [0.0,..., 0.0, 0.0], "key": 0}
{"image": [0.0,..., 0.0, 0.0], "key": 1}
オンライン予測サービスを使用する

【注意】Cloud ML オンライン予測サービスは現時点で(製品の他の機能は Beta ですが)Alpha フィーチャーです。オンライン予測は特に制限なく利用可能ですが、Cloud ML の他の機能よりもステーブルではなく信頼性が低いかもしれません。

次のスクリプトはファイルからインスタンスを読んでそれらを Cloud ML オンライン予測サービスに送ります :

gcloud beta ml predict --model=${MODEL_NAME} \
  --instances=data/predict_sample.tensor.json

以下は出力結果です :

predictions:
- key: 0
  prediction: 3
  scores:
  - 0.0203564
  - 0.000128082
  - 0.00255795
  - 0.619445
  - 3.96154e-05
  - 0.335909
  - 0.000672323
  - 0.00473043
  - 0.0136186
  - 0.00254196
- key: 1
  prediction: 0
  scores:
  - 0.997337
  - 7.48403e-09
  - 3.81023e-05
  - 8.05008e-05
  - 3.44861e-07
  - 0.00245502
  - 2.90748e-05
  - 1.94155e-05
  - 3.20863e-05
  - 8.17647e-06
- key: 2
  prediction: 4
  scores:
  - 0.00338854
  - 0.00223743
  - 0.0289303
  - 0.0399133
  - 0.672126
  - 0.0051319
  - 0.0154283
  - 0.0249293
  - 0.0218912
  - 0.186024
- key: 3
  prediction: 1
  scores:
  - 3.44334e-06
  - 0.962688
  - 0.00933552
  - 0.00441769
  - 0.000420508
  - 0.000595645
  - 0.000220079
  - 0.000721661
  - 0.0209434
  - 0.000654054
- key: 4
  prediction: 9
  scores:
  - 1.9798e-05
  - 0.000375617
  - 6.38733e-05
  - 0.000149535
  - 0.100276
  - 0.000647383
  - 0.000101338
  - 0.0209089
  - 0.00366108
  - 0.873796
- key: 5
  prediction: 2
  scores:
  - 0.0048439
  - 0.000105955
  - 0.810874
  - 0.00665644
  - 0.000815119
  - 0.00121918
  - 0.00100165
  - 0.0151151
  - 0.0751259
  - 0.0842431
- key: 6
  prediction: 1
  scores:
  - 5.99334e-08
  - 0.987748
  - 0.00203607
  - 0.00626478
  - 5.05617e-05
  - 0.000297003
  - 6.14583e-05
  - 0.000487078
  - 0.0024817
  - 0.00057279
- key: 7
  prediction: 3
  scores:
  - 0.000191433
  - 1.08367e-06
  - 0.00137237
  - 0.984816
  - 1.26182e-05
  - 0.00102288
  - 6.42889e-07
  - 5.89483e-05
  - 0.0122277
  - 0.000295992
- key: 8
  prediction: 1
  scores:
  - 5.161e-06
  - 0.971483
  - 0.00174534
  - 0.00532335
  - 0.000445978
  - 0.00363754
  - 0.000348157
  - 0.00521967
  - 0.00764051
  - 0.00415152
- key: 9
  prediction: 4
  scores:
  - 0.000359493
  - 0.000114784
  - 0.000876791
  - 0.000155708
  - 0.95885
  - 0.00325834
  - 0.0195464
  - 0.00022779
  - 0.00797938
  - 0.00863121

 

バッチ予測サービスを使用する

Cloud ML バッチ予測サービスも使用できます。

最初に、バッチ予測ジョブのための名前を選択します、”predict_mnist_yourusername”。
英文字から始まり英数字とアンダースコアを含みます。

JOB_NAME=<your job name>

次に、バッチ予測ジョブを submit します :

gsutil cp data/predict_sample.tensor.json ${TRAIN_PATH}/data/
gcloud beta ml jobs submit prediction ${JOB_NAME} \
    --model=${MODEL_NAME} \
    --data-format=TEXT \
    --input-paths=${TRAIN_PATH}/data/predict_sample.tensor.json \
    --output-path=${TRAIN_PATH}/output \
    --region=us-central1

実行直後 :

createTime: '2016-10-23T13:20:35Z'
jobId: predict_mnist_classcat
predictionInput:
  dataFormat: TEXT
  inputPaths:
  - gs://classcat-tensorflow-ml/mnist_deployable_classcat/data/predict_sample.tensor.json
  modelName: projects/classcat-tensorflow/models/mnist_classcat
  outputPath: gs://classcat-tensorflow-ml/mnist_deployable_classcat/output
  region: us-central1
predictionOutput:
  outputPath: gs://classcat-tensorflow-ml/mnist_deployable_classcat/output
state: QUEUED

実行中 :

$ gcloud beta ml jobs describe --project ${PROJECT_ID} ${JOB_NAME}
createTime: '2016-10-23T13:20:35Z'
jobId: predict_mnist_classcat
predictionInput:
  dataFormat: TEXT
  inputPaths:
  - gs://classcat-tensorflow-ml/mnist_deployable_classcat/data/predict_sample.tensor.json
  modelName: projects/classcat-tensorflow/models/mnist_classcat
  outputPath: gs://classcat-tensorflow-ml/mnist_deployable_classcat/output
  region: us-central1
predictionOutput:
  outputPath: gs://classcat-tensorflow-ml/mnist_deployable_classcat/output
startTime: '2016-10-23T13:20:35Z'
state: RUNNING

終了を待ちます :

gcloud beta ml jobs describe --project ${PROJECT_ID} ${JOB_NAME}

最終的に、出力を読みます :

gsutil cat ${TRAIN_PATH}/output/prediction.results-00000-of-00001

以下は実際に確認できた出力です :

$ gsutil cat ${TRAIN_PATH}/output/prediction.results-00
000-of-00001
{u'prediction': 3, u'key': 0, u'scores': [0.020356435328722, 0.00012808165047317743, 0.002557950560003519, 0.6194452047348022,
 3.9615388232050464e-05, 0.3359093964099884, 0.0006723233964294195, 0.004730433691293001, 0.013618593104183674, 0.002541961381
211877]}
{u'prediction': 0, u'key': 1, u'scores': [0.9973371624946594, 7.484025843496056e-09, 3.8102345570223406e-05, 8.05008239694871e
-05, 3.4486083677620627e-07, 0.0024550205562263727, 2.9074832127662376e-05, 1.9415505448705517e-05, 3.208634370821528e-05, 8.1
76466508302838e-06]}
{u'prediction': 4, u'key': 2, u'scores': [0.003388544311746955, 0.0022374324034899473, 0.028930312022566795, 0.039913255721330
64, 0.6721255779266357, 0.005131898447871208, 0.015428278595209122, 0.024929305538535118, 0.02189120277762413, 0.1860242187976
8372]}
{u'prediction': 1, u'key': 3, u'scores': [3.443341711317771e-06, 0.9626880884170532, 0.009335516951978207, 0.00441769091412425
, 0.0004205082659609616, 0.0005956447566859424, 0.00022007898951414973, 0.0007216611411422491, 0.020943380892276764, 0.0006540
539907291532]}
{u'prediction': 9, u'key': 4, u'scores': [1.979799708351493e-05, 0.0003756166552193463, 6.387331086443737e-05, 0.0001495352771
5988457, 0.10027632117271423, 0.0006473834509961307, 0.00010133774776477367, 0.020908894017338753, 0.003661080962046981, 0.873
7961053848267]}
{u'prediction': 2, u'key': 5, u'scores': [0.004843897186219692, 0.00010595522326184437, 0.8108737468719482, 0.0066564441658556
46, 0.000815118954051286, 0.0012191830901429057, 0.0010016539599746466, 0.01511511579155922, 0.07512589544057846, 0.0842430591
583252]}
{u'prediction': 1, u'key': 6, u'scores': [5.993342000465418e-08, 0.9877484440803528, 0.0020360725466161966, 0.0062647750601172
45, 5.056171357864514e-05, 0.0002970028144773096, 6.145832594484091e-05, 0.0004870775737799704, 0.002481696894392371, 0.000572
7899260818958]}
{u'prediction': 3, u'key': 7, u'scores': [0.00019143284589517862, 1.0836668025149265e-06, 0.0013723709853366017, 0.98481637239
45618, 1.2618214896065183e-05, 0.0010228765895590186, 6.428894607779512e-07, 5.8948346122633666e-05, 0.012227668426930904, 0.0
002959921257570386]}
{u'prediction': 1, u'key': 8, u'scores': [5.1609990805445705e-06, 0.9714827537536621, 0.0017453399486839771, 0.005323346704244
614, 0.00044597769738174975, 0.0036375385243445635, 0.0003481570165604353, 0.005219669546931982, 0.007640512194484472, 0.00415
1524044573307]}
{u'prediction': 4, u'key': 9, u'scores': [0.000359493336873129, 0.00011478372471174225, 0.0008767909603193402, 0.0001557076757
3080957, 0.9588501453399658, 0.00325834471732378, 0.0195463877171278, 0.00022778974380344152, 0.00797937996685505, 0.008631209
842860699]}

前述のオンライン予測サービスと比較すると、このサービスは :

  • インスタンスの小さい数に対してはより遅いです(しかし大量のインスタンスに対してはより適しています)。
  • 入力とは異なる順序で出力が返されるかもしれません。
 

以上

Google Cloud Machine Learning : 入門編 (2) – 分散訓練 & ハイパーパラメータ調整

Google Cloud Machine Learning : 入門編 (2) – 分散訓練 & ハイパーパラメータ調整

Google Cloud ML 入門編 (1) の続編です。先の入門編 (1) では Google Cloud ML パブリック Beta のクライアント環境のセットアップと MNIST のシングル・ワーカー・ジョブの投入までを試しました。

本記事 – 入門編 (2) では Cloud ML の TensorFlow 分散訓練の方法から始めてハイパーパラメータ調整を行ないます。予備知識として TensorFlow : How To : 分散 TensorFlow に目を通しておくと良いでしょう。

* あくまでベータですので仕様が変更される可能性はありますのでご注意ください

(続) Training クイックスタート

クラウド上でトレーニングする : 分散

Training Quickstart の以下の項目から始めます :

Train on the cloud: distributed | Training Quickstart | Google Cloud Machine Learning

Cloud ML においてマルチワーカー上で TensorFlow モデルのトレーニング・ジョブを実行することはシングル・ワーカー上と殆ど同じくらい簡単です。先に利用した TensorFlow MNIST サンプルはシングル・ワーカー上でのトレーニングのみが可能ですが、TensorFlow : How To : 分散 TensorFlow でアドバイスされている方法によって分散トレーニングを可能にするため、アップデートします。

備考 : Cloud ML のオンライン & バッチ予測サービスをサポートするためにもまたサンプルをアップデートしています。これらについては( Prediction Quickstart のために)予測サービスに配備するモデルを保存することになります。

アップデートされたコードは以下で見つかります :

cd ~/google-cloud-ml/samples/mnist/distributed/

 

トレーニング・コードをローカルでテストする

最初に、モデルが(シングル・ワーカー上)ローカルでトレーニングできることを確認します :

# 以前のローカル実行からの出力をクリア
rm -rf output/
# ローカルでトレーニング
python -m trainer.task \
  --train_data_paths=gs://cloud-ml-data/mnist/train.tfr.gz \
  --eval_data_paths=gs://cloud-ml-data/mnist/eval.tfr.gz \
  --output_path=output

以下は実行結果の一部です(実際はかなり長いです) :

$ python -m trainer.task \
> --train_data_paths=gs://cloud-ml-data/mnist/train.tfr.gz \
> --eval_data_paths=gs://cloud-ml-data/mnist/eval.tfr.gz \
> --output_path=output
INFO:root:Original job data: {}
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:root:Train [master/0], step 1: loss: 2.312, accuracy: 0.040 (0.126 sec) 7.9 global steps/s, 7.9 local steps/s
INFO:root:Eval, step 1: loss: 2.298, accuracy: 0.094
INFO:root:Train [master/0], step 145: loss: 1.997, accuracy: 0.386 (3.407 sec) 43.9 global steps/s, 43.9 local steps/s
INFO:root:Eval, step 145: loss: 1.683, accuracy: 0.550
INFO:root:Adjusting eval interval from 1.00s to 1.39s
INFO:root:Train [master/0], step 288: loss: 1.697, accuracy: 0.528 (5.804 sec) 59.7 global steps/s, 59.7 local steps/s
INFO:root:Train [master/0], step 341: loss: 1.592, accuracy: 0.569 (6.189 sec) 137.6 global steps/s, 137.6 local steps/s
INFO:root:Eval, step 341: loss: 0.908, accuracy: 0.816
INFO:root:Train [master/0], step 482: loss: 1.362, accuracy: 0.642 (8.503 sec) 60.9 global steps/s, 60.9 local steps/s
INFO:root:Train [master/0], step 536: loss: 1.286, accuracy: 0.665 (8.889 sec) 140.1 global steps/s, 140.1 local steps/s
INFO:root:Eval, step 536: loss: 0.601, accuracy: 0.857

(... 略 ...)

INFO:root:Train [master/0], step 4908: loss: 0.428, accuracy: 0.882 (245.001 sec) 26.9 global steps/s, 26.9 local steps/s
INFO:root:Train [master/0], step 4934: loss: 0.427, accuracy: 0.882 (246.208 sec) 21.5 global steps/s, 21.5 local steps/s
INFO:root:Train [master/0], step 4944: loss: 0.427, accuracy: 0.883 (246.484 sec) 36.3 global steps/s, 36.3 local steps/s
INFO:root:Eval, step 4944: loss: 0.236, accuracy: 0.935
INFO:root:Train [master/0], step 4969: loss: 0.426, accuracy: 0.883 (253.471 sec) 3.6 global steps/s, 3.6 local steps/s
INFO:root:Train [master/0], step 4991: loss: 0.425, accuracy: 0.883 (254.472 sec) 22.0 global steps/s, 22.0 local steps/s
INFO:root:Exporting prediction graph to output/model
INFO:root:Final metrics after 5000 steps, loss: 0.236, accuracy: 0.934

 

トレーニング・ジョブを submit する

トレーニング・ジョブのための名前を選択します、e.g. “mnist_distributed_yourusername”。
英字で始まり英数字とアンダースコアのみを含めることができます。

JOB_NAME=<your job name>

以前のクラウド実行からの出力をクリアしておきます :

PROJECT_ID=`gcloud config list project --format "value(core.project)"`
TRAIN_BUCKET=gs://${PROJECT_ID}-ml
TRAIN_PATH=${TRAIN_BUCKET}/${JOB_NAME}
gsutil rm -rf ${TRAIN_PATH}

単純な config ファイルを作成します、これは Cloud ML STANDARD_1 scale tier(= 多くのワーカーと2、3 (= a few) のパラメータ・サーバ)を指定するものです :

cat << EOF > config.yaml
trainingInput:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: STANDARD_1
EOF

そして最後にトレーニング・ジョブを submit します :

gcloud beta ml jobs submit training ${JOB_NAME} \
  --package-path=trainer \
  --module-name=trainer.task \
  --staging-bucket="${TRAIN_BUCKET}" \
  --region=us-central1 \
  --config=config.yaml \
  -- \
  --train_data_paths="gs://cloud-ml-data/mnist/train.tfr.gz" \
  --eval_data_paths="gs://cloud-ml-data/mnist/eval.tfr.gz" \
  --output_path="${TRAIN_PATH}/output"

実際に実行してみます :

$ gcloud beta ml jobs submit training ${JOB_NAME} \
>   --package-path=trainer \
>   --module-name=trainer.task \
>   --staging-bucket="${TRAIN_BUCKET}" \
>   --region=us-central1 \
>   --config=config.yaml \
>   -- \
>   --train_data_paths="gs://cloud-ml-data/mnist/train.tfr.gz" \
>   --eval_data_paths="gs://cloud-ml-data/mnist/eval.tfr.gz" \
>   --output_path="${TRAIN_PATH}/output"
createTime: '2016-10-17T09:05:49Z'
jobId: mnist_distributed_classcat
state: QUEUED
trainingInput:
  args:
  - --train_data_paths=gs://cloud-ml-data/mnist/train.tfr.gz
  - --eval_data_paths=gs://cloud-ml-data/mnist/eval.tfr.gz
  - --output_path=gs://classcat-tensorflow-ml/mnist_distributed_classcat/output
  packageUris:
  - gs://classcat-tensorflow-ml/cloudmldist/1476695147/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1
  scaleTier: STANDARD_1

ステータス確認。もちろん Cloud Platform コンソールからも確認できます :

$ gcloud beta ml jobs describe --project ${PROJECT_ID} ${JOB_NAME}
createTime: '2016-10-17T09:05:49Z'
jobId: mnist_distributed_classcat
startTime: '2016-10-17T09:06:25Z'
state: RUNNING
trainingInput:
  args:
  - --train_data_paths=gs://cloud-ml-data/mnist/train.tfr.gz
  - --eval_data_paths=gs://cloud-ml-data/mnist/eval.tfr.gz
  - --output_path=gs://classcat-tensorflow-ml/mnist_distributed_classcat/output
  packageUris:
  - gs://classcat-tensorflow-ml/cloudmldist/1476695147/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1
  scaleTier: STANDARD_1

成功しました :

$ gcloud beta ml jobs describe --project ${PROJECT_ID} ${JOB_NAME}
createTime: '2016-10-17T09:05:49Z'
endTime: '2016-10-17T09:13:17Z'
jobId: mnist_distributed_classcat
startTime: '2016-10-17T09:06:25Z'
state: SUCCEEDED
trainingInput:
  args:
  - --train_data_paths=gs://cloud-ml-data/mnist/train.tfr.gz
  - --eval_data_paths=gs://cloud-ml-data/mnist/eval.tfr.gz
  - --output_path=gs://classcat-tensorflow-ml/mnist_distributed_classcat/output
  packageUris:
  - gs://classcat-tensorflow-ml/cloudmldist/1476695147/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1
  scaleTier: STANDARD_1

 

出力を inspect する

この例では出力は ${TRAIN_PATH}/output に保存されていますので、リストを取るには ”
gsutil ls ${TRAIN_PATH}/output” を実行します :

$ gsutil ls $TRAIN_PATH/output
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/checkpoint
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695558.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695559.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695560.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695562.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695564.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695566.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695568.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695571.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695573.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695575.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695578.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695580.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695583.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/events.out.tfevents.1476695585.master-63d9-0-ytvx3
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/export
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/export.meta
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/graph.pbtxt
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/model.ckpt-2496
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/model.ckpt-2496.meta
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/model.ckpt-3117
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/model.ckpt-3117.meta
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/model.ckpt-4018
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/model.ckpt-4018.meta
gs://classcat-tensorflow-ml/mnist_distributed_classcat/output/model.ckpt-5006

 

Stackdriver ログを inspect する

マルチ・ワーカー上でモデルがトレーニングされたことを確認するために Stackdriver ロギングが使用できます。

ジョブのログを見つける最も簡単な方法は(シングル・ワーカー上の場合と同じように)Cloud Platform コンソールで「ログを表示」をクリックすることです。「すべてのログ」ドロップダウンの中から master-replica-0 をクリックすると、以下のようなログが閲覧できます :
gcml_distributed_log_master0b

次に master-replicat-0 の代わりに worker-replica-0 を選択すると、次のようなログが閲覧できます :
gcml_distributed_log_worker0b

alternative として、コマンドライン上でもログを読むことができます :

gcloud beta logging read --project ${PROJECT_ID} --format=json \
  "labels.\"ml.googleapis.com/task_name\"=\"master-replica-0\" AND \
   labels.\"ml.googleapis.com/job_id\"=\"${JOB_NAME}\""

以下は実行例です :

$ gcloud beta logging read --project ${PROJECT_ID} --format=json   "labels.\"ml.googleapis
.com/task_name\"=\"master-replica-0\" AND \
   labels.\"ml.googleapis.com/job_id\"=\"${JOB_NAME}\"" | head -40
[
  {
    "insertId": "15cxtb6f1ae12i",
    "jsonPayload": {
      "created": 1476695587.16638,
      "levelname": "INFO",
      "lineno": 690,
      "message": "Task completed successfully.",
      "pathname": "/runcloudml.py"
    },
    "labels": {
      "compute.googleapis.com/resource_id": "6857495858232852682",
      "compute.googleapis.com/resource_name": "master-63d9-0-ytvx3",
      "compute.googleapis.com/resource_type": "instance",
      "ml.googleapis.com/job_id": "mnist_distributed_classcat",
      "ml.googleapis.com/job_id/log_area": "root",
      "ml.googleapis.com/task_name": "master-replica-0",
      "ml.googleapis.com/trial_id": ""
    },
    "logName": "projects/classcat-tensorflow/logs/master-replica-0",
    "resource": {
      "labels": {
        "job_id": "mnist_distributed_classcat",
        "task_name": "master-replica-0"
      },
      "type": "ml_job"
    },
    "severity": "INFO",
    "timestamp": "2016-10-17T09:13:07.166379928Z"
  },
  {
    "insertId": "15cxtb6f1ae12h",
    "jsonPayload": {
      "created": 1476695587.16607,
      "levelname": "INFO",
      "lineno": 688,
      "message": "Clean up finished.",
      "pathname": "/runcloudml.py"
    },
    "labels": {

 

要約ログを inspect する

この例のために TensorBoard を実行するには、”–logdir=${TRAIN_PATH}/output” を指定すれば良いです :

$ echo ${TRAIN_PATH}
gs://classcat-tensorflow-ml/mnist_distributed_classcat
$ tensorboard --logdir=${TRAIN_PATH}/output --port 8080

以下は損失グラフ :
gcml_distributed_tb_loss2

そして精度グラフです :
gcml_distributed_tb_accu2

 

クラウド上でトレーニングする : ハイパーパラメータ調整

最後に、(この場合は)以下のより良い値を自動的に見つけることによりモデル精度をあげるためにハイパーパラメータ調整を利用できます :

  • 2つの隠れ層のサイズ
  • 学習率

ハイパーパラメータ調整を有効にするためには、前のセクションで使用したサンプルコードに小さな変更を行なう必要があります。興味があれば、これらの変更は Increasing Model Accuracy with Hyperparameter Tuning how-to に記述されていますが、このクイックスタートのためには既に変更を行なっています; 単に作業ディレクトリを ~/google-cloud-ml/samples/mnist/hptuning/ に移してください :

cd ~/google-cloud-ml/samples/mnist/hptuning/

 

トレーニング・コードをローカルでテストする

最初に、モデルを(ハイパーパラメータ調整なし、シングルワーカー上の)ローカルでトレーニング可能なことを確認します :

# Clear the output from any previous local run.
rm -rf output/
# Train locally.
python -m trainer.task \
  --train_data_paths=gs://cloud-ml-data/mnist/train.tfr.gz \
  --eval_data_paths=gs://cloud-ml-data/mnist/eval.tfr.gz \
  --output_path=output

上記の分散トレーニングのためのローカル実行からの出力と同様の出力を見るはずです。
実際の出力は以下のような感じです :

INFO:root:Original job data: {}
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:root:Train [master/0], step 1: loss: 2.322, accuracy: 0.100 (0.117 sec) 8.5 global steps/s, 8.5 local steps/s
INFO:root:Eval, step 1: loss: 2.312, accuracy: 0.108
INFO:root:Train [master/0], step 1352: loss: 0.973, accuracy: 0.742 (12.467 sec) 109.4 global steps/s, 109.4 local steps/s
INFO:root:Eval, step 1352: loss: 0.593, accuracy: 0.846
INFO:root:Train [master/0], step 2626: loss: 0.775, accuracy: 0.801 (24.021 sec) 110.3 global steps/s, 110.3 local steps/s
INFO:root:Eval, step 2626: loss: 0.512, accuracy: 0.887
INFO:root:Train [master/0], step 3914: loss: 0.687, accuracy: 0.830 (35.433 sec) 112.9 global steps/s, 112.9 local steps/s
INFO:root:Eval, step 3914: loss: 0.479, accuracy: 0.899
INFO:root:Exporting prediction graph to output/model
INFO:root:Final metrics after 5000 steps, loss: 0.455, accuracy: 0.908

 

トレーニング・ジョブを submit する

トレーニング・ジョブのための名前を選択します、e.g. “mnist_hptuning_yourusername”。
英字から始まり英数字とアンダースコアを含みます。

JOB_NAME=<your job name>

以前のクラウド実行からの出力をクリアしておきます :

PROJECT_ID=`gcloud config list project --format "value(core.project)"`
TRAIN_BUCKET=gs://${PROJECT_ID}-ml  # gs://ccml-beta-ml
TRAIN_PATH=${TRAIN_BUCKET}/${JOB_NAME}  # gs://ccml-beta-ml/mnist_hptunint_classcat
gsutil rm -rf ${TRAIN_PATH}

最適化したい ハイパーパラメータscale tier を指定する config ファイルを作成します :

cat << EOF > config.yaml
trainingInput:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: STANDARD_1
  # Hyperparameter-tuning specification.
  hyperparameters:
    # Maximize the objective value.
    goal: MAXIMIZE
    # Run at most 10 trials with different hyperparameters.
    maxTrials: 10
    # Run two trials at a time.
    maxParallelTrials: 2
    params:
      # Allow the size of the first hidden layer to vary between 40 and 400.
      # One value in this range will be passed to each trial via the
      # --hidden1 command-line flag.
      - parameterName: hidden1
        type: INTEGER
        minValue: 40
        maxValue: 400
        scaleType: UNIT_LINEAR_SCALE
      # Allow the size of the second hidden layer to vary between 5 and 250.
      # One value in this range will be passed to each trial via the
      # --hidden2 command-line flag.
      - parameterName: hidden2
        type: INTEGER
        minValue: 5
        maxValue: 250
        scaleType: UNIT_LINEAR_SCALE
      # Allow the learning rate to vary between 0.0001 and 0.5.
      # One value in this range will be passed to each trial via the
      # --learning_rate command-line flag.
      - parameterName: learning_rate
        type: DOUBLE
        minValue: 0.0001
        maxValue: 0.5
        scaleType: UNIT_LOG_SCALE
EOF

最後に、トレーニング・ジョブを submit します :

gcloud beta ml jobs submit training ${JOB_NAME} \
  --package-path=trainer \
  --module-name=trainer.task \
  --staging-bucket="${TRAIN_BUCKET}" \
  --region=us-central1 \
  --config=config.yaml \
  -- \
  --train_data_paths="gs://cloud-ml-data/mnist/train.tfr.gz" \
  --eval_data_paths="gs://cloud-ml-data/mnist/eval.tfr.gz" \
  --output_path="${TRAIN_PATH}/output"

このコマンドは、ハイパーパラメータ調整の指定を追加した点を除けば、上述の分散トレーニングのために使ったものと同じです。

実行直後です :

createTime: '2016-10-22T14:03:36Z'
jobId: mnist_hptunint_classcat
state: QUEUED
trainingInput:
  args:
  - --train_data_paths=gs://cloud-ml-data/mnist/train.tfr.gz
  - --eval_data_paths=gs://cloud-ml-data/mnist/eval.tfr.gz
  - --output_path=gs://ccml-beta-ml/mnist_hptunint_classcat/output
  hyperparameters:
    goal: MAXIMIZE
    maxParallelTrials: 2
    maxTrials: 10
    params:
    - maxValue: 400.0
      minValue: 40.0
      parameterName: hidden1
      scaleType: UNIT_LINEAR_SCALE
      type: INTEGER
    - maxValue: 250.0
      minValue: 5.0
      parameterName: hidden2
      scaleType: UNIT_LINEAR_SCALE
      type: INTEGER
    - maxValue: 0.5
      minValue: 0.0001
      parameterName: learning_rate
      scaleType: UNIT_LOG_SCALE
      type: DOUBLE
  packageUris:
  - gs://ccml-beta-ml/cloudmldist/1477145014/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1
  scaleTier: STANDARD_1

 

トレーニング・ジョブの終了を待つ

ジョブの進行をチェックして終了することを待ちます :

gcloud beta ml jobs describe --project ${PROJECT_ID} ${JOB_NAME}

ジョブが完了すればステート SUCCEEDED が確認できます。
ドキュメントにはおよそ 20 分かかるとありましたが、実際のジョブ実行時間は 27 分かかりました。以下は成功後の出力です :

$ gcloud beta ml jobs describe --project ${PROJECT_ID} ${JOB_NAME}
createTime: '2016-10-22T14:03:36Z'
endTime: '2016-10-22T14:30:40Z'
jobId: mnist_hptunint_classcat
startTime: '2016-10-22T14:03:38Z'
state: SUCCEEDED
trainingInput:
  args:
  - --train_data_paths=gs://cloud-ml-data/mnist/train.tfr.gz
  - --eval_data_paths=gs://cloud-ml-data/mnist/eval.tfr.gz
  - --output_path=gs://ccml-beta-ml/mnist_hptunint_classcat/output
  hyperparameters:
    goal: MAXIMIZE
    maxParallelTrials: 2
    maxTrials: 10
    params:
    - maxValue: 400.0
      minValue: 40.0
      parameterName: hidden1
      scaleType: UNIT_LINEAR_SCALE
      type: INTEGER
    - maxValue: 250.0
      minValue: 5.0
      parameterName: hidden2
      scaleType: UNIT_LINEAR_SCALE
      type: INTEGER
    - maxValue: 0.5
      minValue: 0.0001
      parameterName: learning_rate
      scaleType: UNIT_LOG_SCALE
      type: DOUBLE
  packageUris:
  - gs://ccml-beta-ml/cloudmldist/1477145014/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1
  scaleTier: STANDARD_1
trainingOutput:
  completedTrialCount: '10'
  trials:
  - finalMetric:
      objectiveValue: 1.0
      trainingStep: '801'
    hyperparameters:
      hidden1: '400'
      hidden2: '243'
      learning_rate: '0.35743598509131963'
    trialId: '2'
  - finalMetric:
      objectiveValue: 1.0
      trainingStep: '155'
    hyperparameters:
      hidden1: '400'
      hidden2: '78'
      learning_rate: '0.46075871302559684'
    trialId: '4'
  - finalMetric:
      objectiveValue: 1.0
      trainingStep: '59'
    hyperparameters:
      hidden1: '318'
      hidden2: '156'
      learning_rate: '0.49635208597915981'
    trialId: '7'
  - finalMetric:
      objectiveValue: 1.0
      trainingStep: '77'
    hyperparameters:
      hidden1: '400'
      hidden2: '171'
      learning_rate: '0.40330855230836954'
    trialId: '9'
  - finalMetric:
      objectiveValue: 0.9635
      trainingStep: '57'
    hyperparameters:
      hidden1: '202'
      hidden2: '250'
      learning_rate: '0.062366331313038155'
    trialId: '10'
  - finalMetric:
      objectiveValue: 0.9632
      trainingStep: '53'
    hyperparameters:
      hidden1: '400'
      hidden2: '199'
      learning_rate: '0.028588163150300036'
    trialId: '5'
  - finalMetric:
      objectiveValue: 0.9573
      trainingStep: '65'
    hyperparameters:
      hidden1: '169'
      hidden2: '24'
      learning_rate: '0.47690789477002721'
    trialId: '8'
  - finalMetric:
      objectiveValue: 0.9515
      trainingStep: '47'
    hyperparameters:
      hidden1: '68'
      hidden2: '175'
      learning_rate: '0.49684846231717211'
    trialId: '6'
  - finalMetric:
      objectiveValue: 0.7194
      trainingStep: '687'
    hyperparameters:
      hidden1: '134'
      hidden2: '87'
      learning_rate: '0.000949340820855901'
    trialId: '1'
  - finalMetric:
      objectiveValue: 0.3354
      trainingStep: '254'
    hyperparameters:
      hidden1: '399'
      hidden2: '19'
      learning_rate: '0.00010892698020942698'
    trialId: '3'

この出力は 10 試行の各々に使用されたハイパーパラメータと、目的値 (= objective value) (この場合は精度)を含みます。目的値によりソートされています。

 

出力を inspect する

このサンプルでは、出力は ${TRAIN_PATH}/output に保存されます :

gsutil ls ${TRAIN_PATH}/output

各試行のための 10 個の出力ディレクトリが見てとれます :

$ gsutil ls ${TRAIN_PATH}/output/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/1/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/2/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/3/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/4/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/5/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/6/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/7/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/8/
gs://ccml-beta-ml/mnist_hptunint_classcat/output/9/

$ gsutil ls ${TRAIN_PATH}/output/10
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/checkpoint
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/events.out.tfevents.1477146511.master-f3ea-0-5rb4e
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/events.out.tfevents.1477146512.master-f3ea-0-5rb4e
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/events.out.tfevents.1477146523.master-f3ea-0-5rb4e
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/events.out.tfevents.1477146524.master-f3ea-0-5rb4e
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/events.out.tfevents.1477146534.master-f3ea-0-5rb4e
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/events.out.tfevents.1477146535.master-f3ea-0-5rb4e
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/export
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/export.meta
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/graph.pbtxt
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/model.ckpt-1
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/model.ckpt-1.meta
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/model.ckpt-1771
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/model.ckpt-1771.meta
gs://ccml-beta-ml/mnist_hptunint_classcat/output/10/model.ckpt-5007

 

要約ログを inspect する

例えば –logdir=${TRAIN_PATH}/output/1 で TensorBoard が利用できます。
以下はまとめて閲覧したところです :

gcml_hyperparameter_tuning0

gcml_hyperparameter_tuning0b

以下は結果の良かった Id 2 のグラフです :

gcml_hyperparameter_tuning2b

 

ここまでで Training クイックスタートを通して動作確認したことになります。

 

以上

Google Cloud Machine Learning : 入門編 (1)

Google Cloud Machine Learning : 入門編 (1)

Google Cloud Machine Learning がパブリック・ベータになった旨のお知らせを頂きましたのでさっそく試してみました。サービスの概要は以下に記されています :

Google Cloud Big Data and Machine Learning Blog

要約すれば、Google Cloud Machine Learning は GCP (Google Cloud Platform) と統合され、Google Cloud Dataflow、BigQuery、Cloud Storage そして Cloud Datalab のようなクラウド・コンピューティング・ツールと TensorFlow に渡るリッチな環境をスケールして作成可能なフルマネージドサービスになります。
また、新しい特徴として HyperTune があります。これは自動的に予測精度を改善します。モデルのための値を手動で発見する代わりに自動的にハイパーパラメータを調整することにより、より高性能なモデルを構築することを可能にします。

本記事では Getting Started – 入門編として、導入及びシンプルなジョブを投入するまでを簡単にまとめておきます。文章やスナップショットを混えると長く感じますが、実際の作業量は少なく、慣れてしまえば非常に簡単です。

クライアント環境は Ubuntu 14.04 LTS ですが、今回は Chrome から Cloud Shell 経由で接続していますので、他の OS でもおそらく同様に試せるかと思います。

* あくまでベータですので仕様が変更される可能性はありますのでご注意ください

セットアップする

セットアップは順を追って説明しますが、基本的に以下のドキュメントに従って行えば良いです。作業量も大した量ではありません :

Getting Set Up | Google Cloud Machine Learning

Google Cloud プロジェクトを設定する

まず準備としてプロジェクトを選択または作成して、以下の API を有効にします :

Cloud Machine Learning, Cloud Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Cloud Storage JSON, そして BigQuery APIs.

 
API を有効にするには上の “Gettng Set Up” ページで “Enable the APIs” ボタンをクリックすれば簡単です。

環境をセットアップする

クライアント環境については 1) Cloud Shell 2) Docker コンテナ 3) ローカル Mac/Linux から選択できますが、Docker をインストールしていないのであれば “Cloud Shell” を選択しましょうと指示されていますので、取り敢えず 1) の Cloud Shell で試してみます。

Cloud Shell はどのソフトウェアのインストールも必要なく Cloud ML を最速で試すことができる方法で、すべての変更は Cloud Shell 仮想マシンに隔離されます。それらの変更を失うことなく切断可能、そして後で再接続できます。(Getting Set Up から抜粋)

【手順】

  1. Cloud Shell を開始し、以下の全てのコマンドを shell 上で実行します。
    * Cloud Shell の開始は簡単で、”Google Cloud Platform Console” の最上部の “Google Cloud Shell を有効にする” ボタンをクリックするだけです。
    * Debian Jessie の f1-micro インスタンスが起動し、bash が使えますので特に迷うことはないでしょう。

    gcml_cloud_shell

  2. 必要なツールとその依存をインストールするために以下を実行します :
    curl https://storage.googleapis.com/cloud-ml/scripts/setup_cloud_shell.sh | bash
    

    numpy, pandas, scikit-learn のような定番ライブラリとともに tensorflow がインストールされ、およそ 5 分でインストール完了です。tensorflow のバージョンは現時点 (10/16/2016) での最新版 0.11.0 rc0 です。

  3. 新しくインストールされたツールを PATH に追加とありますが、実際には .bashrc に追記されます :
    export PATH=${HOME}/.local/bin:${PATH}
    
  4. 以下でインストールされた環境の検証ができます :
    curl https://storage.googleapis.com/cloud-ml/scripts/check_environment.py | python
    

    “Success! Your environment is configured correctly.” と表示されれば O.K. です。

Cloud ML プロジェクトを初期化する

Cloud ML サービス・アカウントに Google Cloud プロジェクトのリソースへのアクセスを許可します :

gcloud beta ml init-project

Cloud Storage バケットを設定する

Cloud ML サービスは、モデル訓練とバッチ予測の間、データを読み書きするために Cloud Storage にアクセスする必要があります。
* 以下の例では us-central1 リージョンを使っていますが、Cloud ML ジョブを走らせるのと同じリージョンを使います。

[手順]

  1. 新しいバケットのために名前を設定します。名前は何でも良いのでしょうけど、ドキュメントでは “プロジェクト名+ml” が例としてあげられています :
    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-ml
    
  2. 新しいバケットを作成します :
    gsutil mb -l us-central1 gs://$BUCKET_NAME
    

Training クイックスタート

セットアップが完了したので、具体的な training を試すことができます。以下のドキュメントに従って試していきます :

Training Quickstart | Google Cloud Machine Learning

ローカルで訓練する

一般的な開発ワークフローとして、最初に(small dataset で)ローカルで実行することが推奨されています。これはコードが正常に動作し、期待する結果を生成することを保証してくれます。

サンプルは例によって MNIST で取り敢えず以下に移動します、コード自体は trainer/task.py で見つかります :

cd ~/google-cloud-ml/samples/mnist/trainable/
訓練を実行する

ローカルで訓練コードを実行してみます、MNIST 訓練データは自動的にダウンロードされます :

# ローカルで訓練
python -m trainer.task

特に問題なく訓練終了です :

$ python -m trainer.task
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting /tmp/tmp7Vv8ZD/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting /tmp/tmp7Vv8ZD/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting /tmp/tmp7Vv8ZD/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting /tmp/tmp7Vv8ZD/t10k-labels-idx1-ubyte.gz
Step 0: loss = 2.31 (0.112 sec)
Step 100: loss = 2.18 (0.005 sec)
Step 200: loss = 1.92 (0.004 sec)
Step 300: loss = 1.59 (0.005 sec)
Step 400: loss = 1.33 (0.005 sec)
Step 500: loss = 0.88 (0.004 sec)
Step 600: loss = 0.76 (0.005 sec)
Step 700: loss = 0.72 (0.005 sec)
Step 800: loss = 0.75 (0.005 sec)
Step 900: loss = 0.46 (0.004 sec)
Training Data Eval:
  Num examples: 55000  Num correct: 46859  Precision @ 1: 0.8520
Validation Data Eval:
  Num examples: 5000  Num correct: 4324  Precision @ 1: 0.8648
Test Data Eval:
  Num examples: 10000  Num correct: 8635  Precision @ 1: 0.8635
Step 1000: loss = 0.54 (0.038 sec)
Step 1100: loss = 0.44 (0.235 sec)
Step 1200: loss = 0.42 (0.005 sec)
Step 1300: loss = 0.41 (0.005 sec)
Step 1400: loss = 0.41 (0.005 sec)
Step 1500: loss = 0.46 (0.005 sec)
Step 1600: loss = 0.63 (0.005 sec)
Step 1700: loss = 0.34 (0.004 sec)
Step 1800: loss = 0.43 (0.006 sec)
Step 1900: loss = 0.34 (0.004 sec)
Training Data Eval:
  Num examples: 55000  Num correct: 49038  Precision @ 1: 0.8916
Validation Data Eval:
  Num examples: 5000  Num correct: 4517  Precision @ 1: 0.9034
Test Data Eval:
  Num examples: 10000  Num correct: 8989  Precision @ 1: 0.8989

TensorBoard も利用可能です :

tensorboard --logdir=data/ --port=8080

gcml_tb_local2

クラウド上で訓練する : シングル・ワーカー

ここからが本番です。コードの検証ができたら、次のステップは(full dataset を使って)Cloud ML API に訓練ジョブをサブミットすることによりモデルを訓練することです。

ここでは、ローカルで試したものと同じ訓練コードを使用します :

cd ~/google-cloud-ml/samples/mnist/trainable/
訓練ジョブを submit する

訓練ジョブのために名前を選択します、 e.g. “mnist_yourusername”。
名前は英文字で始まり、英数字と underscore を含めることができます。

JOB_NAME=<your job name>

念のため、以前の実行出力をクリアしておきます :

PROJECT_ID=`gcloud config list project --format "value(core.project)"`
TRAIN_BUCKET=gs://${PROJECT_ID}-ml
TRAIN_PATH=${TRAIN_BUCKET}/${JOB_NAME}    # ex) gs://classcat-tensorflow-ml/mnist_classcat
gsutil rm -rf ${TRAIN_PATH}

訓練ジョブを submit するためには、以下を実行します :

gcloud beta ml jobs submit training ${JOB_NAME} \
  --package-path=trainer \
  --module-name=trainer.task \
  --staging-bucket="${TRAIN_BUCKET}" \
  --region=us-central1 \
  -- \
  --train_dir="${TRAIN_PATH}/train"

以下は submit 直後の出力例です :

createTime: '2016-10-16T08:45:11Z'
jobId: mnist_classcat
state: QUEUED
trainingInput:
  args:
  - --train_dir=gs://classcat-tensorflow-ml/mnist_classcat/train
  packageUris:
  - gs://classcat-tensorflow-ml/cloudmldist/1476607509/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1

ジョブのステータスの確認もできます、以下はまだ準備中ですね :

$ gcloud beta ml jobs describe --project ${PROJECT_ID} ${JOB_NAME}
createTime: '2016-10-16T08:45:11Z'
jobId: mnist_classcat
state: PREPARING
trainingInput:
  args:
  - --train_dir=gs://classcat-tensorflow-ml/mnist_classcat/train
  packageUris:
  - gs://classcat-tensorflow-ml/cloudmldist/1476607509/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1

そして実行中 :

$ gcloud beta ml jobs describe --project ${PROJECT_ID} ${JOB_NAME}
createTime: '2016-10-16T08:45:11Z'
jobId: mnist_classcat
startTime: '2016-10-16T08:48:12Z'
state: RUNNING
trainingInput:
  args:
  - --train_dir=gs://classcat-tensorflow-ml/mnist_classcat/train
  packageUris:
  - gs://classcat-tensorflow-ml/cloudmldist/1476607509/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1

成功しました! :

$ gcloud beta ml jobs describe --project ${PROJECT_ID} $
{JOB_NAME}
createTime: '2016-10-16T08:45:11Z'
endTime: '2016-10-16T08:52:48Z'
jobId: mnist_classcat
startTime: '2016-10-16T08:48:12Z'
state: SUCCEEDED
trainingInput:
  args:
  - --train_dir=gs://classcat-tensorflow-ml/mnist_classcat/train
  packageUris:
  - gs://classcat-tensorflow-ml/cloudmldist/1476607509/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1

管理コンソールからも確認できます :
gcml_job_success2b

出力を inspect する

クラウド訓練では、出力は Google Cloud Storage に生成されます。
この例では、出力は ${TRAIN_PATH}/train にセーブされ、以下のようにリスティングできます :

$ echo $TRAIN_PATH
gs://classcat-tensorflow-ml/mnist_classcat

$ gsutil ls ${TRAIN_PATH}/train
gs://classcat-tensorflow-ml/mnist_classcat/train/
gs://classcat-tensorflow-ml/mnist_classcat/train/checkpoint
gs://classcat-tensorflow-ml/mnist_classcat/train/checkpoint-1999
gs://classcat-tensorflow-ml/mnist_classcat/train/checkpoint-1999.meta
gs://classcat-tensorflow-ml/mnist_classcat/train/checkpoint-999
gs://classcat-tensorflow-ml/mnist_classcat/train/checkpoint-999.meta
gs://classcat-tensorflow-ml/mnist_classcat/train/events.out.tfevents.1476607903.master-9a8c-0-n6vcy
Stackdriver logging を inspect する

Cloud ML は訓練ジョブを実行する時、全ての stdout/stderr ストリームを捕捉してロギングします。これらのログは Stackdriver logging に保存され、実行中及び実行後に見ることができます。

ログを見る一番簡単な方法は管理コンソールから “ログを表示” をクリックすることです :
gcml_job_log2

* master-replica-0 は master 視点からジョブ実行の概要を与えてくれます。

alternative として、コマンドラインからもログが取得できます。
以下は、master-replica-0 タスクのための全てのログを取得します :

gcloud beta logging read --project ${PROJECT_ID} --format=json \
  "labels.\"ml.googleapis.com/task_name\"=\"master-replica-0\" AND \
   labels.\"ml.googleapis.com/job_id\"=\"${JOB_NAME}\""

実行結果です :

$ gcloud beta logging read --project ${PROJECT_ID} --for
mat=json   "labels.\"ml.googleapis.com/task_name\"=\"master-replica-0\" AND \
   labels.\"ml.googleapis.com/job_id\"=\"${JOB_NAME}\"" | head -40
[
  {
    "insertId": "chs2jrg2q03vhr",
    "jsonPayload": {
      "created": 1476607935.08323,
      "levelname": "INFO",
      "lineno": 690,
      "message": "Task completed successfully.",
      "pathname": "/runcloudml.py"
    },
    "labels": {
      "compute.googleapis.com/resource_id": "6857495858232852682",
      "compute.googleapis.com/resource_name": "master-9a8c-0-n6vcy",
      "compute.googleapis.com/resource_type": "instance",
      "ml.googleapis.com/job_id": "mnist_classcat",
      "ml.googleapis.com/job_id/log_area": "root",
      "ml.googleapis.com/task_name": "master-replica-0",
      "ml.googleapis.com/trial_id": ""
    },
    "logName": "projects/classcat-tensorflow/logs/master-replica-0",
    "resource": {
      "labels": {
        "job_id": "mnist_classcat",
        "task_name": "master-replica-0"
      },
      "type": "ml_job"
    },
    "severity": "INFO",
    "timestamp": "2016-10-16T08:52:15.083230972Z"
  },
  {
    "insertId": "chs2jrg2q03vhp",
    "jsonPayload": {
      "created": 1476607935.08276,
      "levelname": "INFO",
      "lineno": 688,
      "message": "Clean up finished.",
      "pathname": "/runcloudml.py"
    },
    "labels": {
... 
要約ログを inspect する

もちろん TensorBoard も利用可能で –logdir=${TRAIN_PATH}/train を引数にすれば良いです。
具体的には、例えば :

tensorboard --logdir=gs://classcat-tensorflow-ml/mnist_classcat/train --port=8080

gcml_job_tb2

区切りが良いので、入門編 (1) はここまでとします。
入門編 (2) では分散や hyperparameter 調整が主題になります。

 

以上

AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com