AidGen C++ 接口文档
AidLLM C++ 接口文档
💡注意
使用 AidGen-SDK C++ 开发需要了解如下基本事项:
- 编译时需要包含头文件,存放路径
/usr/local/include/aidlux/aidgen/aidllm.hpp - 链接时需要指定库文件,存放路径
/usr/local/lib/libaidgen.so - 所有接口均位于
aplux::aidllm命名空间下
推理后端类型.enum LLmBackendType
对于 AidllmSDK 而言,支持使用不同的推理后端框架来实现大模型的推理任务,涉及到的推理后端如下所示。
| 成员变量名 | 类型 | 值 | 描述 |
|---|---|---|---|
| TYPE_DEFAULT | uint8_t | 0 | 未知后端类型 |
| TYPE_GENIE | uint8_t | 1 | Genie推理后端 |
推理任务状态.enum LLMSentenceState
Aidllm 在推理任务的完成过程中,针对一次会话,可能会存在各种不同阶段的状态,开发者可以根据这些状态码来了解当前推理任务的运行情况。
| 成员变量名 | 类型 | 值 | 描述 |
|---|---|---|---|
| BEGIN | enum class | 0 | 会话开始部分 |
| CONTINUE | enum class | 1 | 会话持续推理中间内容 |
| END | enum class | 2 | 会话结尾部分 |
| COMPLETE | enum class | 3 | 当前会话成功完结 |
| ABORT | enum class | 4 | 当前会话被动终止 |
| ERROR | enum class | 5 | 当前会话推理错误 |
解释器运行状态.enum LLMState
Aidllm 解释器在运行过程中的整体状态,开发者可以通过查询此状态来了解解释器当前的工作情况。
| 成员变量名 | 类型 | 值 | 描述 |
|---|---|---|---|
| STANDIDLE | enum class | 0 | 空闲待机状态 |
| BUSYING | enum class | 1 | 正在忙碌推理中 |
| ABORT | enum class | 2 | 推理已被终止 |
| ERROR | enum class | 3 | 推理出现错误 |
日志级别.enum LogLevel
AidllmSDK 提供有设置日志的接口(后续会介绍),需要提供给接口当前使用哪个日志级别,所以就需要使用此日志级别枚举。
| 成员变量名 | 类型 | 值 | 描述 |
|---|---|---|---|
| INFO | uint8_t | 0 | 消息 |
| WARNING | uint8_t | 1 | 警告 |
| ERROR | uint8_t | 2 | 错误 |
| FATAL | uint8_t | 3 | 致命错误 |
全局函数
获取库版本.get_library_version()
获取当前 Aidllm 库的版本信息字符串。
| API | get_library_version |
| 描述 | 获取 Aidllm 库的版本信息 |
| 参数 | void |
| 返回值 | 包含库版本信息的字符串 |
std::string version = aplux::aidllm::get_library_version();
printf("Current aidllm library version: %s\n", version.c_str());设置日志级别.set_log_level()
设置 Aidllm 日志输出的最低级别,低于该级别的日志将不会被输出。
| API | set_log_level |
| 描述 | 设置日志的最低输出级别 |
| 参数 | log_level:LogLevel 枚举值,指定最低日志级别 |
| 返回值 | void |
aplux::aidllm::set_log_level(aplux::aidllm::LogLevel::ERROR);设置日志文件前缀.set_log_file_prefix()
设置日志文件名的前缀,用于将日志输出到指定前缀的文件中。
| API | set_log_file_prefix |
| 描述 | 设置日志文件名称的前缀 |
| 参数 | log_file_prefix:日志文件名前缀字符串 |
| 返回值 | void |
aplux::aidllm::set_log_file_prefix("aidllm_log_");推理回调函数类型.LLMCallback
Aidllm 推理过程中使用的回调函数类型定义。开发者需要实现该类型的回调函数来处理推理结果。
using LLMCallback = std::function<int32_t(LLMCallbackData& cb_data, void* user_data)>;💡注意
回调函数返回值类型为 int32_t,返回 0 表示正常继续推理,非 0 可用于控制推理流程。
推理回调函数数据类型.struct LLMCallbackData
Aidllm 在推理任务时,会使用开发者提供的回调函数,此数据类型就是传递给该回调函数的参数,开发者可以在自定义的回调函数中使用推理的结果数据。
成员变量列表
LLMCallbackData 结构体包含如下成员变量:
| 成员变量 | state |
| 类型 | enum LLMSentenceState |
| 默认值 | |
| 描述 | 当前推理会话的状态码 |
| 成员变量 | text |
| 类型 | std::string |
| 默认值 | |
| 描述 | 推理任务的结果字符/特殊状态码对应的提示消息 |
运行上下文类.class LLMContext
Aidllm 在运行过程中,可能需要设置一些配置信息,同时运行时的相关数据也需要传递,使用此运行上下文类型的对象来完成数据流转。
创建实例对象.create_instance()
想要设置运行时的上下文信息,当然就需要先有配置实例对象,此函数用于创建 LLMContext 类型的实例对象。
| API | create_instance |
| 描述 | 用于构造 LLMContext 类的实例对象 |
| 参数 | config_file:初始配置文件,其中可以配置后端类型、模型文件名称等关键信息 |
| 返回值 | 如果为 nullptr 值,说明函数构建对象失败;否则就是 LLMContext 对象的指针 |
// 创建配置实例对象,返回值为空则报错
std::unique_ptr<LLMContext> llm_context_ptr = LLMContext::create_instance("qwen2-7b/qwen2-7b.json");
if(llm_context_ptr == nullptr){
printf("Test sample: LLMContext create_instance failed.\n");
return EXIT_FAILURE;
}成员变量列表
LLMContext 对象用于管理运行时的配置信息,其中包含如下的这些参数:
| 成员变量 | config_file |
| 类型 | std::string |
| 默认值 | |
| 描述 | 初始配置文件,创建对象时传入的配置文件参数 |
| 成员变量 | backend_type |
| 类型 | LLmBackendType |
| 默认值 | LLmBackendType::TYPE_DEFAULT |
| 描述 | 在配置文件中会要求开发者指定推理后端。初始化操作解析配置文件完成之后,会覆写此字段,标识开发者指定的后端类型 |
| 成员变量 | model_file_vec |
| 类型 | std::vector<std::string> |
| 默认值 | |
| 描述 | 在配置文件中会要求开发者指定模型文件。初始化操作解析配置文件完成之后,会覆写此字段,标识开发者指定的模型文件 |
| 成员变量 | config_overwrite_options |
| 类型 | std::string |
| 默认值 | |
| 描述 | 通过设置此字段,可以指定推理过程中的某些关键参数,从而影响推理速度、推理结果等 |
| 成员变量 | android_tmp_directory |
| 类型 | std::string |
| 默认值 | |
| 描述 | 此字段只在 Android 平台下有效。通过设置此字段,可以指定系统用户拥有合法权限的目录,以供推理程序借用 |
解释器类.class LLMInterpreter
LLMInterpreter 类型的对象实例是执行推理操作的主体,用于执行具体的推理过程。
创建实例对象.create_instance()
想要执行推理相关的操作,推理解释器肯定必不可少,此函数就用于构建推理解释器的实例对象。
| API | create_instance |
| 描述 | 利用 LLMContext 对象所管理的各种数据,构造 LLMInterpreter 类型的对象 |
| 参数 | llm_context:LLMContext 实例对象的 unique_ptr 引用(std::unique_ptr<LLMContext>&) |
| reserve:保留字段,默认值为 nullptr | |
| 返回值 | 为 nullptr 值则说明函数构建对象失败;否则就是 LLMInterpreter 对象的 unique_ptr |
// 使用 LLMContext 对象指针来创建解释器对象,返回值为空则报错
std::unique_ptr<LLMInterpreter> llm_interpreter_ptr = LLMInterpreter::create_instance(llm_context_ptr);
if(llm_interpreter_ptr == nullptr){
printf("Test sample: LLMInterpreter create_instance failed.\n");
return EXIT_FAILURE;
}初始化操作.initialize()
解释器对象创建之后,需要执行一些初始化操作,比如环境检查、资源构建等。
| API | initialize |
| 描述 | 完成推理所需的相关初始化工作 |
| 参数 | enable_profiler:是否启用性能分析器,默认值为 false |
| reserve:保留字段,默认值为 nullptr | |
| 返回值 | 0 值则说明初始化操作执行成功,否则非 0 值就说明执行失败 |
// 解释器初始化,返回值非0则报错
int init_result = llm_interpreter_ptr->initialize();
if(init_result != EXIT_SUCCESS){
printf("Test sample: aidllm initialize failed.\n");
return EXIT_FAILURE;
}采样参数设置操作.set_sampler()
成功完成初始化操作之后,可以通过该函数设置采样参数,以控制大模型生成内容的随机性、多样性及质量。
| API | set_sampler |
| 描述 | 设置采样参数,用于控制大模型输出结果的随机性和多样性。 |
| 参数 | key:采样参数的名称,目前支持:
|
value:以字符串格式表示的参数值:
| |
| 返回值 | 0 值说明设置成功,非 0 值说明执行失败(例如 key 不合法或 value 格式不支持)。 |
// 设置采样参数
llm_interpreter_ptr->set_sampler("temp", "0.8");
llm_interpreter_ptr->set_sampler("top-k", "20");
llm_interpreter_ptr->set_sampler("top-p", "0.9");会话推理操作.run()
成功完成初始化操作之后,就可以跟大模型执行对话操作,开发者提供自定义的回调函数,用于处理会话过程中持续的推理结果。
| API | run |
| 描述 | 执行一次会话推理 |
| 参数 | prompt:提示词字符串 |
| cb:LLMCallback 类型的回调函数,用于处理会话过程中持续的推理结果 | |
| user_data:用户数据的指针,方便在自定义回调函数中使用这些数据,默认值为 nullptr | |
| 返回值 | 0 值则说明推理执行成功,否则非 0 值就说明执行失败 |
// 定义回调函数
LLMCallback dialog_callback = [&](LLMCallbackData& cb_data, void* user_data)->int32_t{
if(cb_data.state == LLMSentenceState::BEGIN){
printf("%s", cb_data.text.c_str());
}else if(cb_data.state == LLMSentenceState::CONTINUE){
printf("%s", cb_data.text.c_str());
fflush(stdout);
}else if(cb_data.state == LLMSentenceState::END){
printf("%s\n", cb_data.text.c_str());
}else if(cb_data.state == LLMSentenceState::COMPLETE){
printf("\n[COMPLETE]%s\n", cb_data.text.c_str());
}else if(cb_data.state == LLMSentenceState::ABORT){
printf("\n[ABORT]%s\n", cb_data.text.c_str());
}else if(cb_data.state == LLMSentenceState::ERROR){
printf("\n[ERROR]%s\n", cb_data.text.c_str());
}
return EXIT_SUCCESS;
};
// 执行推理
std::string prompt = "<|im_start|>user\n你好<|im_end|>\n<|im_start|>assistant\n";
int run_result = llm_interpreter_ptr->run(prompt, dialog_callback);
if(run_result != EXIT_SUCCESS){
printf("Test sample: aidllm run failed.\n");
return EXIT_FAILURE;
}查询推理状态.state()
在推理过程中,开发者可能需要查询解释器当前的运行状态,比如判断是否空闲、是否正在推理等。
| API | state |
| 描述 | 获取当前推理任务的运行状态 |
| 参数 | state:LLMState 类型引用,函数调用后会覆写此变量为当前状态 |
| 返回值 | 0 值则说明查询操作执行成功,否则非 0 值就说明执行失败 |
LLMState current_state = LLMState::STANDIDLE;
llm_interpreter_ptr->state(current_state);
printf("Current state: %d\n", (int)current_state);会话终止操作.abort()
用户可能在某些情况下,会想要打断当前正在执行推理的会话,此函数就用于实现推理终止。
⚠️注意
严禁在回调函数(LLMCallback)内部调用 abort 函数,否则可能导致死锁或未定义行为。
| API | abort |
| 描述 | 终止当前正在运行推理的会话 |
| 参数 | reserve:保留字段,默认值为 nullptr |
| 返回值 | 0 值则说明终止操作执行成功,否则非 0 值就说明执行失败 |
// 在另一个线程中终止推理
int abort_result = llm_interpreter_ptr->abort();
if(abort_result != EXIT_SUCCESS){
printf("Test sample: aidllm abort failed.\n");
return EXIT_FAILURE;
}完结释放操作.finalize()
前面提到解释器对象需要执行 initialize() 初始化相关操作,相应的,解释器也会需要执行一些释放操作,将之前创建的资源予以销毁等。
| API | finalize |
| 描述 | 完成必要的反初始化释放操作 |
| 参数 | reserve:保留字段,默认值为 nullptr |
| 返回值 | 0 值则说明执行释放操作成功,否则非 0 值就说明执行失败 |
// 执行解释器反初始化过程,返回值非0则报错
int fin_result = llm_interpreter_ptr->finalize();
if(fin_result != EXIT_SUCCESS){
printf("Test : aidllm finalize failed.\n");
return EXIT_FAILURE;
}获取性能分析器.get_profiler()
当初始化时启用了性能分析器(enable_profiler = true),可以通过此函数获取性能分析器对象指针,用于性能数据的采集与分析。具体用法参见后文「性能分析 (Profiler) C++ 接口文档」章节。
| API | get_profiler |
| 描述 | 获取性能分析器对象的指针 |
| 参数 | void |
| 返回值 | 如果性能分析器已启用,返回 Profiler 对象指针;如果未启用,返回 nullptr |
// 启用性能分析器进行初始化
int init_result = llm_interpreter_ptr->initialize(true);
// 获取性能分析器
aplux::aidgen::Profiler* profiler = llm_interpreter_ptr->get_profiler();AidMLM C++ 接口文档
💡注意
使用 AidMLM-SDK C++ 开发需要了解如下基本事项:
- 编译时需要包含头文件,存放路径
/usr/local/include/aidlux/aidgen/aidmlm.hpp - 链接时需要指定库文件,存放路径
/usr/local/lib/libaidgen.so - 所有接口均位于
aplux::aidmlm命名空间下 - AidMLM 用于多模态大模型(视觉语言模型)的推理,目前支持 Qwen2-VL 和 Qwen2.5-VL 系列模型
推理状态.enum AidLLMState
AidMLM 在推理任务过程中,针对一次会话,可能会存在各种不同阶段的状态,开发者可以根据这些状态码来了解当前推理任务的运行情况。
| 成员变量名 | 类型 | 值 | 描述 |
|---|---|---|---|
| STAND | enum class | 0 | 尚未工作 |
| START | enum class | 1 | 推理开始 |
| BUSYING | enum class | 2 | 正在推理中 |
| FINISH | enum class | 3 | 推理结束 |
| COMPLETE | enum class | 4 | 推理过程完整结束或截断结束 |
| WAITING | enum class | 5 | 当前Token解码失败,等待下一次解码 |
| ABORT | enum class | 6 | 当次推理被开发者提前终止 |
| ERROR | enum class | 7 | 异常原因导致的推理失败 |
日志级别.enum LogLevel
| 成员变量名 | 类型 | 值 | 描述 |
|---|---|---|---|
| INFO | uint8_t | 0 | 消息 |
| WARNING | uint8_t | 1 | 警告 |
| ERROR | uint8_t | 2 | 错误 |
| FATAL | uint8_t | 3 | 致命错误 |
模型类型.enum ModelType
指定当前使用的多模态模型类型。
| 成员变量名 | 类型 | 值 | 描述 |
|---|---|---|---|
| RESERVED | enum class | 0 | 保留类型 |
| QWEN2VL | enum class | 1 | Qwen2-VL 模型 |
| QWEN25VL | enum class | 2 | Qwen2.5-VL 模型 |
推理回调函数数据类型.struct AidLLMCBData
AidMLM 在推理任务时,会使用开发者提供的回调函数,此数据类型就是传递给该回调函数的参数。
成员变量列表
| 成员变量 | state |
| 类型 | enum AidLLMState |
| 默认值 | |
| 描述 | 当前推理会话的状态码 |
| 成员变量 | text |
| 类型 | std::string |
| 默认值 | |
| 描述 | 推理任务的结果字符/特殊状态码对应的提示消息 |
推理回调函数类型.AidLLMCB
AidMLM 推理过程中使用的回调函数类型定义。
using AidLLMCB = std::function<void(AidLLMCBData& cb_data, void* user_data)>;图像数据类型.struct ImageData
用于向多模态模型传递图像数据的结构体。
成员变量列表
| 成员变量 | img_pos |
| 类型 | int |
| 默认值 | -1 |
| 描述 | 图像在提示词中的位置索引。如果为 -1,表示图像追加在提示词末尾 |
| 成员变量 | img_data |
| 类型 | uint8_t* |
| 默认值 | nullptr |
| 描述 | 图像数据指针,指向 RGB 格式的图像像素数据,需要开发者预先 resize 到模型要求的宽高 |
初始化参数类型.struct AidmlmInitParam
AidMLM 初始化时需要的各项参数配置。
成员变量列表
| 成员变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| vision_model_path | std::string | 视觉编码器模型文件路径 | |
| pos_emb_cos_path | std::string | 位置编码余弦权重文件路径 | |
| pos_emb_sin_path | std::string | 位置编码正弦权重文件路径 | |
| embedding_weights_path | std::string | 词嵌入权重文件路径 | |
| window_attention_mask_path | std::string | 窗口注意力掩码文件路径(仅 Qwen2.5-VL 需要) | |
| full_attention_mask_path | std::string | 全注意力掩码文件路径(仅 Qwen2.5-VL 需要) | |
| llm_model_path_vec | std::vector<std::string> | LLM 模型文件路径列表 | |
| dbg_opt | std::string | 调试选项字符串 | |
| type | ModelType | ModelType::RESERVED | 多模态模型类型 |
| qwen2vl_cfg | Qwen2VLConfig | Qwen2-VL 模型配置 | |
| qwen25vl_cfg | Qwen25VLConfig | Qwen2.5-VL 模型配置 | |
| enable_profiler | bool | false | 是否启用性能分析器 |
| genie_log_level | int | 1 | Genie 后端日志级别(1=ERROR, 2=WARN, 3=INFO, 4=VERBOSE) |
| use_shared_buffer | bool | false | 是否使用共享缓冲区 |
| use_mmap | bool | false | 是否使用内存映射加载模型 |
| use_genie_load_model_ex | bool | false | 是否使用 Genie 扩展模型加载方式 |
模型配置结构体
AidMLM 提供了预定义的模型配置结构体,用于指定不同分辨率和参数规模下的视觉模型配置。开发者可以根据所使用的模型选择对应的配置。
| 配置结构体名 | 模型 | 图像宽高 | 嵌入维度 |
|---|---|---|---|
| Qwen2VLConfig | Qwen2-VL | 644×644 | 1536 |
| Qwen25VLConfig | Qwen2.5-VL 3B | 392×392 | 2048 |
| Qwen25VL3B644Config | Qwen2.5-VL 3B | 644×644 | 2048 |
| Qwen25VL3B672Config | Qwen2.5-VL 3B | 672×672 | 2048 |
| Qwen25VL7B392Config | Qwen2.5-VL 7B | 392×392 | 3584 |
| Qwen25VL7B644Config | Qwen2.5-VL 7B | 644×644 | 3584 |
| Qwen25VL7B672Config | Qwen2.5-VL 7B | 672×672 | 3584 |
全局函数
获取库版本.get_library_version()
| API | get_library_version |
| 描述 | 获取 AidMLM 库的版本信息 |
| 参数 | void |
| 返回值 | 包含库版本信息的字符串 |
std::string version = aplux::aidmlm::get_library_version();
printf("Current aidmlm library version: %s\n", version.c_str());多模态推理类.class Aidmlm
Aidmlm 类型的对象实例是执行多模态推理操作的主体,用于执行视觉语言模型的推理过程。
构造与析构
Aidmlm 对象通过默认构造函数创建。
aplux::aidmlm::Aidmlm mlm_ctx;设置日志级别.set_log_level()
静态方法,设置 AidMLM 日志输出的最低级别。
| API | set_log_level |
| 描述 | 设置日志的最低输出级别(静态方法) |
| 参数 | log_level:LogLevel 枚举值 |
| 返回值 | void |
aplux::aidmlm::Aidmlm::set_log_level(aplux::aidmlm::LogLevel::INFO);设置日志文件前缀.set_log_file_prefix()
静态方法,设置日志文件名的前缀。
| API | set_log_file_prefix |
| 描述 | 设置日志文件名称的前缀(静态方法) |
| 参数 | log_file:日志文件名前缀字符串 |
| 返回值 | void |
aplux::aidmlm::Aidmlm::set_log_file_prefix("./test_mlm");初始化操作.initialize()
完成多模态模型的加载和推理环境初始化。
| API | initialize |
| 描述 | 加载模型并完成推理所需的初始化工作 |
| 参数 | param:AidmlmInitParam 结构体引用,包含模型路径、配置等初始化参数 |
| enable_profiler:是否启用性能分析器,默认值为 false | |
| 返回值 | 0 值则说明初始化操作执行成功,否则非 0 值就说明执行失败 |
aplux::aidmlm::AidmlmInitParam init_param;
init_param.type = aplux::aidmlm::ModelType::QWEN25VL;
init_param.vision_model_path = "/path/to/veg.serialized.bin.aidem";
init_param.pos_emb_cos_path = "/path/to/position_ids_cos.raw";
init_param.pos_emb_sin_path = "/path/to/position_ids_sin.raw";
init_param.embedding_weights_path = "/path/to/embedding_weights.raw";
init_param.window_attention_mask_path = "/path/to/window_attention_mask.raw";
init_param.full_attention_mask_path = "/path/to/full_attention_mask.raw";
init_param.llm_model_path_vec.push_back("/path/to/llm_model.serialized.bin.aidem");
init_param.use_genie_load_model_ex = true;
aplux::aidmlm::Aidmlm mlm_ctx;
if(mlm_ctx.initialize(init_param) < 0){
printf("AidMLM initialize failed.\n");
return EXIT_FAILURE;
}采样参数设置操作.set_sampler()
成功完成初始化操作之后,可以通过该函数设置采样参数,以控制大模型生成内容的随机性、多样性及质量。
| API | set_sampler |
| 描述 | 设置采样参数,用于控制大模型输出结果的随机性和多样性。 |
| 参数 | key:采样参数的名称,目前支持:
|
value:以字符串格式表示的参数值:
| |
| 返回值 | 0 值说明设置成功,非 0 值说明执行失败(例如 key 不合法或 value 格式不支持)。 |
mlm_ctx.set_sampler("top-k", "20");
mlm_ctx.set_sampler("temp", "0.8");会话推理操作.run()
成功完成初始化操作之后,就可以向多模态模型发送图文组合的提示词执行推理。
💡注意
此函数非线程安全,同一时刻只能有一个线程调用 run 方法。
| API | run |
| 描述 | 执行一次多模态会话推理 |
| 参数 | prompt:用户提示词字符串 |
| sys_prompt:系统提示词字符串 | |
| img_vec:ImageData 向量引用,包含需要输入的图像数据 | |
| cb:AidLLMCB 类型的回调函数,用于处理推理结果 | |
| starting_round:是否为新一轮对话的起始(true 为新对话起始) | |
| 返回值 | 0 值则说明推理执行成功,否则非 0 值就说明执行失败 |
// 定义回调函数
void my_callback(aplux::aidmlm::AidLLMCBData& cb_data, void* user_data){
if(cb_data.state == aplux::aidmlm::AidLLMState::START){
printf("[BOS]%s", cb_data.text.c_str());
}else if(cb_data.state == aplux::aidmlm::AidLLMState::FINISH){
printf("[EOS]%s\n", cb_data.text.c_str());
}else if(cb_data.state == aplux::aidmlm::AidLLMState::ERROR){
printf("[ERROR]%s\n", cb_data.text.c_str());
}else{
printf("%s", cb_data.text.c_str());
}
}
// 准备图像数据(需要预先 resize 到模型要求的尺寸,格式为 RGB)
cv::Mat img = cv::imread("test.jpg");
cv::Mat img_rgb;
cv::cvtColor(img, img_rgb, cv::COLOR_BGR2RGB);
cv::Mat img_resized;
cv::resize(img_rgb, img_resized, cv::Size(392, 392));
aplux::aidmlm::ImageData img_data = {
.img_pos = -1,
.img_data = (uint8_t*)img_resized.data,
};
std::vector<aplux::aidmlm::ImageData> img_vec;
img_vec.push_back(img_data);
// 执行推理
std::string sys_prompt = "You are a helpful assistant.";
std::string user_prompt = "请描述一下图中场景";
int run_result = mlm_ctx.run(user_prompt, sys_prompt, img_vec, my_callback, true);
if(run_result < 0){
printf("AidMLM run failed.\n");
return EXIT_FAILURE;
}会话终止操作.abort()
用于打断当前正在执行推理的会话。
| API | abort |
| 描述 | 终止当前正在运行的推理会话 |
| 参数 | reserve:保留字段,默认值为 nullptr |
| 返回值 | 0 值则说明终止操作执行成功,否则非 0 值就说明执行失败 |
重置操作.reset()
在多轮对话场景中,当需要处理下一张图像或重新开始对话时,需要调用 reset 重置内部状态。
| API | reset |
| 描述 | 重置推理器内部状态,为下一次推理做准备 |
| 参数 | void |
| 返回值 | 0 值则说明重置成功,否则非 0 值就说明执行失败 |
// 处理完一张图像后重置,准备处理下一张
if(mlm_ctx.reset() < 0){
printf("AidMLM reset failed.\n");
return EXIT_FAILURE;
}完结释放操作.finalize()
释放模型资源,完成反初始化。
| API | finalize |
| 描述 | 释放模型资源,完成必要的反初始化操作 |
| 参数 | void |
| 返回值 | 0 值则说明释放成功,否则非 0 值就说明执行失败 |
if(mlm_ctx.finalize() < 0){
printf("AidMLM finalize failed.\n");
return EXIT_FAILURE;
}获取性能分析器.get_profiler()
当初始化时启用了性能分析器,可以通过此函数获取 Profiler 对象指针。具体用法参见后文「性能分析 (Profiler) C++ 接口文档」章节。
| API | get_profiler |
| 描述 | 获取性能分析器对象的指针 |
| 参数 | void |
| 返回值 | 如果性能分析器已启用,返回 Profiler 对象指针;如果未启用,返回 nullptr |
// 启用性能分析器
aplux::aidmlm::AidmlmInitParam init_param;
init_param.enable_profiler = true;
// ... 其他参数设置 ...
mlm_ctx.initialize(init_param, true);
// 执行推理后获取性能数据
aplux::aidgen::Profiler* profiler = mlm_ctx.get_profiler();
aplux::aidgen::ProfileData data = profiler->get_data();
printf("初始化耗时: %lu us\n", data.init_time_us);
printf("首Token耗时: %lu us\n", data.time_to_first_token_us);
printf("生成速率: %.2f tok/s\n", data.generate_rate);
printf("视觉模型执行耗时: %lu us\n", data.vit_execute_time_us);性能分析 (Profiler) C++ 接口文档
💡注意
性能分析相关接口位于 aplux::aidgen 命名空间下(独立于 aplux::aidllm 和 aplux::aidmlm)。
- 头文件路径
/usr/local/include/aidlux/aidgen/profiler.hpp - AidLLM 和 AidMLM 均通过各自的
get_profiler()方法获取 Profiler 对象来使用性能分析功能
性能分析数据类型.struct ProfileData
在推理过程中,开发者可能关注各阶段的性能指标,ProfileData 结构体用于存储推理过程中采集到的性能数据。
成员变量列表
| 成员变量名 | 类型 | 描述 |
|---|---|---|
| init_time_us | uint64_t | 初始化耗时(微秒) |
| prompt_token_num | uint64_t | 输入提示词的 Token 数量 |
| prompt_processing_rate | float | 提示词处理速率(tok/s) |
| time_to_first_token_us | uint64_t | 首个 Token 生成耗时(微秒) |
| generated_token_num | uint64_t | 生成的 Token 数量 |
| generate_rate | float | Token 生成速率(tok/s) |
| generate_time_us | uint64_t | 生成阶段总耗时(微秒) |
| vit_execute_time_us | uint64_t | 视觉模型执行耗时(微秒),仅 AidMLM 有效 |
| vit_init_time_us | uint64_t | 视觉模型初始化耗时(微秒),仅 AidMLM 有效 |
| vit_preprocess_time_us | uint64_t | 视觉模型预处理耗时(微秒),仅 AidMLM 有效 |
| vit_postprocess_time_us | uint64_t | 视觉模型后处理耗时(微秒),仅 AidMLM 有效 |
性能分析器类.class Profiler
Profiler 类用于管理推理过程的性能数据采集,需要在初始化时启用(enable_profiler = true)才能使用。
获取性能数据.get_data()
获取当前已采集的性能数据。
| API | get_data |
| 描述 | 获取当前推理过程中采集的性能分析数据 |
| 参数 | void |
| 返回值 | ProfileData 结构体,包含各阶段的性能指标 |
重置性能数据.reset()
重置已采集的性能数据,通常在开始新一轮推理前调用。
| API | reset |
| 描述 | 清空已采集的性能数据,恢复到初始状态 |
| 参数 | void |
| 返回值 | void |
// 启用性能分析器初始化
int init_result = llm_interpreter_ptr->initialize(true);
// 获取性能分析器
aplux::aidgen::Profiler* profiler = llm_interpreter_ptr->get_profiler();
// 执行推理...
llm_interpreter_ptr->run(prompt, dialog_callback);
// 获取性能数据
aplux::aidgen::ProfileData data = profiler->get_data();
printf("首Token耗时: %lu us\n", data.time_to_first_token_us);
printf("生成速率: %.2f tok/s\n", data.generate_rate);
printf("生成Token数: %lu\n", data.generated_token_num);
// 重置数据,准备下一轮推理
profiler->reset();