在本指南中,我們將介紹 Tensorflow Serving 的眾多設定點。
總覽
雖然大多數設定都與模型伺服器相關,但有很多方法可以指定 Tensorflow Serving 的行為
- 模型伺服器設定:指定模型名稱、路徑、版本政策和標籤、記錄設定等
- 監控設定:啟用並設定 Prometheus 監控
- 批次處理設定:啟用批次處理並設定其參數
- 其他標記:可用於微調 Tensorflow Serving 部署行為的眾多其他標記
模型伺服器設定
提供 --model_name
和 --model_base_path
標記 (或在使用 Docker 時設定 MODEL_NAME
環境變數) 是提供模型服務最簡單的方式。但是,如果您想要提供多個模型服務,或設定輪詢新版本頻率等選項,您可以透過編寫模型伺服器設定檔來達成目的。
您可以使用 --model_config_file
標記提供此設定檔,並指示 Tensorflow Serving 定期輪詢指定路徑中此設定檔的更新版本,方法是設定 --model_config_file_poll_wait_seconds
標記。
使用 Docker 的範例
docker run -t --rm -p 8501:8501 \
-v "$(pwd)/models/:/models/" tensorflow/serving \
--model_config_file=/models/models.config \
--model_config_file_poll_wait_seconds=60
重新載入模型伺服器設定
有兩種方法可以重新載入模型伺服器設定
設定
--model_config_file_poll_wait_seconds
標記,指示伺服器定期檢查--model_config_file
檔案路徑中是否有新的設定檔。向伺服器發出 HandleReloadConfigRequest RPC 呼叫,並以程式設計方式提供新的模型伺服器設定。
請注意,伺服器每次載入新的設定檔時,都會採取行動來實現新指定設定的內容,且僅限新的指定設定。這表示如果模型 A 存在於第一個設定檔中,但該檔案被僅包含模型 B 的檔案取代,則伺服器將載入模型 B 並卸載模型 A。
模型伺服器設定詳細資料
提供的模型伺服器設定檔必須是 ModelServerConfig 通訊協定緩衝區。
對於除了最進階的使用案例之外的所有情況,您都會想要使用 ModelConfigList 選項,這是 ModelConfig 通訊協定緩衝區的清單。以下是一個基本範例,然後我們再深入探討下方的進階選項。
model_config_list {
config {
name: 'my_first_model'
base_path: '/tmp/my_first_model/'
model_platform: 'tensorflow'
}
config {
name: 'my_second_model'
base_path: '/tmp/my_second_model/'
model_platform: 'tensorflow'
}
}
設定一個模型
每個 ModelConfig 都指定一個要提供的模型,包括其名稱和模型伺服器應在其中尋找要提供之模型版本的路徑,如上述範例所示。根據預設,伺服器將提供版本號碼最大的版本。您可以變更 model_version_policy 欄位來覆寫此預設值。
提供模型的特定版本服務
若要提供模型的特定版本服務,而不是一律轉換為版本號碼最大的版本,請將 model_version_policy 設定為「specific」,並提供您想要提供的版本號碼。例如,若要將版本 42 釘選為要提供的版本
model_version_policy {
specific {
versions: 42
}
}
如果最新版本發現問題,此選項適用於回復到已知的良好版本。
同時提供多個模型版本服務
若要同時提供多個模型版本服務,例如啟用以部分流量測試新的暫定版本,請將 model_version_policy 設定為「specific」,並提供多個版本號碼。例如,若要提供版本 42 和 43 服務
model_version_policy {
specific {
versions: 42
versions: 43
}
}
為模型版本指派字串標籤,以簡化測試和回復
有時,為模型版本新增間接層會很有幫助。您可以將別名 (例如「stable」) 指派給目前用戶端應查詢的版本,而無需讓所有用戶端知道他們應查詢版本 42。如果您想要將部分流量重新導向至暫定的測試模型版本,可以使用第二個別名「canary」。
您可以設定這些模型版本別名或標籤,如下所示
model_version_policy {
specific {
versions: 42
versions: 43
}
}
version_labels {
key: 'stable'
value: 42
}
version_labels {
key: 'canary'
value: 43
}
在上述範例中,您提供版本 42 和 43 服務,並將標籤「stable」與版本 42 建立關聯,將標籤「canary」與版本 43 建立關聯。您可以讓用戶端將查詢導向至「stable」或「canary」其中之一 (可能根據雜湊使用者 ID),方法是使用 ModelSpec 通訊協定緩衝區的 version_label 欄位,並在伺服器上向前移動標籤,而無需通知用戶端。在您完成測試版本 43 並準備將其升級為穩定版本後,您可以將設定更新為
model_version_policy {
specific {
versions: 42
versions: 43
}
}
version_labels {
key: 'stable'
value: 43
}
version_labels {
key: 'canary'
value: 43
}
如果您後續需要執行回復,可以還原為舊設定,將版本 42 作為「stable」。否則,您可以向前推進,方法是卸載版本 42 並在新的版本 44 準備就緒時載入,然後將測試標籤推進至 44,依此類推。
請注意,標籤只能指派給已經載入且可提供服務的模型版本。模型版本可用後,您可以即時重新載入模型設定,以將標籤指派給它。這可以使用 HandleReloadConfigRequest RPC 來達成,或者如果伺服器設定為定期輪詢檔案系統以取得設定檔,如上方所述。
如果您想要將標籤指派給尚未載入的版本 (例如,在啟動時間同時提供模型版本和標籤),則必須將 --allow_version_labels_for_unavailable_models
標記設定為 true,這允許將新標籤指派給尚未載入的模型版本。
請注意,這僅適用於新的版本標籤 (亦即,目前未指派給版本的標籤)。這是為了確保在版本交換期間,伺服器不會過早將標籤指派給新版本,從而在新版本載入時捨棄所有目標為該標籤的要求。
為了符合此安全檢查,如果重新指派已在使用的版本標籤,則必須僅將其指派給已載入的版本。例如,如果您想要將標籤從指向版本 N 移至版本 N+1,您可以先提交包含版本 N 和 N+1 的設定,然後提交包含版本 N+1 的設定,標籤指向 N+1 且沒有版本 N。
REST 用法
如果您使用 REST API 介面發出推論要求,而不是使用
/v1/models/<model name>/versions/<version number>
只需使用標籤請求版本,方法是將您的要求路徑構造成如下所示
/v1/models/<model name>/labels/<version label>
.
請注意,版本標籤僅限於單字字元序列,由字母數字字元和底線組成 (亦即 [a-zA-Z0-9_]+
)。
監控設定
您可以使用 --monitoring_config_file
標記指定包含 MonitoringConfig 通訊協定緩衝區的檔案,藉此為伺服器提供監控設定。以下範例
prometheus_config {
enable: true,
path: "/monitoring/prometheus/metrics"
}
若要從上述監控網址讀取指標,您首先需要設定 --rest_api_port
標記來啟用 HTTP 伺服器。然後,您可以設定 Prometheus 伺服器,方法是將 --rest_api_port
和 path
的值傳遞給它,以從模型伺服器提取指標。
Tensorflow Serving 會收集 Serving 以及核心 Tensorflow 擷取的所有指標。
批次處理設定
模型伺服器能夠在各種設定中批次處理要求,以實現更佳的輸送量。此批次處理的排程是針對伺服器上的所有模型和模型版本全域完成,以確保基礎資源的最佳利用率,無論伺服器目前提供多少模型或模型版本 (更多詳細資訊)。您可以設定 --enable_batching
標記來啟用此行為,並透過將設定傳遞至 --batching_parameters_file
標記來控制它。
批次處理參數檔案範例
max_batch_size { value: 128 }
batch_timeout_micros { value: 0 }
max_enqueued_batches { value: 1000000 }
num_batch_threads { value: 8 }
請參閱 批次處理指南以取得深入討論,並參閱 參數章節以瞭解如何設定參數。
其他標記
除了本指南迄今涵蓋的標記之外,我們在此處列出其他一些值得注意的標記。如需完整清單,請參閱原始碼。
--port
:用於接聽 gRPC API 的連接埠--rest_api_port
:用於接聽 HTTP/REST API 的連接埠--rest_api_timeout_in_ms
:HTTP/REST API 呼叫的逾時--file_system_poll_wait_seconds
:伺服器在每個模型的個別 model_base_path 中輪詢檔案系統以取得新模型版本的週期--enable_model_warmup
:使用資產中使用者提供的 PredictionLogs 啟用模型暖機。額外/目錄--mixed_precision=bfloat16
:啟用 BF16 自動混合精度