MindIE支持SplitFuse特性,当MindIE在默认情况下使用PD竞争策略,Prefill和Decode阶段请求不会同时被组合成一个batch。打开SplitFuse特性后,MindIE会在优先处理Decode请求的基础上,且batch小于maxBatchSize的情况下在同一批次中加入Prefill请求。
当该次处理的feedforward大于splitchunk tokens时,SplitFuse会对其进行切分,解释如下所示:
该特性可以通过{MindIE安装目录}/latest/mindie-service/conf/config.json配置文件中通过以下参数打开。
配置项 |
取值类型 |
说明 |
---|---|---|
ModelDeployConfig |
||
plugin_params |
std::string |
必选;
|
ScheduleConfig |
||
templateType |
std::string |
必选;
|
policyType |
Enum |
可选;
|
enableSplit |
bool |
必选;
|
splitType |
bool |
可选;
建议值:false;默认值:false |
splitStartType |
bool |
可选;
建议值:false;默认值:false |
splitChunkTokens |
uint32_t |
可选; 当前参与组batch的总token个数。 取值范围:[1,8192];建议值:16的整数倍;默认值:512 |
splitStartBatchSize |
uint32_t |
可选; 当batch数达到该值时开启切分。 取值范围:[0,maxBatchSize];建议值:16;默认值:16 |
大模型推理过程中,推理性能主要受访存速度限制,在此种条件下可见模型推理耗时主要与Forward Tokens的数量呈线性关系,如图1所示。因此,打开SplitFuse时,当需要增量推理时延满足特定控制服务级别目标(SLO),如90%轮次的增量推理时延(SLO_P90 decode时延)小于50ms时,可以通过控制SplitFuse特性的ChunkSize进行控制。需要说明的是减少ChunkSize在约束SLO指标的同时,可能会增加推理轮次,从而产生额外的开销导致总体吞吐的下降。
{MindIE安装目录}/latest/mindie-service/conf/config.json
"ModelDeployConfig": { "maxSeqLen" : 65536, "maxInputTokenLen" : 65536, "truncation" : false, "ModelConfig" : [ { "modelInstanceType": "Standard", "modelName" : "LLaMA3-70B", "modelWeightPath" : "/home/models/LLaMA3-70B/", "worldSize" : 8, "cpuMemSize" : 5, "npuMemSize" : -1, "backendType": "atb", "plugin_params": "{\"plugin_type\":\"splitfuse\"}" } ] }, "ScheduleConfig": { "templateType": "Mix", "templateName" : "Standard_LLM", "cacheBlockSize" : 128, "maxPrefillBatchSize" : 40, "maxPrefillTokens" : 65536, "prefillTimeMsPerReq" : 600, "prefillPolicyType" : 0, "decodeTimeMsPerReq" : 50, "decodePolicyType" : 0, "policyType": 0, "maxBatchSize" : 256, "maxIterTimes" : 512, "maxPreemptCount" : 0, "supportSelectBatch" : false, "maxQueueDelayMicroseconds" : 5000, "enableSplit": true, "splitType": false, "splitStartType": false, "splitChunkTokens": 256, "splitStartBatchSize": 16 }
benchmark \ --DatasetPath "/{数据集路径}/GSM8K" \ --DatasetType "gsm8k" \ --ModelName LLaMa3-70B \ --ModelPath "/{模型权重路径}/LLaMa3-70B" \ --TestType client \ --Http https://{ipAddress}:{port} \ --ManagementHttp https://{managementIpAddress}:{managementPort} \ --Concurrency 1000 \ --RequestRate 5 \ --TaskKind stream \ --Tokenizer True \ --MaxOutputLen 512
测试数据集:GSM8K;并发数:100;相对基线吞吐:101.59%;相对基线首Token时延:22.42%;
测试集:GSM8K;并发数:100。