⚠️ 注意:有限維護
本專案不再積極維護。現有版本仍可使用,但沒有計劃的更新、錯誤修復、新功能或安全補丁。使用者應注意,可能無法解決漏洞問題。
TorchServe 工作流¶
TorchServe 可用於透過工作流 API 服務打包為 mar 檔案和 Python 函式的 PyTorch 模型集合。
它利用 基於 REST 的 API 進行工作流管理和預測。
工作流透過 workflow-archive (.war) 檔案在 TorchServe 上提供服務,該檔案包含以下內容
工作流規範檔案¶
工作流規範是一個 YAML 檔案,提供要執行模型的詳細資訊以及定義資料流的 DAG(有向無環圖)。
YAML 檔案分為幾個部分
models,包括全域性模型引數m1,m2,m3所有相關模型引數,將覆蓋全域性模型引數dag,描述工作流的結構,說明哪些節點的資料流入哪些其他節點
例如
models:
#global model params
min-workers: 1
max-workers: 4
batch-size: 3
max-batch-delay : 5000
retry-attempts : 3
timeout-ms : 5000
m1:
url : model1.mar #local or public URI
min-workers: 1 #override the global params
max-workers: 2
batch-size: 4
m2:
url : model2.mar
m3:
url : model3.mar
batch-size: 3
m4:
url : model4.mar
dag:
pre_processing : [m1]
m1 : [m2]
m2 : [m3]
m3 : [m4]
m4 : [postprocessing]
工作流模型¶
工作流規範的 models 部分定義了工作流中使用的模型。它使用以下語法
models:
<model_name>:
url: <local or public url for mar file>
工作流模型屬性¶
使用者可以定義以下工作流模型屬性
| 屬性 | 描述 | 預設值 |
|---|---|---|
| 最小工作程序數 | 為每個工作流模型啟動的最小工作程序數 | 1 |
| 最大工作程序數 | 為每個工作流模型啟動的最大工作程序數 | 1 |
| 批次大小 | 每個工作流模型使用的批次大小 | 1 |
| 最大批次延遲 | TorchServe 等待每個工作流模型接收 batch_size 數量請求的最大批次延遲時間。 |
50 毫秒 |
| 重試次數 | 特定工作流節點在失敗時的重試次數 | 1 |
| 超時(毫秒) | 給定節點的超時時間(毫秒) | 10000 |
這些屬性可以作為每個模型的全域性值進行定義,也可以在工作流規範的每個模型級別上被覆蓋。有關更多詳細資訊,請參閱上面的示例。
工作流 DAG¶
使用者可以使用工作流規範的 dag 部分定義工作流的資料流。dag 包含在 model 部分定義的模型名稱以及在 workflow-archive 的處理程式檔案中實現的 Python 函式名稱。
順序 DAG¶
例如
dag:
function1 : [model1]
model1 : [model2]
model2 : [function2]
對應的資料流如下
input -> function1 -> model1 -> model2 -> function2 -> output
並行 DAG¶
例如
dag:
pre_processing: [model1, model2]
model1: [aggregate_func]
model2: [aggregate_func]
對應的資料流如下
model1
/ \
input -> preprocessing -> -> aggregate_func
\ /
model2
處理程式檔案¶
工作流存檔 (.war) 中提供一個處理程式檔案 (python),其中包含工作流 DAG 中使用的所有函式。
例如
def preprocess(data, context):
pass
def postprocess(data, context):
pass
已知問題¶
每個工作流 DAG 節點(模型/函式)將接收位元組作為輸入
工作流模型/函式僅支援以下輸出型別:String, Int, List, Dict (String, int), Json 可序列化物件, 位元組陣列 和 Torch Tensor
透過 API 不支援工作流的擴充套件/更新。使用者需要先登出工作流,然後重新註冊幷包含所需的更改
工作流不支援快照,相關模型也不會包含在工作流中
不支援工作流版本控制
註冊的工作流如果使用已註冊 mar 檔名的公共模型 URL 將會失敗。