我不会用 Triton 系列:Model Warmup 的使用

Model Warmup 的设置

这一篇非常简单,就是记录 Model Warmup 是如何使用的。本来是为了解决第一次推理太慢的问题,后来发现其实不适用 Model Warmup。不过都已经手写了 protobuf 了,官方的例子还藏在测试的 .sh 文件中,为了方便后续使用,就写一篇来做记录好了。

模型配置

其实就是看着 protobuf 的定义文件 将模型配置写出来。(手写 protobuf 唉~

model_warmup  [
  {
    name: "random_input"
    batch_size: 1
    inputs: {
      key: "INPUT0"
      value: {
        data_type: TYPE_FP32
        dims: [224, 224, 3]
        random_data: true
      }
    }
  }
]

一点说明

一开始写这个 Model Warmup 的时候,是为了处理特定场景的。

人脸识别模型中,启动的时候,需要使用其他模型去提取人脸库的特征,需要处理人脸库中的所有图片,导致第一次客户端请求很耗时。为此希望可以在启动的时候去提取,因此引入了 Model Warmup。

但是。

Triton 无法从 Python Backend 中获取模型依赖的信息,因而无法按照合理的顺序启动模型实例,然后进行推理。在这种情况下就不适用这个方案了。况且,人脸一般是海量的,最好是存放到一个数据库当中,而不是每次启动的时候去提取。

此外,我是试了一下 ensemble 进行 warmup,然后就会发现竟然不给使用 warmup...

E1111 02:19:14.474657 5983 model_repository_manager.cc:1890] Poll failed for model directory 'resnet50_ensemble': model_warmup can not be specified for ensemble 'resnet50_ensemble'

适用场景

那 Model Warmup 适合什么样的场景呢?适合 lazy initialization 的框架,这些框架在第一次推理的时候,会比较慢;在第一次推理的时候初始化,然后再进行推理;之后的推理就不会慢了。美团技术团队有一篇文章 就提到了这个问题:“模型切换毛刺问题”。

原文地址:https://www.cnblogs.com/zzk0/p/15538894.html