异步调度是一种利用模型推理耗时掩盖数据处理耗时的调度算法,它的出现解决了同步推理场景下CPU与NPU串行使用导致的时间浪费问题。 在同步推理场景下,一次推理的过程可以按照在CPU/NPU上执行分为以下三个阶段:
- 请求调度与准备阶段(CPU上执行)
- 模型推理与采样阶段(NPU上执行)
- 结果判断与响应阶段(CPU上执行)
其中,CPU与NPU任务由于使用的计算资源不同可以并行执行。为了提升系统整体的资源利用率和吞吐量,MindIE利用了上述特点、使用多线程实现了异步调度模式。 值得注意的是,在该模式下,已经进入EOS(终止推理)状态的请求会被重复计算一次,这会导致NPU计算资源和内存资源有微小的浪费。 因此,该特性通常适用于max_batch_size较大,且输出长度较长的场景。
- 支持PD混部和PD分离场景。
- 该特性不能和Look Ahead、Memory Decoding同时使用。
- 该特性暂不支持n、best_of、use_beam_search等与多序列推理相关的后处理参数。