下载
中文
注册

配置参数说明

MindIE LLM适用的配置文件config.json格式如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{
    "Version" : "1.0.0",
    "LogConfig" :
    {
        "logLevel" : "Info",
        "logFileSize" : 20,
        "logFileNum" : 20,
        "logPath" : "logs/mindservice.log"
    },
    "BackendConfig" : {
        "backendName" : "mindieservice_llm_engine",
        "modelInstanceNumber" : 1,
        "npuDeviceIds" : [[0,1,2,3]],
        "tokenizerProcessNumber" : 8,
        "multiNodesInferEnabled" : true,
        "multiNodesInferPort" : 1120,
        "interNodeTLSEnabled" : false,
        "interNodeTlsCaPath" : "security/grpc/ca/",
        "interNodeTlsCaFiles" : ["ca.pem"],
        "interNodeTlsCert" : "security/grpc/certs/server.pem",
        "interNodeTlsPk" : "security/grpc/keys/server.key.pem",
        "interNodeTlsPkPwd" : "security/grpc/pass/mindie_server_key_pwd.txt",
        "interNodeTlsCrlPath" : "security/grpc/certs/",
        "interNodeTlsCrlFiles" : ["server_crl.pem"],
        "interNodeKmcKsfMaster" : "tools/pmt/master/ksfa",
        "interNodeKmcKsfStandby" : "tools/pmt/standby/ksfb",
        "ModelDeployConfig" :
        {
            "maxSeqLen" : 2560,
            "maxInputTokenLen" : 2048,
            "truncation" : false,
            "ModelConfig" : [
                {
                    "modelInstanceType" : "StandardMock",
                    "modelName" : "llama_65b",
                    "modelWeightPath" : "/home/data/Meta-Llama-3-8B/",
                    "worldSize" : 4,
                    "cpuMemSize" : 5,
                    "npuMemSize" : -1,
                    "backendType" : "ms",
                    "trustRemoteCode" : false
                }
            ]
        },
        "ScheduleConfig" :
        {
            "templateType" : "Standard",
            "templateName" : "Standard_LLM",
            "cacheBlockSize" : 128,
            "maxPrefillBatchSize" : 50,
            "maxPrefillTokens" : 8192,
            "prefillTimeMsPerReq" : 150,
            "prefillPolicyType" : 0,
            "decodeTimeMsPerReq" : 50,
            "decodePolicyType" : 0,
            "maxBatchSize" : 200,
            "maxIterTimes" : 512,
            "maxPreemptCount" : 0,
            "supportSelectBatch" : false,
            "maxQueueDelayMicroseconds" : 5000
        }
    }
}

配置文件参数说明

配置项

取值类型

取值范围

配置说明

Version

std::string

"1.0.0"

标注配置文件版本,当前版本指定为1.0.0,不支持修改。

LogConfig

map

-

日志相关配置。详情请参见LogConfig参数

BackendConfig

map

-

模型后端相关配置,包含调度、模型相关配置。详情请参见BackendConfig参数

LogConfig参数

配置项

取值类型

取值范围

配置说明

logLevel

std::string

  • "Verbose"
  • "Info"
  • "Warning"
  • "Warn"
  • "Error"
  • "Debug"
  • "Verbose":打印Verbose、Info、Warning和Error级别的日志。
  • "Info":打印Info、Warning和Error级别的日志。
  • "Warning":打印Warning和Error级别的日志。
  • "Warn": 打印Warning和Error级别的日志。
  • "Error":打印Error级别的日志。
  • "Debug":打印Verbose、Info、Warning和Error级别的日志。

必填,默认值:"Info"。

logPath

std::string

日志文件路径,长度<=4096。

日志路径设置限制与操作系统有关,且会受到spdlog三方库约束。因此建议配置的最大长度为1024,且符合目录规范。

支持绝对和相对路径。如果配置为相对路径,则代码中会取安装目录,最后拼接而成。

例如,假设MindIE Service的安装路径为“/opt/Ascend-mindie-service_{version}_linux-x86_64/”,当logPath="logs/mindservice.log",则其实际日志生成路径为:“/opt/Ascend-mindie-service_{version}_linux-x86_64/logs/mindservice.log”。

若配置路径不满足要求,则使用默认路径。

必填,默认值:"logs/mindservice.log"。

logFileSize

uint32_t

日志单个文件大小范围为:0-500。

日志文件大小,单位MB。

logFileNum

uint32_t

日志文件数量范围为:0-64。

日志文件数量。

BackendConfig参数

配置项

取值类型

取值范围

配置说明

backendName

std::string

长度1~50,只支持小写字母和下划线。且不以下划线作为开头和结尾。

推理后端名称,可以通过该参数获得后端实例。

必填,目前只支持:"mindieservice_llm_engine"。

modelInstanceNumber

uint32_t

[1, 10]

模型实例个数。

必填,默认值:1。

npuDeviceIds

std::vector<std::set<size_t>>

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

表示启用哪几张卡。对于每个模型实例分配的npuIds,使用芯片逻辑ID表示。

  • 在未配置ASCEND_RT_VISIBLE_DEVICES环境变量时,每张卡对应的逻辑ID可使用"npu-smi info -m"指令进行查询。
  • 若配置ASCEND_RT_VISIBLE_DEVICES环境变量时,可见芯片的逻辑ID按照ASCEND_RT_VISIBLE_DEVICES中配置的顺序从0开始计数。

    例如:

    ASCEND_RT_VISIBLE_DEVICES=1,2,3,4

    则以上可见芯片的逻辑ID按顺序依次为0,1,2,3。

    多机推理场景下该值无效,每个节点上使用的npuDeviceIds根据ranktable计算获得。

必填,默认值:[[0,1,2,3]]。

tokenizerProcessNumber

uint32_t

[1, 32]

tokenizer进程数。

必填,默认值:8。

multiNodesInferEnabled

bool

  • true
  • false
  • false:单机推理。
  • true:多机推理。

选填,默认值:false。

multiNodesInferPort

int32_t

[1024, 65535]

跨机通信的端口号,多机推理场景使用。

选填,默认值:1120。

interNodeTLSEnabled

bool

  • true
  • false

多机推理时,跨机通信是否开启证书安全认证。

  • true:开启证书安全认证。
  • false:关闭证书安全认证。

选填,默认值:true。取值为false时,忽略后续参数。

interNodeTlsCaPath

std::string

文件绝对路径长度<=4096。实际路径为工程路径+interNodeTlsCaFiles,上限与操作系统有关,最小值为1。

根证书路径,只支持软件包安装路径下的相对路径。

“interNodeTLSEnabled”="true"时生效,生效后必填。

默认值:"security/grpc/ca/"。

interNodeTlsCaFiles

std::set<std::string>

文件绝对路径长度<=4096。不可为空,并且interNodeTlsCaPath+interNodeTlsCaFiles路径长度上限与操作系统有关,最小值为1。

根证书名称列表

“interNodeTLSEnabled”="true"时生效,生效后必填。

默认值:["ca.pem"]。

interNodeTlsCert

std::string

建议文件路径长度<=4096。实际路径为工程路径+interNodeTlsCert,上限限制与操作系统有关,最小值为1。

服务证书文件路径,只支持软件包安装路径下的相对路径。

“interNodeTLSEnabled”="true"时生效,生效后必填。

默认值:"security/grpc/certs/server.pem"。

interNodeTlsPk

std::string

建议文件路径长度<=4096。实际路径为工程路径+interNodeTlsPk,上限限制与操作系统有关,最小值为1。

服务证书私钥文件路径,只支持软件包安装路径下的相对路径。

“interNodeTLSEnabled”="true"时生效,生效后必填。

默认值:"security/grpc/keys/server.key.pem"。

interNodeTlsPkPwd

std::string

建议文件路径长度<=4096。支持为空;若非空,则实际路径为工程路径+interNodeTlsPkPwd,上限限制与操作系统有关,最小值为1。

服务证书私钥加密密钥文件路径,只支持软件包安装路径下的相对路径。

“interNodeTLSEnabled”="true"时生效,生效后必填。

默认值:"security/grpc/pass/mindie_server_key_pwd.txt"。

interNodeTlsCrlPath

std::string

建议interNodeTlsCrlPath+interNodetlsCrlFiles路径长度<=4096。支持为空,若非空,则实际路径为工程路径+tlsCrlPath,上限限制与操作系统有关,最小值为1。

服务证书吊销列表文件夹路径。

“interNodeTLSEnabled”="true"时生效。

默认值:"security/grpc/certs/”。

interNodetlsCrlFiles

std::set<std::string>

建议interNodeTlsCrlPath+interNodetlsCrlFiles路径长度<=4096。支持为空,若非空,则tlsCrlPath+tlsCrlFiles路径长度上限与操作系统有关,最小值为1。

服务证书吊销列表名称列表。

“interNodeTLSEnabled”="true"时生效。

默认值:["server_crl.pem"]

interNodeKmcKsfMaster

std::string

建议文件路径长度<=4096。实际路径为工程路径+interNodeKmcKsfMaster,上限限制与操作系统有关,最小值为1。

KMC密钥库文件路径,只支持软件包安装路径下的相对路径。

“interNodeTLSEnabled”="true"时生效,生效后必填。

默认值:"tools/pmt/master/ksfa"。

interNodeKmcKsfStandby

std::string

建议文件路径长度<=4096。实际路径为工程路径+interNodeKmcKsfStandby,上限限制与操作系统有关,最小值为1。

KMC密钥库备份文件路径,只支持软件包安装路径下的相对路径。

“interNodeTLSEnabled”="true"时生效,生效后必填。

默认值:"tools/pmt/standby/ksfb"。

ModelDeployConfig

map

-

模型部署相关配置。详情请参见ModelDeployConfig参数

ScheduleConfig

map

-

调度相关配置。详情请参见ScheduleConfig参数

ModelDeployConfig参数

配置项

取值类型

取值范围

配置说明

maxSeqLen

uint32_t

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

最大序列长度。用户根据自己的推理场景选择maxSeqLen。

如果maxSeqLen大于模型支持的最大序列长度,可能会影响推理精度。

必填,默认值:2560。

maxInputTokenLen

uint32_t

(1,4194304]

输入token id的最大长度。

必填,默认值:2048。

maxInputTokenLen = min(maxInputTokenLen, maxSeqLen -1)

  • 当truncation=true时,

    请求的输入长度inputLen会自动截断,请求的实际输入长度inputLen = min(inputLen, maxInputLen)。

  • 当truncation=false时,

    若请求的输入长度inputLen > maxInputTokenLen,会返回Error。

truncation

bool

  • true
  • false

是否进行参数合理化校验拦截。

  • false:校验
  • true:不校验

选填,默认值:false。

ModelConfig

map

-

模型相关配置,包括后处理参数。详情请参见ModelConfig参数

ModelConfig参数

配置项

取值类型

取值范围

配置说明

modelInstanceType

std::string

  • "Standard"
  • "StandardMock"

模型类型。

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

选填,默认值:"Standard"。

modelName

std::string

由大写字母、小写字母、数字、中划线、点和下划线组成,且不以中划线、点和下划线作为开头和结尾,字符串长度小于或等于256。

模型名称。

必填,默认值:"llama_65b"。

modelWeightPath

std::string

文件绝对路径长度的上限与操作系统有关,最小值为1。

模型权重路径。程序会读取该路径下的config.json中torch_dtype和vocab_size字段的值,需保证路径和相关字段存在。

必填,默认值:"/data/atb_testdata/weights/llama1-65b-safetensors"。

该路径会进行安全校验,需要和执行用户的属组和权限保持一致。

worldSize

uint32_t

根据模型实际情况来决定。每一套模型参数中worldSize必须与使用的NPU数量相等。

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

多机推理场景下该值无效,worldSize根据ranktable计算获得。

必填,默认值:4。

cpuMemSize

uint32_t

上限根据显存和用户需求来决定。只有当maxPreemptCount为0时,才可以取值为0。

单个CPU中可以用来申请KV Cache的size上限。

必填,默认值:5,建议值:5,单位:GB。

npuMemSize

int32_t

  • -1
  • 整型数字,取值范围:(0, 4294967295]

单个NPU中可以用来申请KV Cache的size上限。

必填,默认值:-1,建议值:-1,单位:GB。

  1. 自动分配KV Cache:当配置值为-1时,KV Cache会根据可用显存自动进行分配。

    KV Cache快速计算公式:npuMemSize=单卡总内存*内存分配比例-单卡权重占用内存-运行时相关变量占用内存-系统占用内存。

    • 单卡总显存:可通过npu-smi info进行查看总显存。
    • 内存分配比例:默认值0.8;可通过环境变量NPU_MEMORY_FRACTION控制;当出现权重加载OOM情况时,可适当调高分配比例或使用更多显卡进行推理。
    • 单卡权重占用内存:约等于权重大小*类型大小(浮点为2/int8类型为1)/ 卡数;以实际加载权重为准。
    • 运行时相关变量占用内存:模型输入变量、输出变量、中间变量等内存。
    • 系统占用内存:可通过npu-smi info进行查看静息状态下使用显存。
  2. 手动分配KV Cache:当配置值大于0时,根据设置值会固定分配KV Cache大小。

backendType

std::string

  • "atb"
  • "ms"

对接的后端类型。

必填,默认值:"atb"。

trustRemoteCode

bool

  • true
  • false

是否信任模型权重路径下的自定义代码文件。默认不执行。若此参数设置为true,则transformers会执行用户权重路径下的自定义代码文件,这些代码文件的功能的安全性需由用户保证,请提前做好安全性检查。

必填,默认值:false。

说明:

设置成“false”后,如果出现模型加载失败,请查看python详细日志。查看方法具体请参见《MindIE日志及错误码参考》“日志参考 > MindIE LLM日志参考 > 查看日志”章节

ScheduleConfig参数

配置项

取值类型

取值范围

配置说明

templateType

std::string

  • "Standard"
  • "Mix"

推理类型。

  • Standard:PD混部场景,Prefill请求和Decode请求各自组batch。
  • Mix:Splitfuse特性相关参数,Prefill请求和Decode请求可以一起组batch。

必填,默认值:"Standard"。

templateName

std::string

当前取值只能为:"Standard_LLM"。

调度工作流名称。

必填,默认值:"Standard_LLM"。

cacheBlockSize

uint32_t

[1, 128]

KV Cache Block的size大小。

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

maxPrefillBatchSize

uint32_t

[1, maxBatchSize]

prefill阶段,一个batch可以组的最大请求数量。maxPrefillBatchSize和maxPrefillTokens谁先达到各自的取值就完成本次组batch。

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

必填,默认值:50。

maxPrefillTokens

uint32_t

[1, 4194304],且必须大于或等于maxSeqLen的取值。

prefill阶段,当前batch中所有input token总数。maxPrefillTokens和maxPrefillBatchSize谁先达到各自的取值就完成本次组batch。

必填,默认值:8192。

prefillTimeMsPerReq

uint32_t

[0, 1000]

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

必填,默认值:150。

prefillPolicyType

uint32_t

  • 0
  • 1
  • 2
  • 3

prefill阶段的调度策略。

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

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

必填,默认值:0。

decodeTimeMsPerReq

uint32_t

[0, 1000]

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

必填,默认值:50。

decodePolicyType

uint32_t

  • 0
  • 1
  • 2
  • 3

decode阶段的调度策略。

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

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

必填,默认值:0。

maxBatchSize

uint32_t

[1, 5000],且必须大于或等于maxPreemptCount参数的取值。

最大decode batch size。

  1. 首先计算block_num:Total Block Num = Floor(NPU显存/(模型网络数*cacheBlockSize*模型注意力头数*注意力头大小*Cache类型字节数*Cache数)),其中,Cache数=2;在tensor并行的情况下,block_num*world_size为实际的分配block数。

    如果是多卡,公式中的模型注意力头数*注意力大小的值需要均摊在每张卡上,即“模型注意力头数*注意力大小/卡数”。

    公式中的Floor表示计算结果向下取整。

  2. 为每个请求申请的block数量Block Num=Ceil(输入Token数/Block Size)+Ceil(最大输出Token数/Block Size)。输入Token数:输入(字符串)做完tokenizer后的tokenID个数;最大输出Token数:模型推理最大迭代次数和最大输出长度之间取较小值。

    公式中的Ceil表示计算结果向上取整。

  3. maxBatchSize=Total Block Num/Block Num。

必填,默认值:200。

maxIterTimes

uint32_t

[1, maxSeqLen-1]

模型全局最大输出长度。必填,默认值:512。

模型全局最大输出长度会影响每个用户请求得到的模型实际输出长度outputLen,规则如下:

outputLen = min(maxIterTimes, max_tokens, maxSeqLen - inputLen)或outputLen = min(maxIterTimes, max_new_tokens, maxSeqLen - inputLen)

说明:

max_tokens(或max_new_tokens)为用户请求报文中的参数,表示请求的最大输出Token个数。

maxPreemptCount

uint32_t

[0, maxBatchSize],当取值大于0时,cpuMemSize取值不可为0。

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

必填,默认值:0。

supportSelectBatch

bool

  • true
  • false

batch选择策略。

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

必填,默认值:false。

maxQueueDelayMicroseconds

uint32_t

[500, 1000000]

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

必填,默认值:5000。