預測總覽

您可以在雲端上託管訓練好的機器學習模型,並使用 Cloud ML 預測服務來推論新資料的目標值。本頁面會探討模型的託管和預測,並介紹專案注意事項。

運作方式

AI Platform 預測服務會管理雲端的運算資源以執行您的模型。您可從模型要求預測,並取得模型的預測目標值。下列是在雲端進行預測的設定程序:

  1. 您將模式匯出為 SavedModel 或其他成果,以在自訂預測處理常式 (Beta 版) 中使用。

  2. 在 AI Platform 中建立模型資源,然後從已儲存的模型建立模型版本。

    如您正在部署自訂預測處理常式,亦會提供要在預測時間執行的程式碼。

  3. 將用於預測的輸入資料格式化,並要求線上預測或批次預測。

  4. 使用線上預測時,服務會執行您儲存的模型,然後傳回要求的預測做為呼叫的回覆訊息。

    • 模型版本會部署至您在建立模型時指定的地區。
    • 雖但然不能保證,但您經常使用的模型版本隨時可以執行。

    如果使用批次預測,預測程序會涉及更多層面:

    1. 預測服務會分配資源以執行您的工作。這包含了一個或多個預測節點。

    2. 服務會在每個分配的節點上還原 TensorFlow 圖形。

    3. 預測服務在分配的節點上分配輸入資料。

    4. 每個節點都會執行您的圖形,並將預測結果儲存到您指定的 Cloud Storage 位置。

    5. 處理完所有輸入資料後,服務會關閉您的工作,並釋出分配的資源。

模型部署

AI Platform 可以託管您的模型,讓您從雲端取得預測結果。託管已儲存模型的過程稱為「部署」。預測服務會管理大規模執行模型所需的基礎架構,並提供給線上和批次預測要求使用。本節將說明模型部署。

關於模型和版本

AI Platform 使用稱為「模型」和「版本」的資源來組織您訓練的模型。模型是一種機器學習解決方案。比方說,您想要建立名為 census 的模型,來容納您在美國人口普查機器學習模型中進行的所有工作。您建立的實體名為 census,是機器學習模型實際實作的容器,而實作則稱為版本。

部署機器學習模型是一項反覆進行的程序。因此,建立 AI Platform 資源典範時所做的假設即是您會為每個機器學習模型製作多個版本。這個術語可能會令人混淆,因為實際上 AI Platform 模型資源本身並不是機器學習模型。在 AI Platform 中,模型是指存放機器學習模型各個版本的容器。

版本包含那些內容?

您部署至 AI Platform 做為模型版本的「模型」是 TensorFlow SavedModel。您會在訓練程式中匯出 SavedModel。只要您有服務簽名設為 serving_default 的 SavedModel,不論您是在雲端或是其他地方使用 AI Platform 訓練模型都不重要。

您亦可部署自訂預測處理常式 (Beta 版),此時您可提供具有額外訓練成果和程式碼的模型版本,以供處理預測要求。

版本之間的差異

您可以為任何模型資源建立任意版本。即使您在兩個版本之間使用完全不同的機器學習模型,您仍可使用相同的模型資源。模型是一種組織工具,您可依照您的狀況進行使用。

當實際工作環境中已經有一個版本時,常會在各模型版本保持一致的輸入和輸出。這樣您就能切換版本,而不需要變更針對模型建置的其他應用程式結構。此外,您還能輕鬆地利用現有資料來測試新版本。

預設版本

每個至少具備一個版本的模型都有預設版本。預設版本是在建立第一個版本時設定的。如果您僅透過指定模型名稱來要求預測,AI Platform 即會使用該模型的預設版本。

請注意,服務只會自動設定預設版本一次,就是在您建立第一個版本時。您可呼叫 projects.models.versions.setDefault 手動將任何後續版本設為預設值 (其亦會作為 gcloud ai-platform versions set-default 以及 Google Cloud Platform 主控台「Model details」(模型詳細資料) 頁面的「Versions」(版本) 清單),此外如在「Models」(模型) 頁面的模型清單中按一下模型,即會前往模型詳細資料頁面。這可讓您使用穩定的預設版本在實際工作環境中提供預測,同時無需建立測試專屬的模型資源即可測試較新版本。

為模型和版本命名

模型和版本名稱必須符合下列規則:

  • 只能由混合大小寫字母 (區分大小寫)、數字和底線組成。
  • 以字母開頭。
  • 上限為 128 個字元。
  • 在特定專案 (如為模型) 或模型 (如為版本) 中不得重複。

除了上述的技術要求之外,沒有其他命名規定。這裡提供一些最佳做法:

  • 模型名稱應具描述性和獨特性,因為您可能需要從記錄或報告中列出的許多名稱中挑出所需的模型。
  • 版本名稱最好簡短。比方說,在資源清單中找出「v1」比找出「'2017_01_29T13_54_58」容易。

模型和版本限制

AI Platform 配額政策將每個專案的模型數量上限設為 100 個,而將版本總數 (所有模型的所有版本數量) 上限設為 200 個。

模型部署參數

AI Platform 需要取得某些資訊以建立您的模型版本。此外您還可以設定部分選項。本節將說明這兩種類型的參數。這些參數會於 Version 物件中定義或由系統新增,以方便在 gcloud ai-platform versions create 指令中使用。

版本名稱
新版本的名稱,不得與模型中其他版本的名稱重複。
說明
您可為版本提供說明。目前只有透過 API 取得版本資訊才能提供說明;使用 gcloud 指令列工具或 GCP 主控台都不會顯示此說明。
部署 URI
您必須提供儲存 SavedModel 的 Cloud Storage 位置的 URI。AI Platform 會從此位置提取模型並進行部署。此參數在 gcloud ai-platform versions create 指令中稱為 --origin。如您部署自訂預測處理常式 (Beta 版),則可提供 Cloud Storage 目錄的 URI,其中包含模型版本用於預測的所有成果,而非僅有 SavedModel。
執行階段版本
除非您指定其他支援的版本,否則 AI Platform 會使用最新穩定的執行階段版本來部署您的模型版本。執行階段版本主要決定預測服務用來執行模型的 TensorFlow 版本。執行批次預測工作時,您可以選擇覆寫指派的執行階段版本。線上預測則一律會使用部署模型版本時設定的執行階段版本。
手動調整資源配置

您可以為模型版本指定持續保持運作的訓練節點數量。詳情請參閱資源調度一節。

暫存值區

如果您是透過 gcloud 指令列工具部署模型,則可在本機電腦上使用 SavedModel。此工具會在部署模型到 AI Platform 之前,將模型暫存在您指定的 Cloud Storage 位置。

預測的圖形變更

您可能已在運算圖形中加入 TensorFlow 運算,這主要是用在訓練方面。訓練好模型之後,您就可以從圖形中移除這些運算,然後再匯出最終版本。

訓練應用程式開發頁面中大部分的建議都是針對預測體驗。在某些情況下,有些會在您完成大量訓練後,準備好開始部署版本時,建議您對模型進行一些變更。

取得預測

您可以將新資料傳送至部署的模型版本以取得預測。下列各節將說明重要的預測注意事項。

線上預測與批次預測

瞭解線上預測和批次預測之間的差異

瞭解預測節點和資源分配

AI Platform 會以「節點時數」為單位,測量您進行預測所花費的處理量。本節將說明這些節點,以及如何針對不同預測類型來分配這些節點。

最簡單的方式是將節點視為虛擬機器 (VM),即使它們是以不同於傳統 VM 的機制實作。服務會以固定數量的處理能力和記憶體佈建每個節點,而且節點還具備作業系統映像檔和一組軟體設定,以執行模型並取得預測。

線上和批次預測都會透過分散式處理來執行節點,因此特定要求或工作可同時使用多個節點。服務會以分鐘為單位,依據每小時費率,向您收取節點總使用量的費用。舉例來說,執行兩個節點,每個節點各 10 分鐘的費用,和執行一個節點 20 分鐘相同。線上和批次預測以不同的方式分配節點,這項差異會大幅影響費用高低。

批次預測的節點分配

批次預測服務會調整服務所使用的節點數量,以盡量減少工作所需的時間。為了達成上述目標,服務會採取以下策略:

  • 啟動工作時,服務會分配一些節點來處理該工作。

  • 在工作期間調整節點數量,以發揮最大效率。每個節點都需要花一些時間啟動,因此服務試著分配剛好足夠的節點,讓啟動時間與縮短的工作時間互相抵銷。

  • 完成工作後立即關閉節點。

您可以指定使用的節點數量上限,來影響批次預測工作的資源調度。您需要的節點數量通常等於服務將使用的節點數量,但是節點用量會受到 AI Platform 配額政策約束。您可能想要限制分配給特定工作的節點數量,尤其是當您和其他人共用專案,可能會同時執行 (訓練和預測) 工作時。

線上預測的節點分配

線上預測服務會調整使用的節點數量,以盡量處理最多要求,又不會造成太多延遲。為了達成上述目標,服務會採取以下策略:

  • 在請求長時間停頓後第一次請求預測時,分配一些節點。

  • 調整節點數量以因應要求流量,亦即在流量增加時新增節點,要求變少時移除節點。

  • 即使沒有待處理的要求,請至少讓一個節點在幾分鐘的時間內保持就緒,以處理要求。就緒狀態能確保服務可以立即為每個預測提供服務。

  • 如果模型版本在幾分鐘內都沒有收到預測要求,即可縮減為零個節點。

當服務縮減為零,或流量突然暴增時,可能需要花一些時間 (幾秒至幾分鐘) 才能初始化節點以處理要求。初始化時間取決於模型版本的大小,因此用戶端逾時可能會導致捨棄要求,直到服務已在這個期間初始化新節點和/或增加延遲時間。

若要確保隨時提供即時服務,您可以在模型版本設定 minNodes 選項,以指定服務最少應保持多少節點在就緒狀態。由於您在服務未提供預測時仍需支付這些節點的費用,因此這項設定會增加成本。

自動調整資源配置的限制

AI Platform 針對線上預測自動調整資源配置,可協助您提供不同的預測要求率,同時又能降低成本。但是,這不適用於所有情況。服務讓節點上線的速度可能趕不上要求流量的尖峰。如果您的流量會定期遽增,或是應用程式需要穩定的低延遲時間,那麼您可以考慮使用「手動調整資源配置」

使用手動調整資源配置

您可以指定,讓一些節點在各種流量下持續運作,來影響模型版本線上預測的資源配置。手動設定節點數量會讓服務停止調度資源,這表示您指定的節點數量將隨時處於就緒狀態,服務也會持續向您收取這些節點的費用。我們不建議您使用手動調整資源配置功能,除非模型收到的要求數量變動的速度比自動調整資源配置更快。您可以在傳送給 manualScalingVersion 物件中設定 manualScaling,以設定要使用的節點數量。

預測輸入資料

您用來取得預測的資料是新資料,其格式和您用來訓練的資料相同。線上預測和批次預測會使用相同的資料 (模型的特徵),但是兩者需要的格式端視您使用的預測類型和介面而定。下表摘列了這些格式,其細節將於以下各節詳述:

預測類型和介面 支援的輸入格式
採用 API 呼叫的批次預測 具有 JSON 樣本字串的文字檔案或 TFRecords 檔案 (可能已壓縮)
採用 gcloud 工具的批次預測 具有 JSON 樣本字串的文字檔案或 TFRecords 檔案 (可能已壓縮)
採用 API 呼叫的線上預測 JSON 要求訊息
採用 gcloud 工具的批次預測 具有 JSON 樣本字串的文字檔案或是 CSV 檔案

樣本 JSON 字串

線上和批次預測的基本格式為樣本資料張量清單,可以是簡單的值清單或 JSON 物件的成員,視您在訓練應用程式中設定輸入的方式而定:

此範例會顯示輸入張量和樣本索引鍵:

{"values": [1, 2, 3, 4], "key": 1}

如果 JSON 字串遵循下列規則,其組成內容可能會非常複雜:

  • 樣本資料的頂層必須是 JSON 物件,亦即鍵/值組合的字典。

  • 樣本物件的個別值可為字串、數字或清單。您無法嵌入 JSON 物件。

  • 清單僅能包含相同類型的項目 (包括其他清單)。您不能混合使用字串和數值。

下列字串經過格式化以方便閱讀。此字串會顯示包含標籤和圖片的物件,其中的圖片是 8 位元整數的 3 維陣列:

{
  "tag": "beach",
  "image": [
    [
      [138, 30, 66],
      [130, 20, 56],
      ...
    ],
    [
      [126, 38, 61],
      [122, 24, 57],
      ...
    ],
        ...
  ]
}

如果模型只採用單一輸入,您就不需要將其納入 JSON 物件中。比方說,如果您傳送含有四個值的單一張量 (在此案例中為向量),您就不需要格式化成下面這樣:

{"values": [1, 2, 3, 4]}

您可以將每個樣本格式化為一個清單:

[1, 2, 3, 4]
預測輸入的二進位資料

二進位資料無法格式化為 JSON 支援的 UTF-8 編碼字串。如果您的輸入中有二進位資料,則必須使用 base64 編碼來表示。下列是必要的特殊格式設定:

  • 您的編碼字串必須格式化為具有單一索引鍵 b64 的 JSON 物件。下列 Python 範例使用 base64 程式庫,對原始 JPEG 資料的緩衝區進行編碼以建立樣本:

    {"image_bytes":{"b64": base64.b64encode(jpeg_data)}}
    
  • 在 TensorFlow 模型程式碼中,您必須為輸入和輸出張量提供別名,讓輸入和輸出張量的結尾為「_bytes」。

線上預測輸入資料

將用於線上預測的輸入樣本當做 predict 要求的訊息內文來傳送。若要瞭解如何格式化要求和回應主體,請參閱預測要求的詳細資料

簡而言之:讓每個樣本變成清單中的一個項目,並將清單成員命名為 instances。因此,上述的簡單資料樣本 JSON 範例就會變成:

{"instances": [{"values": [1, 2, 3, 4], "key": 1}]}

使用 gcloud ai-platform projects predict 要求線上預測時,您傳入的檔案格式會與用於批次預測的格式相同。

批次預測輸入資料

如上所述,您會在一或多個包含 JSON 樣本資料列的文字檔案中,提供批次預測的輸入資料。輸入檔案並未包含資料欄標頭或簡易 JSON 語法以外的其他格式。

{"image": [0.0, 0.0, ... ], "key": 0}
{"image": [0.0, 0.0, ... ], "key": 1}
{"image": [0.0, 0.0, ... ], "key": 2}

樣本索引鍵

AI Platform 會使用分散式處理來執行批次預測工作。這表示資料分散於任意的虛擬機器叢集,並以無法預測的順序進行處理。若要讓傳回的預測和輸入樣本相符,您必須定義樣本索引鍵。樣本索引鍵為每個樣本都有的值,這個值在資料組的所有樣本中是獨一無二的。最簡單的索引鍵就是索引編號。

您應該在訓練應用程式中,透過圖片來傳送未受變更的索引鍵。如果資料還沒有樣本索引鍵,您可以在資料預先處理程序中新增樣本索引鍵。

執行階段版本

如果新版 AI Platform 已發佈,則針對舊版開發的模型可能會過時。如果您使用的有效模型版本已長期未變更,請特別注意。請務必參閱 AI Platform 版本管理政策,並確保您瞭解用於訓練模型版本的 AI Platform 執行階段版本

執行階段版本和預測

建立模型版本時,您可以指定支援的 AI Platform 執行階段版本,如此即可建立模型版本的預設設定。如果您沒有明確指定版本,AI Platform 就會使用目前預設的執行階段版本 1.0 來建立您的版本。

啟動批次預測工作時,您可以指定要使用的執行階段版本;這樣就能使用未部署於 AI Platform 上的模型來取得預測。對於已經部署的模型,請在工作請求中使用模型的預設執行階段版本。使用不同的執行階段版本可能會導致無法預期的錯誤。

您無法從 AI Platform 以外的模型要求線上預測,因此無法在要求中覆寫預設的執行階段版本。

針對模型版本設定的預設執行階段版本無法變更。若要為模型版本指定不同的執行階段版本,請使用您一開始採用的相同訓練成果來部署新版本。

地區和預測

Google Cloud Platform 利用地區,再細分為區域,來定義實體運算資源的地理位置。使用 AI Platform 部署預測的模型時,您會指定執行預測的預設地區。

當您啟動批次預測工作時,可以指定執行工作的地區,如此即會覆寫預設地區。線上預測一律會從模型指定的預設地區提供。

如要查看 AI Platform 服務 (包括模型訓練以及線上/批次預測) 的可用地區,請參閱地區指南

預測記錄

批次預測會產生可透過 Stackdriver Logging 查看的工作記錄。如果您在建立線上預測的模型時,將模型設定為產生記錄,那麼您也可以取得線上預測要求的記錄。請注意,在 AI Platform 中建立模型資源時,您必須指定此選項:讓模型的所有版本都產生線上預測的記錄,或是完全不留下記錄。

您可以在使用 projects.models.create 建立模型時,在您使用的模型資源中,將 onlinePredictionLogging 設為 true (在 Python 中為 True),以設定模型的線上預測記錄。 . 如您使用 gcloud 指令列工具來建立模型,請在執行 gcloud ai-platform models create 時包含 --enable-logging 標記。

從尚未部署的模型取得預測

您可以使用尚未部署至 AI Platform 服務的模型來要求批次預測。您不需指定模型或版本名稱,可以直接使用儲存了您要執行之模型的 Cloud Storage 位置 URI。

由於未部署模型沒有已建立的預設執行階段版本,因此您應在工作要求中明確設定。如果不這樣做,AI Platform 就會使用執行階段版本 1.0。

在其他方面,使用未部署模型的批次預測工作的行為和其他批次工作相同。

模型測試

您可以使用 AI Platform 預測服務來託管實際工作環境中的模型,也可以用來測試模型。傳統上,您要先測試模型,才能準備部署機器學習解決方案。測試的目的是要在一個近似實際使用情況的環境中測試模型。

請記住,您可以在服務上同時部署模型的多個版本。這表示必要時,您可一次使用模型的多個修訂版本來進行測試。此外,這樣也有助於在部署模型正式版的同時,測試後續的修訂版本。如同許多開發中的機器學習應用程式,新資料的可用性通常是限制因子。因此您應制定策略來分割既有資料並收集新資料以進行測試。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
TensorFlow 適用的 AI Platform