TorchServe 工作流程¶
TorchServe 可以用于通过 Workflow API 服务包装为 mar 文件和 Python 函数的 Pytorch 模型集合。
它利用 基于REST的API 进行工作流管理和预测。
在TorchServe中,一个工作流程被服务使用一个工作流程存档(.war),它包含以下内容:
工作流规范文件¶
一个工作流规范是一个YAML文件,它提供了要执行的模型的详细信息和定义数据流动的DAG。
YAML 文件被分割成几个部分
models包含全局模型参数m1,m2,m3所有相关的模型参数,这些参数将覆盖全局模型参数dag用于描述工作流程结构,哪些节点连接到其他哪些节点
E.g.
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>
工作流程模型属性¶
用户可以定义以下工作流程模型属性:
| 属性 | 描述 | 默认值 |
|---|---|---|
| min-workers | 每个工作流程模型启动的最小工人数量 | 1 |
| max-workers | 每个工作流程模型启动的最大工人数量 | 1 |
| batch-size | 每个工作流程模型使用的批次大小 | 1 |
| max-batch-delay | 最大批量延迟时间 PyTorch Serve 等待每个工作流程模型接收 batch_size 个请求。 |
50 ms |
| retry-attempts | 在特定工作流节点失败时重试尝试 | 1 |
| timeout-ms | 给定节点的超时时间以毫秒为单位 | 10000 |
这些属性可以定义为每个模型的全局值,并且可以在工作流程规范中的每个模型级别上进行覆盖。请参见上述示例以获取更多详细信息。
工作流DAG¶
用户可以使用工作流程规范中的dag部分定义数据流。dag由model部分中定义的模型名称和工作流程存档的处理文件中实现的Python函数名称组成。
顺序图¶
Eg.
dag:
function1 : [model1]
model1 : [model2]
model2 : [function2]
这对应于数据流
input -> function1 -> model1 -> model2 -> function2 -> output
并行DAG¶
E.g
dag:
pre_processing: [model1, model2]
model1: [aggregate_func]
model2: [aggregate_func]
这对应于数据流
model1
/ \
input -> preprocessing -> -> aggregate_func
\ /
model2
Handler文件¶
一个处理文件(Python)被提供在工作流程档案(.war)中,并且包含了工作流程dag中使用的所有函数。
Eg.
def preprocess(data, context):
pass
def postprocess(data, context):
pass
已知问题¶
每个工作流dag节点(模型/函数)将接收输入作为字节
只有以下输出类型由工作流程模型/函数支持:字符串、整数、列表、字典(包含字符串和整数)、JSON可序列化对象、字节数组和PyTorch张量。
工作流程的规模/更新不支持通过API进行。用户需要注销工作流并重新注册,以进行必要的更改。
快照不支持工作流,相关的模型也不会被捕捉到工作流中。
工作流版本化不被支持
注册工作流时,如果模型URL是公开的,并且文件名已经注册,那么将失败。