在LLM的推理场景中,传统的Auto-Regressive Decoding之所以慢,本质上是step-by-step导致了并发性不够。推理阶段属于内存带宽受限,计算资源过剩,因此一个很自然的想法,是采用处理器中常用的“Speculative Execution”优化技术,通过额外的计算资源完成推测执行,提升并发性。
目前支持两种并行解码算法,差异主要在于候选token生成的方式不同。
1. memory_decoding:利用trie-tree(前缀树)缓存模型历史的输入输出,从中获取候选token。
2. lookahead:基于jacobi迭代并辅以Prompt以及输出结果生成候选token。
限制与约束
- Atlas 800I A2 推理产品和Atlas 300I Duo 推理卡硬件支持此特性。
- LLaMa系列、Qwen1和Qwen1.5系列模型支持对接此特性。
- 并行解码支持的量化特性:W8A8量化与稀疏量化,其他量化特性暂不支持。
- 该特性不能和PD分离、Multi-LoRA、SplitFuse、Prefix Cache、长序列以及多机推理特性同时使用。
- 并行解码场景暂不支持python组图。
- 并行解码场景暂不支持流式推理。
- 并行解码惩罚类后处理仅支持重复惩罚。
- memory_decoding算法暂不支持open ai接口和多轮对话场景。
- lookahead和memory_decoding算法不可同时使能。
开启并行解码特性,需要配置的参数如表1~表5所示:
表1 memory_decoding补充参数1:ModelDeployConfig中的ModelConfig参数配置项
|
取值类型
|
取值范围
|
配置说明
|
plugin_params
|
std::string
|
plugin_type:memory_decoding
decoding_length:[1, 16]
dynamic_algo:true或false
|
- plugin_type配置memory_decoding,表示当前选择memory_decoding并行解码。
- decoding_length为memory_decoding算法中的参数,表示候选token的最大长度,默认值16。
- dynamic_algo为可选参数,配为true时表示开启动态自适应候选长度功能,默认值False。
- 配置示例:
{\"plugin_type\":\"memory_decoding\",\"decoding_length\": 16,\"dynamic_algo\": true}
或
{\"plugin_type\":\"memory_decoding\",\"decoding_length\": 16}
|
表2 memory_decoding补充参数2:ModelDeployConfig的参数配置项
|
取值类型
|
取值范围
|
配置说明
|
speculationGamma
|
uint32_t
|
与plugin参数配置有关
|
memory_decoding时,该值配置应大于等于decoding_length。
建议值:等于decoding_length。
|
表3 memory_decoding补充参数3:ScheduleConfig的参数配置项
|
取值类型
|
取值范围
|
配置说明
|
maxIterTimes
|
uint32_t
|
与plugin参数配置有关
|
如果dynamic_algo为true,该值需大于等于期望输出的长度+speculationGamma的值。
例:期望最大输出长度为512,则该值需要配置>=512+speculationGamma。
|
表4 lookahead补充参数1:ModelDeployConfig中的ModelConfig参数配置项
|
取值类型
|
取值范围
|
配置说明
|
plugin_params
|
std::string
|
plugin_type:la
level :[2, 16]
window :[1, 16]
guess_set_size :[1, 16]
|
plugin_type配置la,表示当前选择lookahead并行解码。
level/window/guess_set_size为lookahead算法中的N/W/G参数,默认值为4/5/5,且每个参数可配置的上限不超过16。
配置示例:
"{\"plugin_type\":\"la\",\"level\": 4,\"window\": 5,\"guess_set_size\": 5}"
|
表5 lookahead补充参数2:ModelDeployConfig的参数配置项
|
取值类型
|
取值范围
|
配置说明
|
speculationGamma
|
uint32_t
|
与plugin参数配置有关
|
lookahead中,配置值应大于等于(N-1)*(W+G)
建议值:等于(N-1)*(W+G)。
|
执行推理
- 配置服务化参数。该特性需配合MindIE Service使用,按照表1~表5在服务化的config.json文件中添加相应参数,config.json文件路径的详细说明请参考《MindIE安装指南》中“配置MindIE > 配置MindIE Server > 单机推理”章节中的软件包文件清单。
- 启动服务。启动服务方法具体请参考《MindIE Service开发指南》的“快速开始 > 启动服务”章节。