SplitFuse特性的目的是将长prompt request分解成更小的块,并在多个forward step中进行调度,只有最后一块的forward完成后才开始这个prompt request的生成。将短prompt request组合以精确填充step的空隙,每个step的计算量基本相等,达到所有请求平均延迟更稳定的目的。
两个关键行为:
长prompts被分解成更小的块,并在多个迭代中进行调度,只有最后一遍迭代执行输出生成token。
短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: 先入先出策略(FCFS)。
- 4:短任务优先(SJF)。
- 5:长任务优先(LJF)。
- 6:多级反馈队列(Skip-Join MLFQ)。
- 7:短任务优先多级反馈队列(SJF-MLFQ)。
建议:一般使用FCFS策略;对于追求极限吞吐的场景建议使用SJF,但是可能会导致长输入等待时间大幅增长;对于希望在吞吐和长输入等待取平衡的使用场景,建议使用Skip-Join MLFQ或SJF-MLFQ策略。
|
enableSplit
|
bool
|
|
- true:会对prompt进行动态切分。
- false:不会对prompt进行动态切分。
约束:开启时templateType必须为Mix(特性不开启时非必填项)。
|
splitType
|
bool
|
|
- true:优化切分长度,仅对超出切分长度2倍的prompt进行切分。
- false:按照配置的切分长度切分。
默认值:false。
|
splitStartType
|
bool
|
|
- true:每次组batch时重置切分状态,重新判断当前是否满足splitStartBatchSize。
- false:首次满足splitStartBatchSize条件后,不再重置切分状态。
默认值:false。
|
splitChunkTokens
|
uint32_t
|
>=1
|
当前参与组batch的总token个数。
默认值:512,建议不低于512。
|
splitStartBatchSize
|
uint32_t
|
[0,maxBatchSize]
|
当batch数达到该值时开启切分。
默认值:16。
|
执行推理
- 配置服务化参数。该特性需配合MindIE Service使用,按照表1及表2在服务化的config.json文件中添加相应参数,config.json文件路径的详细说明请参考《MindIE安装指南》中“配置MindIE > 配置MindIE Server > 单机推理”章节中的软件包文件清单。
- 启动服务。启动服务化即为开启splitfuse特性。启动服务方法具体请参考《MindIE Service开发指南》的“快速开始 > 启动服务”章节。