下载
中文
注册

SplitFuse特性介绍

SplitFuse特性的目的是将长prompt request分解成更小的块,并在多个forward step中进行调度,只有最后一块的forward完成后才开始这个prompt request的生成。将短prompt request组合以精确填充step的空隙,每个step的计算量基本相等,达到所有请求平均延迟更稳定的目的。

两个关键行为:

  1. 长prompts被分解成更小的块,并在多个迭代中进行调度,只有最后一遍迭代执行输出生成token。

  2. 短prompts也可能切分成小块,以确保计算效率发挥最佳。

其优势主要包括:

  • 提高响应速度:减少长prompt处理延迟,提升用户体验。

  • 提升效率:通过合理组合短prompt,保持模型高吞吐量运行。

  • 增强一致性:统一前向传递大小,降低延迟波动,使生成频率更稳定。

限制与约束

  • Atlas 800I A2 推理产品硬件支持此特性。
  • LLaMa3.1-70b浮点模型和Qwen2-72B浮点模型支持对接此特性。
  • 该特性不能和PD分离、Multi-LoRA、并行解码、Prefix Cache、多机推理和长序列特性同时使用。
  • 该特性暂不支持与量化特性同时使用。
  • 该特性暂不支持python组图。
  • SplitFuse暂不支持以下后处理模式:
    • 忽略结束符继续推理。
    • 遇到stop词时答案是否包含stop词。
    • 回答是否跳过特殊token。
    • 推理在特定字符串停止。
    • 推理在特定token_id停止。
开启SplitFuse特性,需要配置的补充参数如下表1表2所示:
表1 SplitFuse补充参数1:ModelDeployConfig中的ModelConfig参数

配置项

取值类型

取值范围

配置说明

plugin_params

std::string

"{\"plugin_type\":\"splitfuse\"}"或""

不添加该字段或将该字段设置为""均表示默认不生效任何插件功能。

"{\"plugin_type\":\"splitfuse\"}"表示执行splitfuse。

约束若enableSplit开启或templateType为"Mix",则此处必须开启为splitfuse(特性不开启时非必填项)

表2 SplitFuse补充参数2:ScheduleConfig的参数

配置项

取值类型

取值范围

配置说明

templateType

std::string

"Standard"或"Mix"

"Mix"为prefill和decode可一起组batch。

"Standard"为默认值(特性不开启时为必填项),表示prefill和decode各自分别组batch。

policyType

uint32_t

  • 0
  • 4
  • 5
  • 6
  • 7
  • 0: 先入先出策略(FCFS)。
  • 4:短任务优先(SJF)。
  • 5:长任务优先(LJF)。
  • 6:多级反馈队列(Skip-Join MLFQ)。
  • 7:短任务优先多级反馈队列(SJF-MLFQ)。

建议:一般使用FCFS策略;对于追求极限吞吐的场景建议使用SJF,但是可能会导致长输入等待时间大幅增长;对于希望在吞吐和长输入等待取平衡的使用场景,建议使用Skip-Join MLFQ或SJF-MLFQ策略。

enableSplit

bool

  • true
  • false
  • true:会对prompt进行动态切分。
  • false:不会对prompt进行动态切分。

约束开启时templateType必须为Mix(特性不开启时非必填项)

splitType

bool

  • true
  • false
  • true:优化切分长度,仅对超出切分长度2倍的prompt进行切分。
  • false:按照配置的切分长度切分。

默认值:false。

splitStartType

bool

  • true
  • false
  • true:每次组batch时重置切分状态,重新判断当前是否满足splitStartBatchSize。
  • false:首次满足splitStartBatchSize条件后,不再重置切分状态。

默认值:false。

splitChunkTokens

uint32_t

>=1

当前参与组batch的总token个数。

默认值:512,建议不低于512。

splitStartBatchSize

uint32_t

[0,maxBatchSize]

当batch数达到该值时开启切分。

默认值:16。

执行推理

  1. 配置服务化参数。该特性需配合MindIE Service使用,按照表1表2在服务化的config.json文件中添加相应参数,config.json文件路径的详细说明请参考《MindIE安装指南》中“配置MindIE > 配置MindIE Server > 单机推理”章节中的软件包文件清单。
  2. 启动服务。启动服务化即为开启splitfuse特性。启动服务方法具体请参考《MindIE Service开发指南》的“快速开始 > 启动服务”章节