TorchServe 工作流程¶
TorchServe 可用于通过工作流程 API 提供作为 mar 文件和 Python 函数打包的 Pytorch 模型集合的服务。
它利用 基于 REST 的 API 来管理工作流程并进行预测。
工作流程使用工作流程存档 (.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>
工作流程模型属性¶
用户可以定义以下工作流程模型属性:
属性 | 描述 | 默认值 |
---|---|---|
min-workers | 为每个工作流程模型启动的最小工作程序数量 | 1 |
max-workers | 为每个工作流程模型启动的最大工作程序数量 | 1 |
batch-size | 每个工作流程模型使用的批量大小 | 1 |
max-batch-delay | TorchServe 等待每个工作流程模型接收batch_size 个请求的最大批量延迟时间。 |
50 毫秒 |
retry-attempts | 如果某个特定工作流程节点失败,则重试该节点的次数 | 1 |
timeout-ms | 给定节点的超时时间(毫秒) | 10000 |
这些属性可以定义为每个模型的全局值,并且可以在工作流程规范的每个模型级别覆盖这些属性。有关详细信息,请参考上面的示例。
工作流程 DAG¶
用户可以使用工作流程规范的 dag
部分定义工作流程的数据流。 dag
包含 model
部分中定义的模型名称以及工作流程存档的处理程序文件中实现的 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
处理程序文件¶
处理程序文件(Python)位于工作流程存档 (.war) 中,包含工作流程 dag 中使用的所有函数。
例如:
def preprocess(data, context):
pass
def postprocess(data, context):
pass
已知问题¶
每个工作流程 dag 节点(模型/函数)都将接收输入作为字节
工作流程模型/函数仅支持以下输出类型:字符串、整数、列表、字符串字典、整数字典、可 JSON 序列化的对象、字节数组和 Torch 张量
工作流程规模/更新不支持通过 API 进行。用户需要注销工作流程并重新注册所需的更改
不支持工作流程快照,并且工作流程中不会捕获相关模型
不支持工作流程版本控制
使用已注册的 mar 文件名称的公共模型 URL 注册工作流程将失败。