推理器(Inferencer)概述

推理器(Inferencer)是 AISBench 中负责执行模型推理的核心组件,它连接了数据集、检索器(Retriever)和模型,负责将处理好的提示词(Prompt)发送给模型进行推理,并收集和管理推理结果。

核心功能

推理器在 AISBench 的评测流程中承担以下核心职责:

  1. 数据准备:从检索器(Retriever)获取数据列表,包括输入提示词、标准答案等信息

  2. 模型调用:根据模型类型(API 模型或本地模型)采用不同的方式调用模型进行推理

    • API 模型:通过异步 HTTP 请求调用服务化推理接口

    • 本地模型:直接调用本地加载的模型进行批量推理

  3. 结果管理:收集、处理和保存推理结果,包括:

    • 模型生成的文本内容

    • 推理状态(成功/失败)

    • 性能指标(如延迟、吞吐量等,在性能模式下)

    • 错误信息(如果推理失败)

  4. 状态跟踪:在性能测评模式下,跟踪和统计请求状态,包括:

    • 已发送请求数(post)

    • 已接收响应数(rev)

    • 失败请求数(failed)

    • 已完成请求数(finish)

架构设计

推理器采用分层设计,包含以下基类:

  • BaseInferencer:所有推理器的基类,提供模型构建、输出处理等通用功能

  • BaseApiInferencer:API 模型推理器的基类,提供异步请求处理、状态跟踪等功能

  • BaseLocalInferencer:本地模型推理器的基类,提供批量推理、数据加载等功能

推理器可以根据需要同时继承 BaseApiInferencerBaseLocalInferencer,以同时支持 API 模型和本地模型。

当前支持的推理器类型

AISBench 目前支持以下推理器类型:

1. GenInferencer(生成式推理器)

功能:用于生成式任务的推理器,支持文本生成、问答等任务。

特点

  • 同时支持 API 模型和本地模型

  • 支持流式和非流式推理

  • 支持性能测评模式

  • 支持自定义停止条件(stopping_criteria)

适用场景

  • 文本生成任务

  • 问答任务

  • 代码生成任务

  • 数学推理任务

实现文件icl_gen_inferencer.py

2. MultiTurnGenInferencer(多轮对话推理器)

功能:用于多轮对话任务的推理器,支持多轮交互式对话场景。

特点

  • 同时支持 API 模型和本地模型

  • 支持多种推理模式:

    • every:逐轮推理,将模型上一轮输出作为下一轮输入

    • last:仅对最后一轮进行推理

    • every_with_gt:逐轮推理,但使用标准答案而非模型输出

  • 支持性能测评模式

适用场景

  • 多轮对话任务

  • 需要上下文交互的任务

  • 对话式问答任务

实现文件icl_multiturn_inferencer.py

3. PPLInferencer(困惑度推理器)

功能:用于困惑度(Perplexity)评估的推理器,通过计算每个选项的困惑度来选择答案,主要用于多选题(MCQ)任务。

特点

  • 仅支持 API 模型(不支持本地模型)

  • 不支持流式推理

  • 不支持性能测评模式

  • 通过计算每个候选答案的困惑度,选择困惑度最低的选项作为预测结果

适用场景

  • 多选题(MCQ)任务

  • 需要基于困惑度进行选择的分类任务

实现文件ppl_inferencer.py

4. BFCLV3FunctionCallInferencer(函数调用推理器)

功能:用于函数调用任务的推理器,支持模型调用外部函数或工具的场景。

特点

  • 仅支持 API 模型

  • 支持多轮函数调用

  • 支持 holdout function(保留函数)机制

  • 支持函数调用的结果处理和反馈

适用场景

  • 函数调用任务

  • 工具使用任务

  • 需要模型调用外部 API 的任务

实现文件icl_bfcl_v3_inferencer.py

推理器选择指南

根据不同的任务类型和模型类型,选择合适的推理器:

任务类型

模型类型

推荐推理器

文本生成、问答

API 模型

GenInferencer

文本生成、问答

本地模型

GenInferencer

多轮对话

API 模型

MultiTurnGenInferencer

多轮对话

本地模型

MultiTurnGenInferencer

多选题(MCQ)

API 模型

PPLInferencer

函数调用

API 模型

BFCLV3FunctionCallInferencer

与相关组件的关系

推理器在 AISBench 的评测流程中与其他组件紧密协作:

  1. 与 Retriever 的关系

    • 推理器通过 get_data_list 方法从 Retriever 获取数据

    • Retriever 负责生成 in-context examples 和 prompt

  2. 与 Model 的关系

    • 推理器调用 Model 的 generate 方法进行推理

    • 对于 API 模型,推理器通过 HTTP 请求调用模型服务

    • 对于本地模型,推理器直接调用模型实例

  3. 与 OutputHandler 的关系

    • 推理器使用 OutputHandler 管理和保存推理结果

    • 不同类型的推理器使用不同的 OutputHandler

  4. 与 Dataset 的关系

    • 推理器从 Dataset 配置中获取推理相关的参数

    • max_out_len 等参数可以从数据集配置中获取

进一步阅读