更新时间:2021-03-18 GMT+08:00
分享

Batch和超时

对于大部分模型,特别是小模型,一个批量的输入组成一个batch交给芯片做模型的推理可获得性能收益。使用batch推理将大大提高数据的吞吐率,同时也将提高芯片的利用率,在损失一定的时延情况下提升了整体的性能。因此,构建一个高性能应用应当在时延允许的情况下尽可能使用大batch。

框架为了用户能更方便、更灵活的使用batch,引入了超时机制,用户在config文件配置“is_repeat_timeout_flag”设置是否重复做超时处理,配置“wait_inputdata_max_time”设置超时时间。如果设置了超时参数,在超时后,系统调用Process函数时传入的全部是空指针,需要由用户自行编写超时处理的代码逻辑。用户编写代码逻辑时,可以在接收到数据时,将数据存储在队列中,等到足够的数据组成batch后再一并进行推理。这个队列可以使用框架提供的hiai::MultiTypeQueue。为了防止数据“饿死”在队列中,用户使用超时的设置接口,根据应用对时延的要求设置超时时间。超时时间到达时,框架会主动再次调用engine的主要处理流程。此时用户将队列中的数据取出处理,这样,数据就不会“饿死”在队列中了。

如果模型的输入是多Batch且用户分批发送各Batch的数据给模型管家(推理Engine)做推理,则需要用户添加如下代码逻辑:

  1. 需要用户在Device侧单独申请缓存空间存放各Batch的数据。
  2. 当Device侧的推理Engine接收到各Batch的数据后,用户需要将各Batch的数据拼接起来存放1申请的缓存空间中。
  3. 等Device侧的推理Engine接收的Batch个数与模型推理需要的Batch个数相等后,用户才可以使用缓存空间中的多Batch数据进行推理。
分享:

    相关文档

    相关产品