本文是教學系列的第四部分,教您如何在 TensorFlow 和 Cloud ML Engine 實行 machine learning (ML) 推薦系統。這個部分教導您如何在 GCP 上部署生產系統,並針對產品提供建議和定期更新推薦模型。
這個教學系列包括以下部分:
- 概要
- 創建模型 (第一部分)
- 訓練和調整 Cloud ML Engine (第二部分)
- 使用 Google Analytics 的數據來分析 (第三部分)
- 部署推薦系統 (第四部分) (本教程)
本教程中的推薦系統使用 WALS 演算法。WALS 演算法已經包含在 TensorFlow 程式庫 contrib.factorization package 中,適用於來分解產品排名的大型矩陣。關於更詳細的細節,請參閱概述。
目標
- 在 App Engine 上部署推薦系統服務
- 部署一個 Cloud Composer 的環境來處理訓練模型的更新
花費
本教學使用到 Cloud Storage、Cloud Machine Learning Engine、BigQuery 和 Cloud Composer 等需收費服務。您可以使用計算機估計您的使用成本。本教程預計花費 $0.15。若您為新的 GCP 用戶,則可能有免費試用的 credit。
開始本教學之前
本教學建立於教程課程中第三部分中的執行步驟。
- 選擇您在第三步驟所使用的 GCP 專案:到專案頁
- 確認您的專案費用:專案費用
- 啟用 Cloud Resource Manager、Source Repositories、Cloud ML Engine、App Engine Admin、Kubernetes Engine APIs:啟用API
在本教學的前幾個步驟中,您將會了解到如何從 Google Analytics 取得網頁推薦數據,並將此數據用來訓練 TensorFlow 模型。若要讓客戶取得推薦,您可以提供 REST API 服務讓客戶使用。此 REST API 將 Google Analytics 客戶 ID 和推薦變數K作為輸入值,之後得到 K 個推薦給客戶的文章 ID。
本教學提供推薦文章服務 REST API 程式範例,以及教您如何靈活應用 App Engine 環境部署程式。Cloud Endpoints 提供 API 身份和權限的驗證服務。
為了將網站中的新文章案和使用者點閱過的文章數據加入推薦系統中,您必須定期重新訓練和部署模型。包括以下步驟:
- 使用 BigQuery 查詢從 Google Analytics 資料表得到的訓練資料
- 將資料以 CSV 的格式匯出到 Cloud Storage
- 使用匯出資料訓練新的推薦模型
- 將新訓練的模型部署至 API 中
您可以使用 Cloud Composer 執行管理您的專案項目。Cloud Composer 是一個在 GCP 代管的 Apache Airflow 服務。Apache Airflow 是一個雲端服務應用排程管理系統,其中每個步驟成功後才會執行到下一個步驟。本教學將帶領您部署 Cloud Composer 環境,以及提供 DAG (Directed Acyclic Graph 有向無環圖) 的配置範例項目列表上提供範例配置,來表現模型更新的步驟。
下圖為解決方案的架構圖:
部署推薦服務系統
- 在您安裝 Cloud SDK 和教學程式的電腦中開啟 command shell。
- 切換到解決方案的根目錄下
- 輸入指令創建一個名為’recserve_[YOUR-PROJECT-ID]’的 Cloud Storage 存儲分區:
export BUCKET=gs://recserve_$(gcloud config get-value project 2> /dev/null)
gsutil mb ${BUCKET}
設置 WALS 演算法模型和資料模型
在 Airflow DAG 中使用模型訓練需要將程式模組部署至 Cloud Storage 的一個固定位置。
- 在 commend shell 中輸入設定好的語法,創建一個分散式套件模型
cd wals_ml_engine
python setup.py sdist
- 將模型複製到您在儲存分區所創建的資料夾底下
gsutil cp dist/wals_ml_engine-0.1.tar.gz ${BUCKET}/code/
./mltrain.sh local ../data/recommendation_events.csv \
--data-type web_views --use-optimized --output-dir ${BUCKET}
此步驟需花數分鐘進行。
API 的安裝及應用
- 創建 App Engine 應用程式
gcloud app create --region=us-east1
gcloud app update --no-split-health-checks
你可以選擇任一 GCP 區域來建立應用程式。在這個例子中,我們用選擇了建立在 us-east1這個區域。
- 準備部署 API 服務
cd scripts
./prepare_deploy_api.sh
您將會看到下列顯示:
To deploy: gcloud endpoints services deploy /var/folders/1m/r3slmhp92074pzdhhfjvnw0m00dhhl/T/tmp.Xr4t4ici.yaml
prepare_deploy_api.sh 這個腳本透過複製範本, 並把裡面的 project ID 取代來完成一個端點服務配置檔。
- 出現 prepare_deploy_api.sh 時執行下列指令
gcloud endpoints services deploy [TEMP_FILE_PATH]
- 準備部署 App Engine app:
/prepare_deploy_app.sh
您將會看到下列顯示:
ERROR: (gcloud.app.create) The project [lramsey-goog-com-csa-airflow] already contains an App Engine application...
To deploy: gcloud -q app deploy ../app/app_template.yaml_deploy.yaml
您可以忽略錯誤顯示,這是在預期之內的 prepare_deploy_api.sh 程式集從app/openapi.yaml 範本中準備端點服務資料,他會將資料夾複製模板資料,代替您資料夾中的專案 ID
- 出現 prepare_deploy_app.sh 時執行下列程式碼
gcloud -q app deploy ../app/app_template.yaml_deploy.yaml
部署 Cloud Composer
以下部分介紹如何使用 Cloud Composer 的排程工具,以及如何將 Airflow 模組放入您的專案中。
推薦服務 DAG
Apache Airflow 將一連串的任務與它們之間的相依性用 DAG (Directed Acyclic Graph 有向無環圖) 的方式來表達. 下圖為推薦服務的 DAG。
(圖二):Airflow DAG 解決方案
DAG 包含四個步驟:
- bq_rec_training_data:在 BigQuery 中對 dataset 下 SQL 語法,分析我們在第三部分所導入的 Google Analytics 資料表。將數據轉存至 recommendation_events 資料表中。
- bq_export_op:將 recommendation_events 資料表中的事件資以 CSV 的格式匯出至 Cloud Storage 的資料分區。
- ml_engine_training_op:將使用 CSV 檔中的事件資料來訓練模型, 訓練任務會將新的模型寫到 Cloud Stroage 存放模型的目錄讓 App Engine 可以讀取。
- app_engine_deploy_version:部署新的 App Engine 終端 APP,讓新訓練好的模型可以被載入。並將流量轉移至新的 App 版本。
DAG 被定義在 airflow/dags/training.py 檔案中。步驟四在 App Engine 中載入Airflow 外掛,定義在 airflow/plugins/gae_admin_plugin.py 文件中。
部署 Airflow 服務
- 在您的專案中創建 Cloud Composer 環境
CC_ENV=composer-recserve
gcloud beta composer environments create $CC_ENV --location us-central1
創建過程將會花費數分鐘。
- 得到由 Cloud Composer 創建的 Cloud Storage 儲存分區名稱 :
gcloud beta composer environments describe $CC_ENV \
--location us-central1 --format="csv[no-heading](config.dagGcsPrefix)" | sed 's/.{5}$//'
此儲存分區包含了存放 DAG 和外掛的資料夾。輸出時,您將會看到 Cloud Storage 儲存分區位置,像是:
gs://[region-environment_name-random_id-bucket]
- 在 shell 中設定變數輸出的路徑位置
export AIRFLOW_BUCKET="gs://[region-environment_name-random_id-bucket]"
- 將 DAG training.py 複製到 Cloud Composer 儲存分區 dags 資料夾中
gsutil cp airflow/dags/training.py ${AIRFLOW_BUCKET}/dags
- 將插件匯入您的 composer 環境中
gcloud beta composer environments storage plugins import \
--location us-central1 --environment ${CC_ENV} --source airflow/plugins/
使用推薦系統服務
這個部分教您如何使用推薦服務,包括使用 API 接口和 Airflow 管理網站。
推薦系統端點服務使用
推薦服務的 OpenAPI 相關規範文件為 app/openapi.yaml。關於更多 Cloud Endpoints 相關訊息,請參閱官方文件。
您可以使用 query_api.sh 來測試推薦系統端點服務:
cd scripts
./query_api.sh
輸出的端點網址稱為 API,回傳格式為 JSON
curl "https://[PROJECT_ID].appspot.com/recommendation?userId=5448543647176335931&numRecs=5"
{
"articles": [
"299941605",
"299800704",
"298299208",
"299800661",
"299928862"
]
}
訪問 Airflow 管理站台
Airflow 管理站台讓您對 DAG 做配置管理和執行 DAG。例如使用它您能夠:
- 檢閱並更改 DAG 執行排程。
- 手動執行 DAG
- 檢閱程序 log
更多關於如何使用此管理控制台,請參閱 Airflow 官方文件。
注意:創建 Cloud Composer 完整使用環境,大約需要 25 分鐘
1. 訪問 Airflow 管理站台
gcloud beta composer environments describe $CC_ENV \
--location us-central1 --format="csv[no-heading](config.airflow_uri)"
您將會看到管理站台的 URL 網址:
https://x6c9aa336e72ad0dd-tp.appspot.com
- 如果要在您的 Cloud Composer 使用 Airflow 管理站台, 請用前步指令輸入的 URL
清除
如果您不想繼續這個教程,您可以將它刪除以避免產生額外的 GCP 費用。最簡單的方式為刪除您在本教學所創建的專案。以下為刪除專案的結果:
刪除專案
停止計費最簡單的方式就是刪除您在此教程所創建的專案。
刪除專案:
警告:刪除此項目的結果:
您將會刪除掉您目前既有的專案和其他與此專案相關的檔案
您將無法使用刪除的專案ID。如果您創建一個供未來使用的custom project ID,請將內部專案刪除。此步驟確保此專案ID的網址(例如:appspot.com URL)可持續使用。如果您目前正在學習多種相關教學,建議您不要刪除,可重複使用專案避免創建過多項目而產生超額限制。
- 在 GCP 控制台點選專案頁面:GO TO THE PROJECTS PAGE
- 專案清單中,勾選您要刪除的專案,並按下 Delete project
- 在搜尋中輸入專案ID,按下 Shut down 刪除專案
下一步
了解更多與推薦系統相關的內容:
(原文翻譯自 Google Cloud)