大模型推理过程中,推理性能主要受访存速度限制,在此种条件下可见模型推理耗时主要与Forward Tokens的数量呈线性关系,如图1所示。因此,打开SplitFuse时,当需要增量推理时延满足特定控制服务级别目标(SLO),如90%轮次的增量推理时延(SLO_P90 decode时延)小于50ms时,可以通过控制SplitFuse特性的ChunkSize进行控制。需要说明的是减少ChunkSize在约束SLO指标的同时,可能会增加推理轮次,从而产生额外的开销导致总体吞吐的下降。
本章节简单介绍如何使用Splitfuse功能。
cd {MindIE安装目录}/latest/mindie-service/ vi conf/config.json
请参见以下配置样例,SplitFuse的相关配置已加粗显示,参数具体解释请参见表1。
"ModelDeployConfig": { "maxSeqLen" : 65536, "maxInputTokenLen" : 65536, "truncation" : false, "ModelConfig" : [ { "modelInstanceType": "Standard", "modelName" : "llama2-7b", "modelWeightPath" : "/home/models/llama2-7b/", "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 }
配置项 |
取值类型 |
说明 |
---|---|---|
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 |
./bin/mindieservice_daemon
benchmark \ --DatasetPath "/{数据集路径}/GSM8K" \ --DatasetType "gsm8k" \ --ModelName llama2-7b \ --ModelPath "/{模型权重路径}/llama2-7b" \ --TestType client \ --Http https://{ipAddress}:{port} \ --ManagementHttp https://{managementIpAddress}:{managementPort} \ --Concurrency 100 \ --RequestRate 5 \ --TaskKind stream \ --Tokenizer True \ --MaxOutputLen 512 \ --TestAccuracy True
测试集:GSM8K;并发数:100。
测试数据集:GSM8K;并发数:100;相对基线吞吐:101.59%;相对基线首Token时延:22.42%;