跳至主要內容
ESC
Study Jam:數據與 AI 基礎 — 第 10/12 篇

BigQuery ML 推論實戰

BigQuery ML 推論實戰

課程概述

前面的課程裡,你已經學會用 BigQuery ML 建出基本模型。這門課我們把重點放在推論(Inference)這一端的進階用法:怎麼在 BigQuery 裡拿訓練好的模型對新資料做預測、怎麼把外部模型匯進來、怎麼呼叫 Vertex AI 上的遠端模型,還有大規模批次推論的效能該怎麼調。

BigQuery ML 進階推論架構:分區新資料先經共用 TRANSFORM 保持特徵一致,再路由至倉儲內原生模型、受 QPS 限制的 Vertex AI 遠端端點或由物件儲存匯入的模型,結果彙整成結構化預測表

三條路徑共用同一個前提:推論特徵必須與訓練一致。原生模型就地執行、遠端模型提供彈性但受端點 QPS 影響、匯入模型重用外部資產;分區裁剪與欄位裁剪則控制批次成本。

你將學到

  • 使用 ML.PREDICT 進行即時與批次推論
  • 透過 CREATE MODEL ... REMOTE 呼叫 Vertex AI 上的外部模型
  • 匯入 TensorFlow SavedModel 到 BigQuery ML
  • 使用 ML.TRANSFORM 確保推論時的特徵一致性
  • 優化大規模推論的效能與成本

核心概念

BQML 推論的三種方式

方式語法使用場景
本地模型推論ML.PREDICT(MODEL model)BQML 原生訓練的模型
遠端模型推論ML.PREDICT(MODEL remote_model)呼叫 Vertex AI Endpoint
匯入模型推論ML.PREDICT(MODEL imported_model)TensorFlow / ONNX 模型
BigQuery ML 預測輸出處理:分類模型輸出預測標籤與類別機率供門檻判斷,迴歸模型輸出連續預測值供誤差與範圍檢查

ML.PREDICT 的下游處理要依模型類型設計:分類結果除了標籤還要展開機率並設定決策門檻;迴歸結果則檢查預測值範圍、誤差與異常值,不能套用類別機率邏輯。

遠端模型(Remote Model)

遠端模型讓你直接在 BigQuery SQL 裡呼叫部署在 Vertex AI 上的模型,資料不用搬出 BigQuery:

-- 建立遠端模型連線
CREATE OR REPLACE MODEL `dataset.remote_model`
  INPUT(feature1 FLOAT64, feature2 STRING)
  OUTPUT(prediction FLOAT64)
  REMOTE WITH CONNECTION `project.region.connection`
  OPTIONS(ENDPOINT = 'https://REGION-aiplatform.googleapis.com/...');

-- 使用遠端模型預測
SELECT * FROM ML.PREDICT(MODEL `dataset.remote_model`,
  (SELECT feature1, feature2 FROM `dataset.new_data`));
BigQuery 遠端模型批次推論控制:輸入分批送往受配額限制的 Vertex AI Endpoint,暫時失敗依政策退避重試,並以唯一識別避免重複寫入

遠端推論同時受 BigQuery 工作量與端點配額約束;以可控批次送出、記錄每列狀態,只對暫時錯誤退避重試,並用唯一鍵或雜湊確保重跑不會重複產生結果。

匯入 TensorFlow 模型

如果你在外部已經訓練好 TensorFlow 模型,把 SavedModel 上傳到 Cloud Storage,再匯入 BigQuery ML 就行:

CREATE OR REPLACE MODEL `dataset.tf_model`
  OPTIONS(model_type='TENSORFLOW',
          model_path='gs://bucket/saved_model/*');

匯入後就能像使用 BQML 原生模型一樣進行推論。

特徵一致性(Feature Consistency)

推論時最容易踩的雷,就是訓練跟推論的特徵處理對不上。BQML 的 TRANSFORM 子句正是用來解決這件事:

CREATE MODEL `dataset.model`
  TRANSFORM(
    ML.BUCKETIZE(age, [18, 30, 50, 65]) AS age_bucket,
    ML.STANDARD_SCALER(income) OVER() AS scaled_income,
    label
  )
  OPTIONS(model_type='LOGISTIC_REG')
  AS SELECT age, income, label FROM `dataset.train`;

寫在 TRANSFORM 裡的轉換,到 ML.PREDICT 時會自動套用,兩邊就不會兜不起來。

批次推論效能優化

大規模推論時的效能考量:

  • 對輸入資料使用分區表,只掃描需要預測的分區
  • 物化中介結果並只 SELECT 模型需要的輸入欄位,減少重複計算與掃描量
  • 遠端模型推論受 Vertex AI Endpoint 的 QPS 限制,需注意流量控管
  • 批次推論結果可直接寫入目標表:CREATE TABLE ... AS SELECT * FROM ML.PREDICT(...)
遠端推論要先區分可修正、暫時性與永久性錯誤。只有暫時失敗或已修正的列值得重跑;列識別與輸入雜湊可避免重複寫入。

實作重點

  • 分類模型的 ML.PREDICT 會輸出預測標籤與各類別機率(predicted_<label>_probs),可用 UNNEST 展開後依機率篩選;迴歸模型則只輸出預測值,沒有機率欄位
  • 遠端模型需先建立 BigQuery Connection(bq mk --connection),並授予連線的服務帳戶呼叫 Vertex AI 的權限
  • 匯入 TensorFlow 模型時,須確認模型的 signature 與 BigQuery 的資料類型相容
  • 常見錯誤:推論資料的欄位名稱或類型與訓練時不一致,導致 ML.PREDICT 報錯
  • 成本控制:推論查詢也按掃描量計費,建議只 SELECT 需要的欄位作為模型輸入

Skill Badge 指引

Lab 連結Using BigQuery Machine Learning for Inference — 完成此 lab 可獲得 Skill Badge

延伸學習

Study Jam:數據與 AI 基礎 — 10/12 完成 查看系列全覽 →

留言討論

徽章解鎖!