LLMEngineInitialize
函数功能
初始化LLM Engine的资源,包括如下。
- GE资源初始化
- LLM模型分布式部署至指定全量/增量集群。
- LLM使用的队列、事件、UDF初始化。
- TP/PP通信group建链; 全量增量之间KV传输通信域建链。
函数原型
ge::Status LLMEngineInitialize(const std::vector<ge::ModelBufferData> &model_buffer_datas, const std::map<ge::AscendString, ge::AscendString> &options)
参数说明
参数名 |
输入/输出 |
描述 |
---|---|---|
model_buffer_datas |
输入 |
可选参数。当模型以ModelBufferData为结构时需要设置该参数。 |
options |
输入 |
初始化参数值。具体请参考表1。 |
参数名 |
可选/必选 |
描述 |
---|---|---|
LLM_OPTION_RUN_MODE |
可选 |
模型执行模式。取值如下:
不设置该参数时表示分离部署模式。 |
LLM_OPTION_ROLE |
必选 |
集群的类型。取值如下:
|
LLM_OPTION_OM_CACHE_PATH |
可选 |
om文件的绝对路径。多个之间使用分号";"分隔。 |
LLM_OPTION_GRAPH_PATH |
可选 |
合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下使用,该参数可选,与“LLM_OPTION_OM_CACHE_PATH”二选一,使用该参数表示使用直接传入graph。配置为graph文件的绝对路径。多个之间使用分号";"分隔。 例如:"/first_graph;/second_graph" |
LLM_OPTION_INPUT_NODE_DEPLOYMENT |
可选 |
合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下使用,前端切分场景下使用,前端编译模型已经切分时,通过该参数传入从前端om文件加载的每个切分图使用的device id,使用“;”分隔。 例如:“0;1;2;3” |
LLM_OPTION_CLUSTER_INFO |
必选 |
集群部署信息。示例如下。 { "cluster_id": 0, // 表示当前llm_engine的cluster_id,预留参数,暂时没用到 "logic_device_id": [ // 表示当前llm_engine需要部署的逻辑device id "0:0:0:0", "0:0:1:0" ], "listen_ip_info": [ // 只在server侧(全量llm engine)需要配置 { "ip": 1865362717, // server侧用到的device ip(小端地址) "port": 2509 // }, { "ip": 444083485, "port": 2509 } ] } |
LLM_OPTION_MODEL_INPUTS_SHAPES |
必选 |
模型Data输入的Shape。例如:"4,1;4,1"。 在合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下,需要同时输入prompt和decoder的data shape,使用“|”分隔,“|”前部分为prompt的shape,后部分为decoder的shape。例如:"1,1;1,1,1,2560;2,1,1 | 16,1;16,1,1,2560;2,16,1" |
LLM_OPTION_MODEL_INPUTS_DTYPES |
必选 |
模型Data输入的Dtype。例如:"3;3"。 在合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下,需要同时输入prompt和decoder的data dtype,使用“|”分隔,“|”前部分为prompt的type,后部分为decoder的type。例如:"9;1;9 | 9;1;9"。 |
LLM_OPTION_MODEL_KV_CACHE_SHAPES |
必选 |
KV的Shape。 合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下,表示prompt和decoder公用KV的Shape。 |
LLM_OPTION_MODEL_KV_CACHE_DTYPES |
必选 |
KV的Dtype。 合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下,表示prompt和decoder公用KV的DShape。 |
LLM_OPTION_MODEL_OUTPUT_NUM |
必选 |
模型的输出个数。 |
LLM_OPTION_INPUTS_BATCH_DIM_INDEX |
可选 |
当模型输入中存在batch size的维度不在第0维的时候设置。默认值是所有输入的batch size维度都在第0维。 "0;1;-1;0" 分号隔开,个数和模型输入个数匹配,-1表示输入不做batch,其他的数字表示batch在哪个dim上 |
LLM_OPTION_SYNC_KV_CACHE_WAIT_TIME |
可选 |
用于增量LLM Engine。 表示增量拉取kv cache的等待时间,单位ms。默认值1000ms。 |
LLM_OPTION_NN_EXECUTE_WAIT_TIME |
可选 |
用于增量llm engine和全量llm engine。 表示模型执行的超时时间,单位ms。默认值1000ms。 |
LLM_OPTION_PROCESS_REQUEST_WAIT_TIME |
可选 |
用于增量LLM Engine。 表示请求等待被处理的超时时间,防止请求长时间组不进batch,单位ms。默认值3000ms。 |
LLM_OPTION_PROMPT_AND_DOCODER_INTERLEAVED_STEP |
可选 |
只有合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下,可以使用该参数。 Prompt与decoder间隔调度次数,格式为m:n。 例如:"1,16" 默认值:"1,16" |
LLM_OPTION_INPUTS_BATCH_PADDING |
可选 |
合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下,该参数必选。 Decoder连续batch padding的值。 position_ids输入的位置需要提供一个大于等于prompt的padding后长度的值,其他位置需要填0。 例如:"0;0;2048" |
LLM_OPTION_GRAPH_COMPILER_CACHE_DIR |
可选 |
只有合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下,可以使用该参数。 图编译磁盘缓存目录,和LLM_OPTION_GRAPH_KEYS配合使用,LLM_OPTION_GRAPH_COMPILER_CACHE_DIR和LLM_OPTION_GRAPH_KEYS同时配置非空时图编译磁盘缓存功能生效。 |
LLM_OPTION_GRAPH_KEYS |
可选 |
只有合设部署模式(即LLM_OPTION_RUN_MODE=PrioritySchedule)下,可以使用该参数。 图唯一标识,可以有多个,个数需要和传入的图的个数一致。 和LLM_OPTION_GRAPH_COMPILER_CACHE_DIR配合使用,LLM_OPTION_GRAPH_COMPILER_CACHE_DIR和LLM_OPTION_GRAPH_KEYS同时配置非空时图编译磁盘缓存功能生效。 |
LLM_OPTION_BATCH_MODE |
可选 |
当LLM_OPTION_ROLE为Decoder时生效,标识该Decoder组batch的策略,取值如下:
不设置该option时默认为"auto"模式。 |
LLM_OPTION_POSTPROCESS_MODEL_OM_CACHE_PATH |
可选 |
后处理模型的om/graph文件的绝对路径。多个之间使用分号";"分隔。 分离部署模式下(即LLM_OPTION_RUN_MODE=SeparateSchedule )LLM_OPTION_ROLE为Decoder时生效。 例如:/**/dyn_inc_first1.om;/**/dyn_inc_first2.om |
LLM_OPTION_POSTPROCESS_MODEL_INPUTS_SHAPES |
可选 |
后处理模型Data输入的Shape 例如:"16,1;16,1,1,2560;2,16,1" 使能后处理模型时需要设置。 |
LLM_OPTION_POSTPROCESS_MODEL_INPUTS_DTYPES |
可选 |
后处理模型Data输入的Dtype。 例如:"9;1;9" 使能后处理模型时需要设置。 |
LLM_OPTION_POSTPROCESS_OUTPUT_NUM |
可选 |
后处理模型的输出个数。 使能后处理模型时需要设置。 例如:"2" |
LLM_OPTION_OUTPUT_MAPPING |
可选 |
使能后处理模型时,可通过该参数选择需要的输出,用于过滤掉不需要的输出,以提升性能。 格式为:${model_type}:${output_index},分号分割。 model_type取值当前只支持"postprocess"。 例:"postprocess:1;postprocess:2"表示返回后处理模型的output[1]与output[2] 该option不设置时,返回后处理模型的所有输出 |
LLM_OPTION_KV_CACHE_COUNTS |
可选 |
加载pipeline切分的模型需要设置,表示各stage中使用的kv的个数,分号分割。如: "30;50"表示有2个pipeline stage,分别使用30,50个kv。 |
LLM_OPTION_PIPELINE_INPUT_INDICES |
可选 |
各个stage的模型所需要的用户输入(LLM_OPTION_MODEL_INPUTS_SHAPES对应的)的索引,如:"0,1,2,3,4,5,6;6"表示,第一个stage用输入0,1,2,3,4,5,6,第二个stage用输入6。不设置的时候表示第一个stage使用所有的用户输入,后续stage不使用。 |
LLM_OPTION_HCOM_CLUSTER_CONFIG |
可选 |
模型使用到的hcom group的描述信息,格式为json string。如: { "comm_group": [ { "group_name": "prompt_group", "group_rank_list": "[0, 1]" }, { "group_name": "prompt_group_1", "group_rank_list": "[2, 3]" } ] } |
LLM_OPTION_PIPELINE_EXECUTION |
可选 |
是否使能交错式执行。取值如下:
不设置时默认为"enable"。 |
LLM_OPTION_ENABLE_PAGED_ATTENTION |
可选 |
是否开启PagedAttention优化,取值如下。
默认值为0。 |
LLM_OPTION_PAGED_ATTENTION_BLOCK_SIZE |
可选 |
每个block包含多少个token的k | v tensor,默认值为16。非PageAttention模式配置不生效。 PagedAttention优化模式(即LLM_OPTION_ENABLE_PAGED_ATTENTION=1 )场景下使用。 |
LLM_OPTION_PAGED_ATTENTION_BLOCKS_NUM |
可选 |
block的总数量。非PageAttention模式配置不生效。 PagedAttention优化模式(即LLM_OPTION_ENABLE_PAGED_ATTENTION=1 )场景下必选。 |
LLM_OPTION_PAGED_ATTENTION_MAX_SEQ_LEN |
可选 |
sequence的最大长度,包含prompt部分和generated部分。非PageAttention模式配置不生效。 PagedAttention优化模式(即LLM_OPTION_ENABLE_PAGED_ATTENTION=1 )场景下必选。 |
LLM_OPTION_PAGED_ATTENTION_MAX_SEQS_NUM |
可选 |
每个迭代最多处理多少数量的sequences。非PageAttention模式配置不生效。 对于动态shape模型,PagedAttention优化模式(即LLM_OPTION_ENABLE_PAGED_ATTENTION=1 )场景下必选。 |
LLM_OPTION_PAGED_ATTENTION_MAX_PROMPT_LEN |
可选 |
Prompt提示词的最大长度。非PageAttention模式配置不生效。 PagedAttention优化模式(即LLM_OPTION_ENABLE_PAGED_ATTENTION=1 )场景下必选。 |
LLM_OPTION_ENABLE_BUF_CFG |
可选 |
是否开启档位配置,有效值:1 或 0 。默认不开启,开启档位配置后在一些kv cache占用内存较大场景可以优化内存分配方案减少内存碎片。如果用户在正常使用时内存申请出现OOM,可以尝试使能该配置。 |
返回值
返回初始化好的LLM Engine。
异常处理
无。
约束说明
需要和LLMEngineFinalize配对使用并且在一个进程中不支持多次被调用,初始化成功后,任何退出前需要调用LLMEngineFinalize保证资源释放,否则会出现资源释放顺序不符合预期,导致问题。