推理器(Inferencer)概述
推理器(Inferencer)是 AISBench 中负责执行模型推理的核心组件,它连接了数据集、检索器(Retriever)和模型,负责将处理好的提示词(Prompt)发送给模型进行推理,并收集和管理推理结果。
核心功能
推理器在 AISBench 的评测流程中承担以下核心职责:
数据准备:从检索器(Retriever)获取数据列表,包括输入提示词、标准答案等信息
模型调用:根据模型类型(API 模型或本地模型)采用不同的方式调用模型进行推理
API 模型:通过异步 HTTP 请求调用服务化推理接口
本地模型:直接调用本地加载的模型进行批量推理
结果管理:收集、处理和保存推理结果,包括:
模型生成的文本内容
推理状态(成功/失败)
性能指标(如延迟、吞吐量等,在性能模式下)
错误信息(如果推理失败)
状态跟踪:在性能测评模式下,跟踪和统计请求状态,包括:
已发送请求数(post)
已接收响应数(rev)
失败请求数(failed)
已完成请求数(finish)
架构设计
推理器采用分层设计,包含以下基类:
BaseInferencer:所有推理器的基类,提供模型构建、输出处理等通用功能
BaseApiInferencer:API 模型推理器的基类,提供异步请求处理、状态跟踪等功能
BaseLocalInferencer:本地模型推理器的基类,提供批量推理、数据加载等功能
推理器可以根据需要同时继承 BaseApiInferencer 和 BaseLocalInferencer,以同时支持 API 模型和本地模型。
当前支持的推理器类型
AISBench 目前支持以下推理器类型:
1. GenInferencer(生成式推理器)
功能:用于生成式任务的推理器,支持文本生成、问答等任务。
特点:
同时支持 API 模型和本地模型
支持流式和非流式推理
支持性能测评模式
支持自定义停止条件(stopping_criteria)
适用场景:
文本生成任务
问答任务
代码生成任务
数学推理任务
2. MultiTurnGenInferencer(多轮对话推理器)
功能:用于多轮对话任务的推理器,支持多轮交互式对话场景。
特点:
同时支持 API 模型和本地模型
支持多种推理模式:
every:逐轮推理,将模型上一轮输出作为下一轮输入last:仅对最后一轮进行推理every_with_gt:逐轮推理,但使用标准答案而非模型输出
支持性能测评模式
适用场景:
多轮对话任务
需要上下文交互的任务
对话式问答任务
3. PPLInferencer(困惑度推理器)
功能:用于困惑度(Perplexity)评估的推理器,通过计算每个选项的困惑度来选择答案,主要用于多选题(MCQ)任务。
特点:
仅支持 API 模型(不支持本地模型)
不支持流式推理
不支持性能测评模式
通过计算每个候选答案的困惑度,选择困惑度最低的选项作为预测结果
适用场景:
多选题(MCQ)任务
需要基于困惑度进行选择的分类任务
实现文件:ppl_inferencer.py
4. BFCLV3FunctionCallInferencer(函数调用推理器)
功能:用于函数调用任务的推理器,支持模型调用外部函数或工具的场景。
特点:
仅支持 API 模型
支持多轮函数调用
支持 holdout function(保留函数)机制
支持函数调用的结果处理和反馈
适用场景:
函数调用任务
工具使用任务
需要模型调用外部 API 的任务
推理器选择指南
根据不同的任务类型和模型类型,选择合适的推理器:
任务类型 |
模型类型 |
推荐推理器 |
|---|---|---|
文本生成、问答 |
API 模型 |
GenInferencer |
文本生成、问答 |
本地模型 |
GenInferencer |
多轮对话 |
API 模型 |
MultiTurnGenInferencer |
多轮对话 |
本地模型 |
MultiTurnGenInferencer |
多选题(MCQ) |
API 模型 |
PPLInferencer |
函数调用 |
API 模型 |
BFCLV3FunctionCallInferencer |
与相关组件的关系
推理器在 AISBench 的评测流程中与其他组件紧密协作:
与 Retriever 的关系:
推理器通过
get_data_list方法从 Retriever 获取数据Retriever 负责生成 in-context examples 和 prompt
与 Model 的关系:
推理器调用 Model 的
generate方法进行推理对于 API 模型,推理器通过 HTTP 请求调用模型服务
对于本地模型,推理器直接调用模型实例
与 OutputHandler 的关系:
推理器使用 OutputHandler 管理和保存推理结果
不同类型的推理器使用不同的 OutputHandler
与 Dataset 的关系:
推理器从 Dataset 配置中获取推理相关的参数
如
max_out_len等参数可以从数据集配置中获取
进一步阅读
支持新的推理器:了解如何实现自定义推理器
Prompt Template:了解提示词模板的定义
Meta Template:了解模型元模板的定义
Retriever:了解检索器的工作原理