Post

torchserve模型服务

optmization strategies

torchserve模型服务
torchserve Architecture

基本处理单元

torchserve Architecture

Model对应内部是一个Handler,包含preProcessinginferencepostProcess三部分。

workflow是一个有向无环图,每个节点代表一个处理任务;上图显示整个流程包含前后处理以及三个模型节点。

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]

在workflow配置中,我们不仅可以设置工作流,还可以设置model节点的worker数量、输入batch-size大小,处理延迟,重试次数等

这里的worker对应一个线程,多个线程会运行多个model实例

Torchserve默认运行在单个JVM进程中,所有的模型加载和处理都在此进程中完成;每个workflow的节点会通过线程池处理并发请求

优化策略

并发度

这里涉及:

  • 每个模型的worker数量
  • 每个mdoel可以设置的GPU数量

单GPU上,不推荐通过调大worker数量来增加推理吞吐量。因为多线程模型实例,在GPU上会是顺序执行,不会是真正的多模型并行执行。

当然,如果模型前后处理也是耗时的任务,那么通过多workder可以拆分requests,并发执行前后处理,降低单worker的工作负载,提高吞吐。 如下图所示:

多GPU,通过多worker可以将模型实例分布在不同的GPU上,提高吞吐量的同时降低延迟

Micro-batching

该机制主要工作在Model层级

适用场景:

requests数量源源不断且数量较多时,为了提高系统吞吐

工作示意图如下:

可以将输入的requests想象成一个request流,preprocessinferencepostprocess对应流水线上的三个环节。

Frontend会积聚request为较大的一个batch,然后发送至backend,在backend再拆分成多个micro-batch来处理。

inference工作时,preprocesspostprocess也在进行处理,同时preprocesspostprocess支持并发处理。这样尽管三者存在依赖关系,流水线处理策略可以使得三个任务可以在时间上overlap,提高系统吞吐量。

参考配置如下:

batchSize: 32 #backend接收的batch大小
micro_batching:
  micro_batch_size: 4 #拆分的micro-batch大小
  parallelism:
    preprocess: 2 #预处理的线程数量
    inference: 1
    postprocess: 2 #后处理线程的数量

参考评测结果:

micro-batching

Slice & Concat

该机制主要工作在workflow层级

适用场景:

每个request对应的工作负荷较大

比如系统接收的request是时长5s至20s的视频,系统需要对视频的每一帧都要处理,而且前后帧可能需要做关联

此时micros-batching并不能带来吞吐量的提升而且延迟还较大,因为瓶颈点在于request处理本身

上图所示,对于输入的requests,将其进行拆分,分配到多个Model节点上,各个Model节点独自处理

参考信息

  1. torchserve interns
  2. torchserve micro-batching
This post is licensed under CC BY 4.0 by the author.