TensorFlow Serving 是一個彈性且高效能的服務系統,適用於機器學習模型,專為生產環境設計。TensorFlow Serving 讓您能夠輕鬆部署新的演算法和實驗,同時保持相同的伺服器架構和 API。TensorFlow Serving 提供與 TensorFlow 模型的開箱即用整合,但可以輕鬆擴展以服務其他類型的模型。
主要概念
若要瞭解 TensorFlow Serving 的架構,您需要瞭解以下主要概念:
可服務項
可服務項 是 TensorFlow Serving 的核心抽象概念。可服務項 是用戶端用來執行運算 (例如,查閱或推論) 的基礎物件。
可服務項 的大小和粒度具有彈性。單一可服務項 可能包含任何內容,從查閱表的單一分片到單一模型,再到推論模型的元組。可服務項 可以是任何類型和介面,從而實現彈性和未來的改進,例如:
- 串流結果
- 實驗性 API
- 非同步操作模式
可服務項 不管理自己的生命週期。
一般可服務項 包括以下項目:
- TensorFlow SavedModelBundle (
tensorflow::Session
) - 用於嵌入或詞彙查閱的查閱表
可服務項版本
TensorFlow Serving 可以在單一伺服器執行個體的生命週期內處理一個或多個可服務項版本。這讓新的演算法組態、權重和其他資料能夠隨著時間載入。版本讓多個可服務項版本能夠同時載入,支援逐步推出和實驗。在服務時間,用戶端可以針對特定模型請求最新版本或特定版本 ID。
可服務項串流
可服務項串流 是可服務項的版本序列,依遞增的版本號碼排序。
模型
TensorFlow Serving 將模型表示為一個或多個可服務項。機器學習模型可能包含一個或多個演算法 (包括學習到的權重) 以及查閱或嵌入表。
您可以將複合模型表示為以下任一項:
- 多個獨立可服務項
- 單一複合可服務項
可服務項 也可能對應於模型的一部分。例如,大型查閱表可以跨多個 TensorFlow Serving 執行個體進行分片。
載入器
載入器 管理可服務項的生命週期。Loader API 能夠實現與特定學習演算法、資料或產品用例無關的通用基礎架構。具體而言,載入器標準化了用於載入和卸載可服務項的 API。
來源
來源 是尋找和提供可服務項的外掛模組。每個來源提供零個或多個可服務項串流。對於每個可服務項串流,來源會為其提供的每個可載入版本提供一個載入器執行個體。(來源 實際上與零個或多個 SourceAdapter 鏈結在一起,而鏈中的最後一個項目會發出載入器。)
TensorFlow Serving 的來源介面可以從任意儲存系統探索可服務項。TensorFlow Serving 包括常見的參考來源實作。例如,來源 可以存取 RPC 等機制,並且可以輪詢檔案系統。
來源 可以維護在多個可服務項或版本之間共用的狀態。這對於在版本之間使用差異 (diff) 更新的可服務項很有用。
期望版本
期望版本 代表應載入並準備就緒的可服務項版本集合。來源 一次針對單一可服務項串流傳達此可服務項版本集合。當來源 向管理員提供新的期望版本清單時,它會取代該可服務項串流的先前清單。管理員會卸載清單中不再出現的任何先前載入的版本。
請參閱進階教學課程,以瞭解版本載入在實務中如何運作。
管理員
管理員 處理可服務項的完整生命週期,包括:
- 載入可服務項
- 服務可服務項
- 卸載可服務項
管理員 監聽來源 並追蹤所有版本。管理員 嘗試滿足來源 的請求,但如果說所需的資源不可用,則可能會拒絕載入期望版本。管理員 也可能會延後「卸載」。例如,管理員 可能會等到較新版本完成載入後再卸載,並根據政策保證始終載入至少一個版本。
TensorFlow Serving 管理員 提供簡單、狹窄的介面 -- GetServableHandle()
-- 供用戶端存取載入的可服務項執行個體。
核心
使用標準 TensorFlow Serving API,TensorFlow Serving 核心 管理可服務項的以下方面:
- 生命週期
- 指標
TensorFlow Serving 核心 將可服務項和載入器視為不透明的物件。
可服務項的生命週期
廣義來說
- 來源 為可服務項版本建立載入器。
- 載入器 作為期望版本傳送至管理員,管理員 會載入這些版本並將其服務於用戶端請求。
更詳細地說
- 來源 外掛程式會為特定版本建立載入器。載入器 包含載入可服務項所需的任何中繼資料。
- 來源 使用回呼來通知管理員 期望版本。
- 管理員 套用已設定的版本政策,以判斷要採取的下一個動作,可能是卸載先前載入的版本或載入新版本。
- 如果管理員 判斷安全,它會將所需的資源提供給載入器,並告知載入器 載入新版本。
- 用戶端向管理員 請求可服務項,可以明確指定版本,也可以只請求最新版本。管理員 會傳回可服務項的控制代碼。
例如,假設來源 代表具有頻繁更新模型權重的 TensorFlow 圖形。權重儲存在磁碟上的檔案中。
- 來源 偵測到模型權重的新版本。它會建立一個載入器,其中包含指向磁碟上模型資料的指標。
- 來源 將期望版本通知動態管理員。
- 動態管理員 套用版本政策,並決定載入新版本。
- 動態管理員 告知載入器 有足夠的記憶體。載入器 使用新權重具現化 TensorFlow 圖形。
- 用戶端請求模型最新版本的控制代碼,而動態管理員 會傳回新版本可服務項的控制代碼。
擴充性
TensorFlow Serving 提供多個擴充點,您可以在其中新增功能。
版本政策
版本政策 指定單一可服務項串流中版本載入和卸載的順序。
TensorFlow Serving 包含兩種政策,可適應大多數已知的用例。這些政策是「可用性保留政策」(避免留下零個已載入的版本;通常在卸載舊版本之前載入新版本) 和「資源保留政策」(避免同時載入兩個版本,因此需要雙倍的資源;在載入新版本之前卸載舊版本)。對於模型服務可用性很重要且資源成本較低的 TensorFlow Serving 簡單用法,「可用性保留政策」將確保在新版本載入並準備就緒後再卸載舊版本。對於複雜的 TensorFlow Serving 用法,例如跨多個伺服器執行個體管理版本,「資源保留政策」需要最少的資源 (沒有用於載入新版本的額外緩衝區)。
來源
新的來源 可以支援新的檔案系統、雲端產品和演算法後端。TensorFlow Serving 提供一些常見的建構區塊,讓您可以輕鬆快速地建立新的來源。例如,TensorFlow Serving 包含一個公用程式,可將輪詢行為包裝在簡單的來源周圍。來源 與特定演算法和資料託管可服務項的載入器 密切相關。
請參閱「自訂來源」文件,以深入瞭解如何建立自訂來源。
載入器
載入器 是用於新增演算法和資料後端的擴充點。TensorFlow 就是其中一種演算法後端。例如,您將實作新的載入器,以便載入、提供存取權和卸載新型可服務項機器學習模型的執行個體。我們預期會為查閱表和其他演算法建立載入器。
請參閱「自訂可服務項」文件,以瞭解如何建立自訂可服務項。
批次處理器
將多個請求批次處理為單一請求可以顯著降低執行推論的成本,尤其是在存在硬體加速器 (例如 GPU) 的情況下。TensorFlow Serving 包含請求批次處理小工具,讓用戶端可以輕鬆地跨請求將其類型特定的推論批次處理為批次請求,以便演算法系統可以更有效率地處理這些請求。如需更多資訊,請參閱「批次處理指南」。