使用 TorchServe 部署 Model
TorchServe 是 PyTorch 提供給開發者部署 models 的工具(實驗階段)。也就是說開發者不用再寫 HTTP 服務去部署,直接使用 TorchServe 工具就可以了!
Last updated
TorchServe 是 PyTorch 提供給開發者部署 models 的工具(實驗階段)。也就是說開發者不用再寫 HTTP 服務去部署,直接使用 TorchServe 工具就可以了!
Last updated
系統架構 TorchServe 主要提供兩個 API:Management API 是用來設定 TorchServe 服務,如註冊新的 Model 服務、卸載 Model 服務,監看 TorchServe 的狀態;Inference API 用來取得辨識結果。
Frontend:指的是 request batching + Inference API Handler。request batching 是由 Management API 設定;Inference API Handler 則是由開發者自行撰寫
Worker Process:指的是一組辨識程式的運行(trained model + model handler),概念像是 Thread,可由 Management API 進行設定運行的數量。
Model Store:透過 TorchServe 工具壓縮後的 model package。
Backend:指的是管理 Worker Process 的程式,由 Management API 讓使用者管理。
使用指南 使用 TorchServe 需要準備三個檔案:Trained Model、Inference handler 、model Handler,將這三個東西使用 TorchServe Archiver 將其壓縮成 .mar 檔案。最後將 .mar 檔放入 TorchServe 裡,註冊後就佈署!
TorchServe 預設 8080 port 用於 inference ; 8081 port 用於管理 TorchServe 如下圖:
開始之前必須先安裝 TorchServe、torch-model-archiver,一個是用來跑 TorchServe 服務的,另一個是用來壓縮 Trained Model、Inference handler 、model Handler 的套件。
使用 torch-model-archiver 進行壓縮,會得到densenet161.mar檔案,
最後將該檔案註冊進去 TorchServe 就可以使用了。
指令如下:
可以使用 curl 進行驗證是否抓到 densenet161 model,並試著傳一張圖看看是否有成功運行。
TorchServe 是一個非常新的部署工具,debug 不知道如何 debug,用起來真的很崩潰。其實一開始壓縮的 .mar 檔,TorchServe 抓到之後會將其解壓縮至 /tmp 中。
因此當想要進行 debug 的時候,要切到 /tmp 資料夾中使用 python3 指令執行,如果沒問題,理論上 TorchServe 就能夠成功運作。
常用Management API 介紹 在這邊分享一些過去部署TorchServe常用用的一些API,首先在註冊的時候會不知道目前到底有沒有抓到Trained model?這時候可以使用List models API
此外就是考慮到效能面的話,或許有需要修改某一個model的Worker Process數量這種需求,也可利用PUT對某一個model修改Worker Process的數量。
就已feature_extractor這個model為例:首先先看一下model的資訊
Inference handler撰寫經驗談: inference handler文件相當的簡潔,在撰寫handler的時候可參考下面程式碼,大致上每個區塊的function要杜撰什麼都記載註解上。此外撰寫完,註冊進去TorchServe後要能夠在/tmp中找到,同時是可直接執行的狀態,若不是則需要繼續debug。
Debug有雷請小心: 1. 輸出只吃JSON格式 2. batch size 大小(如果batch size 為1,JSON List數量只能是1)
雖然預設輸出是JSON,打request進去的資料格式沒有規定喔,可利用像是protocol buffers這種技術進行傳遞是沒有問題的!
batchsize 修改方法:
curl -v -X PUT "http://localhost:8081/models/?batch_size="