技術部落格

集結國內外精選文章,掌握最新雲端技術新知與應用

iKala Cloud / AI 與機器學習 / 手把手教你開始用 GCP 機器學習服務

手把手教你開始用 GCP 機器學習服務

google-cloud-platform-empowers-tensorflow-and-machine-learning

Cloud Machine Learning 是 Google Cloud Platform 對於深度學習提供的管理服務。它可以讓您建立作用於任何大小、任何資料的學習模型,並藉由 TensorFlow 框架打造您的服務。您立即可以將訓練模型放置於全球的 prediction 平台,能支持成千上萬的使用者與 TB 等級的資料。除此之外,此項服務同時整合了 Cloud Dataflow, Cloud Storage 甚至 BigQuery。現在我們就來使用看看如何簡單的進行手把手 Cloud Machine Learning:

  • 起始設定
  • 設置 Cloud Storage Bucket
  • 宣告變數
  • 資料預先處理
  • 訓練模型
  • 部署並預測與檢驗成果

這一次我們使用花的 dataset 來實作客製化的辨識模型,以下將帶來四個部分:資料預處理、訓練模型、模型部署、預測結果。

部署環境限制,目前台灣 (asia-east1) 也已開放 Tensorflow 的服務。

https://cloud.google.com/ml-engine/docs/tensorflow/environment-overview#cloud_compute_regions

部署區域與價格

https://cloud.google.com/ml-engine/docs/pricing

起始設定

打開 Google Cloud Shell 並從 GitHub 下載範例程式,以下的步驟使用者需要有 Editor 的權限才能運作。

 data-lazy-src=

wget https://github.com/GoogleCloudPlatform/cloudml-samples/archive/master.zip

 

unzip master.zip
cd cloudml-samples-master/flowers

這邊需要特別注意,原先的教學使用的版本過舊,需要手動更新套件的版本

vim requirements.txt

更新 apach-beam 套件至 2.4.0,並儲存檔案

 data-lazy-src=

pip install --user -r requirements.txt

至 GCP Project 啟用 Cloud Machine Learning Engine and Compute Engine APIs

安裝並初始化 Cloud SDK

安裝 Tensorflow

pip install --user --upgrade tensorflow

如果成功會出現以下的訊息

 data-lazy-src=

 data-lazy-src=

設置 Project 以及 Bucket 的環境變數

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

確認 Project id 以及 Bucket 的名稱是否正確

echo $PROJECT_ID
echo $BUCKET_NAME

選定一個 可以跑Cloud ML service 的 Region (例如:us-central1)

REGION=us-central1

新建一個 Bucket,成功結果如下圖

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

 data-lazy-src=

宣告變數

請注意 Bucket 名稱 與 Region 名稱需要使用者自行設定

declare -r BUCKET_NAME="gs://${BUCKET_NAME}"
declare -r REGION="${REGION}"
declare -r PROJECT_ID=$(gcloud config list project --format "value(core.project)")
declare -r JOB_NAME="flowers_${USER}_$(date +%Y%m%d_%H%M%S)"
declare -r GCS_PATH="${BUCKET_NAME}/${USER}/${JOB_NAME}"
declare -r DICT_FILE=gs://cloud-ml-data/img/flower_photos/dict.txt
declare -r MODEL_NAME=flowers
declare -r VERSION_NAME=v1
echo "Using job id: " $JOB_NAME
set -v -e

資料預先處理

本次教學所使用的資料都已經事先標籤完畢,並分為 10% 的 Evaluation data (訓練資料)以及  90% 的 Training data (預測資料)。運用 Google Cloud Dataflow 來進行 Evaluation data 的預處理

python trainer/preprocess.py \
 --input_dict "$DICT_FILE" \
 --input_path "gs://cloud-ml-data/img/flower_photos/eval_set.csv" \
 --output_path "${GCS_PATH}/preproc/eval" \
 --cloud

可以至 Dataflow 的 UI 介面查看目前 job 的運行狀況,或是開啟新的一個 Cloud Shell 輸入以下指令

gcloud dataflow jobs list
export JOB_ID="上方指令印出的 JOB ID"
gcloud beta dataflow logs list $JOB_ID --importance=detailed

 data-lazy-src=

python trainer/preprocess.py \
 --input_dict "$DICT_FILE" \
 --input_path "gs://cloud-ml-data/img/flower_photos/train_set.csv" \
 --output_path "${GCS_PATH}/preproc/train" \
 --cloud

訓練模型

準備好要訓練的資料後,即可以在 Cloud ML Engine 上執行訓練的動作

gcloud ml-engine jobs submit training "$JOB_NAME" \
 --stream-logs \
 --module-name trainer.task \
 --package-path trainer \
 --staging-bucket "$BUCKET_NAME" \
 --region "$REGION" \
 --runtime-version=1.4\
 -- \
 --output_path "${GCS_PATH}/training" \
 --eval_data_paths "${GCS_PATH}/preproc/eval*" \
 --train_data_paths "${GCS_PATH}/preproc/train*"

 data-lazy-src=

部署並預測與檢驗成果

建立一個 Cloud ML Engine model

gcloud ml-engine models create "$MODEL_NAME" \
 --regions "$REGION"

建立第一個版本的模型,此步驟促使訓練好的模型部署到一個 Cloud instance,進而準備讓使用者預測。部署一個新的版本需要等待大約 10 分鐘

gcloud ml-engine versions create "$VERSION_NAME" \
 --model "$MODEL_NAME" \
 --origin "${GCS_PATH}/training/model" \
 --runtime-version=1.4

部署完模型之後,複製一張測試圖片以進行預測請求

gsutil cp \
 gs://cloud-ml-data/img/flower_photos/daisy/100080576_f52e8ee070_n.jpg \
 daisy.jpg

 data-lazy-src=

python -c 'import base64, sys, json; img = base64.b64encode(open(sys.argv[1], "rb").read()); print json.dumps({"key":"0", "image_bytes": {"b64": img}})' daisy.jpg &> request.json 

呼叫預測的 API,並出現以下的結果:(雛菊 – 0, 蒲公英 – 1, 玫瑰 – 2, 向日葵 – 3, 鬱金香 – 4) 本次預測為 99.936% 為 雛菊

gcloud ml-engine predict --model ${MODEL_NAME} --json-instances request.json

 data-lazy-src=

清除剛剛創建的 Cloud Storage Bucket

gcloud ml-engine predict --model ${MODEL_NAME} --json-instances request.jsongsutil rm -r gs://$BUCKET_NAME/$JOB_NAME

結語

這次實作的部分是最基礎的應用,Cloud Machine Learning 完美的和 TensorFlow 搭配,必定還有夠多樣的殺手級應用等您挖掘。請繼續關注 GCP專門家 – 中文技術部落格的最新消息!

(原文翻譯自 Google Cloud。)

 

分享本文:
FacebookLineTwitter
回到頂端