TorchServe 詳解:5 步將模型部署到生產環境

超神經HyperAI發表於2023-01-04

內容導讀

TorchServe 自 2020 年 4 月推出至今,經歷了 2 年多的發展,變得愈發成熟和穩定,本文將對 TorchServe 進行全面介紹。

TorchServe 是 PyTorch 中將模型部署到生產環境的首選解決方案。它是一個效能良好且可擴充套件的工具,用 HTTP 或 HTTPS API 封裝模型。
TorchServe 的前端是用 Java 實現的,可以處理多種任務,包括為部署模型分配 workers、負責客戶端和伺服器之間通訊等。其 Python 後端主要負責處理 inference service。


圖一:TorchServe performance Tuning 流程總覽
此外,它還支援 AB 測試、dynamic batching、logging 和 metrics 的多種 model serving 及 versioning,4 個公開 API 包括:

  • Inference API:監聽 8080 埠,預設情況下可透過 localhost 訪問,可以在 TorchServe configuration 中進行配置,並支援從模型中獲取 predictions。
  • Explanation API:在 hood 下使用 Captum 提供正在部署的模型的說明,並 監聽 8080 埠。
  • Management API:允許註冊或取消註冊並描述模型。它還允許使用者增加或減少部署模型的 workers 的數量。
  • Metrics API:在預設情況下監聽 8082 埠,使使用者可以監測正在部署的模型。

TorchServe 透過支援 batch inference 及部署模型的多個 workers,使得使用者得以擴充套件模型部署並處理峰值流量。這種擴充套件可透過 Management API 及 configuration file 中的設定來完成。此外,Metrics API 可以透過預設及自定義 metrics 來監測模型部署。
其他高階設定,如接收請求的佇列長度、a batch of inputs 的最大等待時長以及其他屬性,都可以透過 config file(啟動時可以傳遞到 TorchServe)進行配置。
用 TorchServe 部署模型的步驟包括:
1、安裝 TorchServe、model archiver 及其它依賴
2、選擇一個合適的預設 handler(如影像分類等)或建立一個自定義 handler
3、使用 Torcharchive 將 model artifacts 和 handler 打包成一個 .mar 檔案,並將其放入 model store
4、開始部署模型
5、執行推理

TorchServe 專案地址:
https://github.com/pytorch/se...

TorchServe 重點概念之 Handler

TorchServe 後端使用一個 handler 來載入模型、預處理接收到的資料、執行推理和對 response 進行 post process。TorchServe 中的 handler 是一個 Python script,所有模型初始化、預處理、推理和 post process 邏輯都包含在其中。
TorchServe 還提供了一個開箱即用的 handler,可用於影像分類、分割、目標檢測和文字分類等應用程式。此外,它還支援自定義 handler,以防預設 handler 不支援當下的 case。
自定義 handler 提供了很大的靈活性,這可能使 TorchServe 成為一個多框架服務工具。自定義的 handler 允許以自定義邏輯來初始化一個模型,也能讓這個模型從其他框架(如 ONNX)載入模型。
TorchServe 處理程式由四個主要函式組成,functions、initialize、inference 和 preprocess,每個函式返回一個列表。

下面的程式碼片段是自定義 handler 的示例。自定義 handler 繼承了 TorchServe 中的 BaseHandler,可以覆蓋任何主函式。該示例演示瞭如何用 handler 載入 Detectron2 模型,解決 figure detection 問題。該模型已經被匯出至 Torchscript,並使用 mod.half() 執行 FP16 推理。
!

TorchServe 重點概念之 Metrics

將模型部署到生產環境中,需要重點監測其能力表現。TorchServe 定期收集系統級 metrics,並允許新增自定義 metrics。
系統級 metrics 包括 CPU 利用率、主機上可用及已用的磁碟空間和記憶體,以及不同響應程式碼的請求數量(例如 200-300、400-500 和 500 以上)。自定義 metrics 可以新增到 Custom Metrics API。
Custom Metrics API:
https://github.com/pytorch/se...

TorchServe 將這兩組 metrics 記錄到不同的 log file 中。預設情況下,metrics 收集在:
系統 metrics: log directory/ts metrics. log
自定義 metrics:log directory/model _ metrics. log

TorchServe 的 Metrics API,預設情況下監聽埠 8082,並允許使用者查詢和監控收集到的 metrics。預設的 metrics endpoint 返回 Prometheus formatted metrics。可以用 curl 請求查詢 metrics,或者將 Prometheus Server 指向 endpoint,並將 Grafana 用於 Dashboard。
用 curl 請求查詢 metrics:
curl http://127.0.0.1:8082/metrics

用 mtail 將 logged metrics匯出到 Prometheus 的示例:https://github.com/google/mtail
透過在 Bashboard 中跟蹤這些 metrics,可以監視在離線 Benchmark 執行期間,偶爾出現或難以發現的 performance regressions。

What's Next

以上就是關於 TorchServe 的全部介紹。在下一節中,我們將藉助一個具體案例,講解影響部署模型到生產環境中的具體因素,以及如何用 TorchServe 對 Animated Drawings APP 進行調優。

相關文章