手把手教你開始用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 的權限才能運作。

解壓縮該檔案並移動路徑至 flowers 的目錄底下,以下的指令都需要再 flowers 的目錄底下執行:

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,並儲存檔案

使用 pip 來下載所需要的套件

pip install --user -r requirements.txt

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

安裝並初始化 Cloud SDK

安裝 Tensorflow

pip install --user --upgrade tensorflow

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

安裝完 Tensorflow 後可以照著此連結的步驟,測試 Tensorflow 是否成功安裝,結果如下:

設置 Cloud Storage Bucket

設置 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

使用 gsutil list 查看是否成功創立,並注意之後都要在 us-central1 上執行其他 job

宣告變數

請注意 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

接著進行 Training data 的預處理。如果需要查看 job 的運行狀況,如同上方的步驟。

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*"

submit 成功會出現以上訊息,訓練機器大約需要等待 15 分鐘

部署並預測與檢驗成果

建立一個 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

新增一個 JSON 的請求檔案並把圖片進行 base64 encode

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

清除資料

清除剛剛創建的 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專門家 – 中文技術部落格的最新消息!

資料來源

原始文章:https://cloud.google.com/ml-engine/docs/tensorflow/flowers-tutorial


連絡「GCP 專門家」