⚠️ 注意:有限维护
本项目不再积极维护。现有版本仍可使用,但没有计划的更新、错误修复、新功能或安全补丁。用户应注意,可能无法解决漏洞问题。
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 将会失败。