ホーム » Google Cloud Machine Learning » Google Cloud Machine Learning : 入門編 (3) – 予測

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]}

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

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

以上

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