配置参数说明

配置项取值请参考MindIE安装指南中的物理机部署MindIE > 配置MindIE-Server章节中的步骤4。

表1 ResourceParam参数

配置项

取值类型

取值范围

是否必填

配置说明

cacheBlockSize

uint32_t

[1, 128]

必填

kvcache block的size大小。

建议取值:128,其他值建议取为2的n次幂。

preAllocBlocks

uint32_t

[0, maxIterTimes/cacheBlockSize],maxIterTimes/cacheBlockSize向上取整。

必填

预分配策略:给请求分配好block数量。

如果设置了AIE_LLM_CONTINUOUS_BATCHING环境变量:

  • AIE_LLM_CONTINUOUS_BATCHING=1时打开CB,建议配置为maxIterTimes/cacheBlockSize。
  • AIE_LLM_CONTINUOUS_BATCHING=0时关闭CB,建议配置为maxSeqLen/cacheBlockSize。
  • 未设置环境变量时,则默认开启CB。
表2 LogParam参数

配置项

取值类型

取值范围

默认值

配置说明

logLevel

std::string

  • "Verbose"
  • "Info"
  • "Warning"
  • "Error"
  • "None"

必填

  • "Verbose":打印verbose、info、warning和error级别的日志。
  • "Info":打印info、warning和error级别的日志。
  • "Warning":打印warning和error级别的日志。
  • "Error":只会打印error级别的日志。
  • "None":不打印日志。

logPath

std::string

文件绝对路径长度<=4096。

必填

日志保存路径。相对路径,代码中会取到工程的绝对路径,最后拼接而成。目前只支持修改日志文件名,即logPath必须配置为"/logs/xxxx",其中xxxx为日志名称。

例如,假设MindIE-Service的安装路径为“/opt/Ascend-mindie-service_{version}_linux-x86_64/”,则默认的日志绝对路径为“/opt/Ascend-mindie-service_{version}_linux-x86_64/logs/mindservice.log”

表3 ServeParam参数

配置项

取值类型

取值范围

默认值

配置说明

ipAddress

std::string

IPv4地址。

必填

EndPoint提供的RESTfull接口绑定的IP地址。不建议绑定为0.0.0.0。

port

int32_t

[1024, 65535]

必填

EndPoint提供的RESTfull接口绑定的端口号。

如果采用物理机/宿主机IP地址通信,请自行保证端口号无冲突。

maxLinkNum

uint32_t

[1, 300]

必填

RESTfull接口请求并发数,EndPoint支持的最大并发请求数。

httpsEnabled

bool

  • true
  • false

必填

是否开启https通信。建议值true,为false时,后续参数忽略。

tlsCaPath

std::string

建议tlsCaPath+tlsCaFile路径长度<=2048。

“httpsEnabled”=“true”,必填

根证书路径。“httpsEnabled”=“true”生效。

tlsCaFile

std::set<std::string>

建议tlsCaPath+tlsCaFile路径长度<=2048。

“httpsEnabled”=“true”,必填

根证书名称列表。["ca.pem"],“httpsEnabled”=“true”生效。

tlsCert

std::string

建议文件路径长度<=2048。

“httpsEnabled”=“true”,必填

服务证书文件路径。“httpsEnabled”=“true”生效。

tlsPk

std::string

建议文件路径长度<=2048。

“httpsEnabled”=“true”,必填

服务证书私钥文件路径。“httpsEnabled”=“true”生效。

tlsPkPwd

std::string

文件路径长度<=2048。

“httpsEnabled”=“true”,必填

服务证书私钥加密密钥文件路径。“httpsEnabled”=“true”生效。

kmcKsMaster

std::string

建议文件路径长度<=2048。

“httpsEnabled”=“true”,必填

KMC密钥库文件路径。“httpsEnabled”=“true”生效。

kmcKsStandby

std::string

建议文件路径长度<=2048。

“httpsEnabled”=“true”,必填

KMC密钥库备份文件路径。“httpsEnabled”=“true”生效。

tlsCrl

std::string

建议文件路径长度<=2048。

“httpsEnabled”=“true”,必填

服务证书吊销列表文件路径。“httpsEnabled”=“true”生效。

如果推理服务所在的计算节点的网络为跨公网和局域网,绑定0.0.0.0的IP地址可能导致网络隔离失效,存在较大安全风险。故该场景下不建议EndPoint的IP地址绑定为0.0.0.0。

表4 TemplateParam参数

配置项

取值类型

取值范围

默认值

配置说明

templateType

std::string

"Standard"

必填

普通推理。

templateName

std::string

-

必填

工作流名称。

pipelineNumber

uint32_t

[1, 10]

必填

工作流数量。

其中,对于每一种模型,其全局参数配置参见表5

表5 ModelDeployParam参数

参数

取值类型

取值范围

是否必填

配置说明

maxSeqLen

uint32_t

上限根据显存和用户需求来决定,最小值需大于0。

必填

最大序列长度。输入的长度+输出的长度<=maxSeqLen,用户根据自己的推理场景选择maxSeqLen。

npuDeviceIds

std::set<size_t>

根据模型和环境的实际情况来决定。

必填

启用哪几张卡。对于每个模型实例分配的npuIds。

ModelParam

modelInstanceType

std::string

  • "Standard"
  • "StandardMock"

选填,默认值为"Standard"

模型类型。

  • 普通推理:modelInstanceType="Standard"
  • 假模型:modelInstanceType="StandardMock"

modelName

std::string

-

必填

模型名称。

modelWeightPath

std::string

文件绝对路径长度<=2048。

必填

模型权重路径。路径必需存在。

worldSize

uint32_t

根据模型实际情况来决定。

必填

启用几张卡推理。目前llama-65b至少启用四张NPU卡。

cpuMemSize

uint32_t

上限根据显存和用户需求来决定。

必填

CPU中可以用来申请kv cache的size上限。单位:GB。建议值:5。当“supportSwapPolicy”=“false”,可以配置为0。

npuMemSize

uint32_t

上限根据显存和用户需求来决定。

必填

NPU中可以用来申请kv cache的size上限。单位:GB。建议值:8。

快速计算公式:npuMemSize=(总空闲-权重/NPU卡数-后处理占用)*系数,其中系数取0.8。

backendType

std::string

  • "atb"
  • "mindformer"
  • "torchair"
  • "default"
  • ""

必填

当前对接后端类型,大小写不敏感。

表6 ScheduleParam参数

配置项

取值类型

取值范围

默认值

配置说明

maxPrefillBatchSize

uint32_t

[1, maxBatchSize]

必填

最大prefill batch size。maxPrefillBatchSize和maxPrefillTokens谁先达到各自的取值就完成本次组batch。

该参数主要是在明确需要限制prefill阶段batch size的场景下使用,否则可以设置为0(此时引擎将默认取maxBatchSize值)或与maxBatchSize值相同。

maxPrefillTokens

uint32_t

[4096, 409600]

必填

每次prefill时,当前batch中所有input token总数,不能超过maxPrefillTokens。maxPrefillTokens和maxPrefillBatchSize谁先达到各自的取值就完成本次组batch。

prefillTimeMsPerReq

uint32_t

[0, 1000]

必填

与decodeTimeMsPerReq比较,计算当前应该选择prefill还是decode。单位:ms,当supportSelectBatch”=“true”时有效。

prefillPolicyType

uint32_t

  • 0
  • 1
  • 3

必填

prefill阶段的调度策略。

  • 0:FCFS,先来先服务。
  • 1:STATE,prefill阶段等同于FCFS策略。
  • 3:MLFQ,多级反馈队列。

其中,3是0/1的组合。

decodeTimeMsPerReq

uint32_t

[0, 1000]

必填

与prefillTimeMsPerReq比较,计算当前应该选择prefill还是decode。单位:ms,当“supportSelectBatch”=“true”时有效。

decodePolicyType

uint32_t

  • 0
  • 1
  • 3

必填

decode阶段的调度策略。

  • 0:FCFS,先来先服务。
  • 1:STATE,decode阶段优先执行未被抢占和换出的请求。
  • 3:MLFQ,多级反馈队列。

其中,3是0/1的组合。

maxBatchSize

uint32_t

[1, 5000]

必填

最大decode batch size。

  1. 首先计算block_num:Total Block Num = Floor(NPU显存/(模型网络层数*cacheBlockSize*模型注意力头数*注意力头大小*Cache类型字节数*Cache数)),其中,Cache数=2;在tensor并行的情况下,block_num*world_size为实际的分配block数。
  2. 为每个请求申请的block数量Block Num=Ceil(输入Token数/Block Size)+Ceil(最大输出Token数/Block Size)。输入Token数:输入(字符串)做完tokenizer后的tokenID个数;最大输出Token数:模型推理最大迭代次数和最大输出长度之间取较小值。
  3. maxBatchSize=Total Block Num/Block Num。

maxIterTimes

uint32_t

[1, maxSeqLen-1]

必填

最大迭代次数,即一句话最大可生成长度。请求级别里面有一个max_output_length参数,maxIterTimes是一个全局设置,与max_output_length取小作为最终output的最长length。

maxPreemptCount

int32_t

[0, maxBatchSize]

必填

每一批次最大可抢占请求的上限,即限制一轮调度最多抢占请求的数量,最大上限为maxBatchSize,取值大于0则表示开启可抢占功能。

supportSelectBatch

bool

  • true
  • false

必填

batch选择策略。

  • false:表示每一轮调度时,优先调度和执行prefill阶段的请求。
  • true:表示每一轮调度时,根据当前prefill与decode请求的数量,自适应调整prefill和decode阶段请求调度和执行的先后顺序。

maxQueueDelayMicroseconds

uint32_t

[500, 1000000]

必填

队列等待时间,单位:us。

  • “npuDeviceIds”参数使用规则:
    1. 先执行下列命令,设置设备上加速库可见的卡。
      export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
    2. 然后“npuDeviceIds”表示在上述可见的卡中,按ASCEND_RT_VISIBLE_DEVICES设置的顺序,选取对应的卡。
    例如:
    • ASCEND_RT_VISIBLE_DEVICES=7,0,1,2,3,4,5,6
    • npuDeviceIds:[[0,1,3,4]]

      则最终分配的卡为7,0,2,3。

  • “npuMemSize”参数使用规则:
    • 为快速确定最佳显存参数取值范围,提供了快速计算公式。该公式计算的结果仅作为取值参考,为了达到最佳性能,可以适当向上调整该值并进行性能压力测试。
    • 如果设置的“npuMemSize”参数超过系统可分配最大显存值,会出现推理服务启动失败、推理服务启动卡死等异常现象,需要减小该值并重试。