Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

GCP 筆記: AI Platform

  1. 下載資料集
  2. 點擊 [導覽選單] > [AI 平台 (AI Platform)] > [筆記本 (Notebook)]。
  3. 點擊 [新增執行個體 (New Instance)],選擇最新版的 TensorFlow Enterprise,並選擇 Without GPUs。
  4. 點擊 [開啟 JUPYTERLAB (Open JupyterLab)]。

這次的 Lab,主要都會是在 Jupyter 上實作,主要的課程也都在筆記本中。

複製範例 repo

  1. 點擊 Terminal。
  2. 執行 git clone https://github.com/GoogleCloudPlatform/training-data-analyst 指令。
  3. 打開 training-data-analyst/self-paced-labs/ai-platform-qwikstart 中的 ai_platform_qwik_start.ipynb,並逐一完成裡面的任務。
  4. 首先,點擊工具列中的 [Run] 執行筆記中的 import os 指令。

匯入資料

執行筆記中的指令碼,下載樣本資料。

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

# 定義環境變數
export TRAIN_DATA=$(pwd)/data/adult.data.csv
export EVAL_DATA=$(pwd)/data/adult.test.csv

# 檢查資料是否有效
head data/adult.data.csv

接下來要在本地執行訓練程式,首先建立 trainer 路徑與 __init__.py 空白檔案。

mkdir -p trainer
touch trainer/__init__.py

接著執行筆記本中的三段指令,建立 Python 檔案。

建立完 Python 檔案後,執行訓練,並將輸出檔存到指定的路徑中。這裡利用 MODEL_DIR 這個環境變數,指定輸出路徑到 output 中。

MODEL_DIR=output
gcloud ai-platform local train \
    --module-name trainer.task \
    --package-path trainer/ \
    --job-dir $MODEL_DIR \
    -- \
    --train-files $TRAIN_DATA \
    --eval-files $EVAL_DATA \
    --train-steps 1000 \
    --eval-steps 100
    
# 檢查是否有輸出結果
ls output/keras_export/

接著執行筆記中的 Python 程式碼片段,抽樣 adult.test.csv 中的 5 筆資料進行學習。

from trainer import util
_, _, eval_x, eval_y = util.load_data()

prediction_input = eval_x.sample(5)
prediction_targets = eval_y[prediction_input.index]
print(prediction_input)

會得出以下結果,其中類別資料會轉換為整數,將用於對照表中,而連續資料則轉換為 Z-Score:

            age  workclass  education_num  marital_status  occupation  \
6314  -0.411607          3      -0.419365               2           6   
12336  0.317732          1       1.525903               0           9   
126    0.682402          0       2.304010               2           9   
10073  1.120006          0       1.136850               2           3   
13916 -0.630409          3      -0.419365               4          10   

       relationship  race  capital_gain  capital_loss  hours_per_week  \
6314              0     4     -0.144807     -0.217119       -0.034043   
12336             1     4     -0.144807     -0.217119        1.983701   
126               5     4     -0.144807     -0.217119       -0.034043   
10073             0     4     -0.144807     -0.217119       -0.034043   
13916             1     4     -0.144807     -0.217119       -0.034043   

       native_country  
6314               38  
12336              38  
126                38  
10073              38  
13916              38 

執行下列程式,將輸入的資料轉為 JSON 格式。

import json

with open('test.json', 'w') as json_file:
  for row in prediction_input.values.tolist():
    json.dump(row, json_file)
    json_file.write('\n')

檢查 JSON 檔的內容是否正確:

cat test.json

將該資料匯入已訓練的模型中,進行預測。

gcloud ai-platform local predict \
    --model-dir output/keras_export/ \
    --json-instances ./test.json

此時,回傳的數值會如下,0-0.5 代表預測收入小於等於 5 萬美元,0.5-1 則代表大於 5 萬美元。

[0.20451265573501587]
[0.37865954637527466]
[0.7607640027999878]
[0.7124574184417725]
[0.02481493353843689]

在雲端執行訓練

定義環境變數,供之後使用

export PROJECT=$(gcloud config list project --format "value(core.project)")
echo "Your current GCP Project Name is: "${PROJECT}

在進行 Lab 的時候,記得將專案名稱複製,取代下一個指令

PROJECT = "{{剛才的 PROJECT 名稱}}"  # Replace with your project name
BUCKET_NAME=PROJECT+"-aiplatform"
REGION="us-central1"

將資訊存入最早定義的 os 物件中。

os.environ["PROJECT"] = PROJECT
os.environ["BUCKET_NAME"] = BUCKET_NAME
os.environ["REGION"] = REGION
os.environ["TFVERSION"] = "2.1"
os.environ["PYTHONVERSION"] = "3.7"

建立 Cloud Storage 貯體

建立一個 Cloud Storage 貯體,並將貯體名稱複製取代下列的指令。

if ! gsutil ls | grep -q gs://train-like-a-boss; then
    gsutil mb -l us gs://train-like-a-boss
fi
gsutil cp -r data gs://train-like-a-boss/data

# 重新設定環境變數
export TRAIN_DATA=gs://train-like-a-boss/data/adult.data.csv
export EVAL_DATA=gs://train-like-a-boss/data/adult.test.csv

# 複製剛才的 test.json
gsutil cp test.json gs://train-like-a-boss/data/test.json
export TEST_JSON=gs://train-like-a-boss/data/test.json

執行訓練

JOB_ID=census_$(date -u +%y%m%d_%H%M%S)
OUTPUT_PATH=gs://train-like-a-boss/$JOB_ID
gcloud ai-platform jobs submit training $JOB_ID \
    --job-dir $OUTPUT_PATH \
    --runtime-version $TFVERSION \
    --python-version $PYTHONVERSION \
    --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

將系統回傳的 jobId 存入 os 物件中

os.environ["JOB_ID"] = "census_210615_103802"

此時可以回到 [AI 平台] 的 [Jobs] 頁面中,檢視訓練的進度。或是在終端機中用指令查詢:

gcloud ai-platform jobs stream-logs $JOB_ID

部署預測用的模型

先定義 os 的模型名稱。

os.environ["MODEL_NAME"] = "census"

# 在 AI Platform 建立模型
gcloud ai-platform models create $MODEL_NAME --regions=$REGION

gcloud ai-platform versions create v1 發布第一個版本 v1

OUTPUT_PATH=gs://{{貯體名稱}}/$JOB_ID
MODEL_BINARIES=$OUTPUT_PATH/keras_export/
gcloud ai-platform versions create v1 \
--model $MODEL_NAME \
--origin $MODEL_BINARIES \
--runtime-version $TFVERSION \
--python-version $PYTHONVERSION \
--region=global

檢視模型列表。

gcloud ai-platform models list

執行雲端預測。

gcloud ai-platform predict \
--model $MODEL_NAME \
--version v1 \
--json-instances ./test.json \
--region global

AI Platform 同時支援批次預測,但是並不在本次 Lab 涵蓋的範圍中。

Eric Chuang
Eric Chuang

正職是廣告行銷人員,因為 Google Tag Manager 的關係開始踏入網站製作的領域,進一步把 WordPress 當成 PHP + HTML + CSS + JavaScript 的學習教材。此外,因為工作的關係,曾經用 Automattic 的 Underscores (_s) 替客戶與公司官網進行全客製化佈景主題開發。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料