Lighteval 文档

模型

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

模型

模型

LightevalModel

class lighteval.models.abstract_model.LightevalModel

< >

( )

清理

< >

( )

如有需要,执行清理操作,例如关闭端点。

greedy_until

< >

( requests: list ) list[GenerativeResponse]

参数

  • requests (list[Request]) — 包含上下文和终止条件的请求列表。
  • disable_tqdm (bool, 可选) — 是否禁用进度条。默认为 False。
  • override_bs (int, 可选) — 覆盖生成的批处理大小。默认为 None。

返回

list[GenerativeResponse]

生成的响应列表。

使用贪婪解码策略生成响应,直到满足某些终止条件。

greedy_until_multi_turn

< >

( requests: list )

使用贪婪解码策略生成响应,直到满足某些终止条件。

loglikelihood

< >

( requests: list )

对上下文和续写进行分词,并计算这些分词序列的对数似然。

loglikelihood_rolling

< >

( requests: list )

此函数用于计算上下文的对数似然,以用于困惑度指标。

loglikelihood_single_token

< >

( requests: list )

对上下文和续写进行分词,并计算这些分词序列的对数似然。

tok_encode_pair

< >

( context continuation pairwise: bool = False ) Tuple[TokenSequence, TokenSequence]

参数

  • context (str) — 待编码的上下文字符串。
  • continuation (str) — 待编码的续写字符串。
  • pairwise (bool) — 如果为 True,则分别对上下文和续写进行编码。如果为 False,则将它们一起编码然后拆分。

返回

Tuple[TokenSequence, TokenSequence]

包含已编码的上下文和续写的元组。

通过处理中间的空格来编码上下文和续写对。

成对编码(pairwise)的优势是:1)它能更好地与 LLM 预测词元的方式对齐;2)在 len(tok(context,cont)) != len(tok(context)) + len(tok(continuation)) 的情况下也能正常工作。例如,如果中文的上下文和续写之间没有使用空格,就可能出现这种情况。

Accelerate 和 Transformers 模型

TransformersModel

class lighteval.models.transformers.transformers_model.TransformersModelConfig

< >

( generation_parameters: GenerationParameters = GenerationParameters(early_stopping=None, repetition_penalty=None, frequency_penalty=None, length_penalty=None, presence_penalty=None, max_new_tokens=None, min_new_tokens=None, seed=None, stop_tokens=None, temperature=None, top_k=None, min_p=None, top_p=None, truncate_prompt=None, response_format=None) model_name: str tokenizer: str | None = None subfolder: str | None = None revision: str = 'main' batch_size: typing.Optional[typing.Annotated[int, Gt(gt=0)]] = None generation_size: typing.Annotated[int, Gt(gt=0)] = 256 max_length: typing.Optional[typing.Annotated[int, Gt(gt=0)]] = None add_special_tokens: bool = True model_parallel: bool | None = None dtype: str | None = None device: typing.Union[int, str] = 'cuda' trust_remote_code: bool = False use_chat_template: bool = False compile: bool = False multichoice_continuations_start_space: bool | None = None pairwise_tokenization: bool = False )

参数

  • model_name (str) — HuggingFace Hub 模型 ID 名称或要加载的预训练模型的路径。这实际上是 HuggingFace `transformers` API 中 `from_pretrained` 的 `pretrained_model_name_or_path` 参数。
  • accelerator (Accelerator) — 用于模型训练的加速器。
  • tokenizer (Optional[str]) — 用于分词的 HuggingFace Hub 分词器 ID。
  • multichoice_continuations_start_space (Optional[bool]) — 在多项选择生成中,是否在每个续写的开头添加空格。例如,上下文:“法国的首都是什么?”以及选项:“巴黎”、“伦敦”。将被分词为:“法国的首都是什么? 巴黎”和“法国的首都是什么? 伦敦”。True 表示添加空格,False 表示去除空格,None 表示不作任何操作。
  • pairwise_tokenization (bool) — 是将上下文和续写分开分词还是一起分词。
  • subfolder (Optional[str]) — 模型仓库中的子文件夹。
  • revision (str) — 模型的版本。
  • batch_size (int) — 用于模型训练的批处理大小。
  • max_gen_toks (Optional[int]) — 要生成的最大词元数量。
  • max_length (Optional[int]) — 生成输出的最大长度。
  • add_special_tokens (bool, 可选, 默认为 True) — 是否向输入序列添加特殊词元。如果为 `None`,对于 seq2seq 模型(例如 T5),默认值将设置为 `True`,对于因果模型则为 `False`。
  • model_parallel (bool, 可选, 默认为 None) — True/False: 强制使用或不使用 `accelerate` 库在多个设备上加载大型模型。默认值:None,对应于比较进程数与 GPU 数量。如果进程数较少 => 使用模型并行,否则不使用。
  • dtype (Union[str, torch.dtype], 可选, 默认为 None) —): 如果指定,将模型权重转换为 `dtype`。字符串会转换为 `torch.dtype` 对象(例如,`float16` -> `torch.float16`)。使用 `dtype="auto"` 从模型的权重中推断类型。
  • device (Union[int, str]) — 用于模型训练的设备。
  • quantization_config (Optional[BitsAndBytesConfig]) — 模型的量化配置,手动提供以加载一个通常为浮点数的模型,并以量化精度加载。对于 4 位和 8 位精度是必需的。
  • trust_remote_code (bool) — 在模型加载期间是否信任远程代码。
  • generation_parameters (GenerationParameters) — 将影响生成的参数范围。
  • generation_config (GenerationConfig) — GenerationConfig 对象(仅在手动创建期间传递)

模型的基础配置类。

方法:post_init(): 对配置执行后初始化检查。_init_configs(model_name, env_config): 初始化模型配置。init_configs(env_config): 使用环境配置初始化模型配置。get_model_sha(): 检索模型的 SHA。

class lighteval.models.transformers.transformers_model.TransformersModel

< >

( config: TransformersModelConfig )

greedy_until

< >

( requests: list ) list[GenerativeResponse]

参数

  • requests (list[Request]) — 包含上下文和终止条件的请求列表。
  • override_bs (int, 可选) — 覆盖生成的批处理大小。默认为 None。

返回

list[GenerativeResponse]

生成的响应列表。

使用贪婪解码策略生成响应,直到满足某些终止条件。

init_model_parallel

< >

( model_parallel: bool | None = None )

计算所有与 model_parallel 相关的参数

loglikelihood

< >

( requests: list ) list[Tuple[float, bool]]

参数

  • requests (list[Tuple[str, dict]]) — *描述*

返回

list[Tuple[float, bool]]

描述

对上下文和续写进行分词,并计算这些分词序列的对数似然。

loglikelihood_single_token

< >

( requests: list ) list[Tuple[float, bool]]

参数

  • requests (list[Tuple[str, dict]]) — *描述*

返回

list[Tuple[float, bool]]

描述

对上下文和续写进行分词,并计算这些分词序列的对数似然。

pad_and_gather

< >

( output_tensor: Tensor drop_last_samples: bool = True num_samples: int = None ) torch.Tensor

参数

  • output_tensor (torch.Tensor) — 需要填充的输出张量。
  • drop_last_samples (bool, optional) — 是否在收集过程中丢弃最后的样本。
  • 当样本数量不能被进程数整除时,最后的样本将被丢弃。 — 默认为 True。

返回

torch.Tensor

填充后的输出张量和收集到的长度张量。

output_tensor 填充到最大长度,并跨进程收集长度。

prepare_batch_logprob

< >

( batch: list padding_length: int max_context: typing.Optional[int] = None single_token: bool = False )

对一批输入进行分词,并返回长度、截断和填充信息。此步骤是手动完成的,因为我们将对数概率输入与其续写部分一起进行分词,以处理分词器可能在开头添加的额外空格,请参见 tok_encode_pair。

AdapterModel

class lighteval.models.transformers.adapter_model.AdapterModelConfig

< >

( generation_parameters: GenerationParameters = GenerationParameters(early_stopping=None, repetition_penalty=None, frequency_penalty=None, length_penalty=None, presence_penalty=None, max_new_tokens=None, min_new_tokens=None, seed=None, stop_tokens=None, temperature=None, top_k=None, min_p=None, top_p=None, truncate_prompt=None, response_format=None) model_name: str tokenizer: str | None = None subfolder: str | None = None revision: str = 'main' batch_size: typing.Optional[typing.Annotated[int, Gt(gt=0)]] = None generation_size: typing.Annotated[int, Gt(gt=0)] = 256 max_length: typing.Optional[typing.Annotated[int, Gt(gt=0)]] = None add_special_tokens: bool = True model_parallel: bool | None = None dtype: str | None = None device: typing.Union[int, str] = 'cuda' trust_remote_code: bool = False use_chat_template: bool = False compile: bool = False multichoice_continuations_start_space: bool | None = None pairwise_tokenization: bool = False base_model: str adapter_weights: bool )

class lighteval.models.transformers.adapter_model.AdapterModel

< >

( config: TransformersModelConfig )

DeltaModel

class lighteval.models.transformers.delta_model.DeltaModelConfig

< >

( generation_parameters: GenerationParameters = GenerationParameters(early_stopping=None, repetition_penalty=None, frequency_penalty=None, length_penalty=None, presence_penalty=None, max_new_tokens=None, min_new_tokens=None, seed=None, stop_tokens=None, temperature=None, top_k=None, min_p=None, top_p=None, truncate_prompt=None, response_format=None) model_name: str tokenizer: str | None = None subfolder: str | None = None revision: str = 'main' batch_size: typing.Optional[typing.Annotated[int, Gt(gt=0)]] = None generation_size: typing.Annotated[int, Gt(gt=0)] = 256 max_length: typing.Optional[typing.Annotated[int, Gt(gt=0)]] = None add_special_tokens: bool = True model_parallel: bool | None = None dtype: str | None = None device: typing.Union[int, str] = 'cuda' trust_remote_code: bool = False use_chat_template: bool = False compile: bool = False multichoice_continuations_start_space: bool | None = None pairwise_tokenization: bool = False base_model: str delta_weights: bool )

class lighteval.models.transformers.delta_model.DeltaModel

< >

( config: TransformersModelConfig )

基于端点的模型

InferenceEndpointModel

class lighteval.models.endpoints.endpoint_model.InferenceEndpointModelConfig

< >

( generation_parameters: GenerationParameters = GenerationParameters(early_stopping=None, repetition_penalty=None, frequency_penalty=None, length_penalty=None, presence_penalty=None, max_new_tokens=None, min_new_tokens=None, seed=None, stop_tokens=None, temperature=None, top_k=None, min_p=None, top_p=None, truncate_prompt=None, response_format=None) endpoint_name: str | None = None model_name: str | None = None reuse_existing: bool = False accelerator: str = 'gpu' dtype: str | None = None vendor: str = 'aws' region: str = 'us-east-1' instance_size: str | None = None instance_type: str | None = None framework: str = 'pytorch' endpoint_type: str = 'protected' add_special_tokens: bool = True revision: str = 'main' namespace: str | None = None image_url: str | None = None env_vars: dict | None = None )

class lighteval.models.endpoints.endpoint_model.ServerlessEndpointModelConfig

< >

( generation_parameters: GenerationParameters = GenerationParameters(early_stopping=None, repetition_penalty=None, frequency_penalty=None, length_penalty=None, presence_penalty=None, max_new_tokens=None, min_new_tokens=None, seed=None, stop_tokens=None, temperature=None, top_k=None, min_p=None, top_p=None, truncate_prompt=None, response_format=None) model_name: str add_special_tokens: bool = True )

class lighteval.models.endpoints.endpoint_model.InferenceEndpointModel

< >

( config: typing.Union[lighteval.models.endpoints.endpoint_model.InferenceEndpointModelConfig, lighteval.models.endpoints.endpoint_model.ServerlessEndpointModelConfig] )

InferenceEndpointModels 既可以与免费的推理客户端一起使用,也可以与推理端点一起使用,后者将在评估期间使用 text-generation-inference 部署您的模型。

TGI ModelClient

class lighteval.models.endpoints.tgi_model.TGIModelConfig

< >

( generation_parameters: GenerationParameters = GenerationParameters(early_stopping=None, repetition_penalty=None, frequency_penalty=None, length_penalty=None, presence_penalty=None, max_new_tokens=None, min_new_tokens=None, seed=None, stop_tokens=None, temperature=None, top_k=None, min_p=None, top_p=None, truncate_prompt=None, response_format=None) inference_server_address: str | None inference_server_auth: str | None model_name: str | None )

class lighteval.models.endpoints.tgi_model.ModelClient

< >

( config: TGIModelConfig )

自定义模型

class lighteval.models.custom.custom_model.CustomModelConfig

< >

( generation_parameters: GenerationParameters = GenerationParameters(early_stopping=None, repetition_penalty=None, frequency_penalty=None, length_penalty=None, presence_penalty=None, max_new_tokens=None, min_new_tokens=None, seed=None, stop_tokens=None, temperature=None, top_k=None, min_p=None, top_p=None, truncate_prompt=None, response_format=None) model_name: str model_definition_file_path: str )

参数

  • model (str) — 模型的标识符。这可用于在结果和日志中跟踪评估了哪个模型。
  • model_definition_file_path (str) — 指向包含自定义模型实现的 Python 文件的路径。该文件必须定义一个继承自 LightevalModel 的类。该类应实现 LightevalModel 接口所需的所有方法。

用于在 Lighteval 中加载自定义模型实现的配置类。

此配置允许用户通过指定一个包含继承自 LightevalModel 的自定义模型类的 Python 文件来定义和加载自己的模型实现。

自定义模型文件应仅包含一个继承自 LightevalModel 的类。加载模型时将自动检测并实例化该类。

用法示例

# Define config
config = CustomModelConfig(
    model="my-custom-model",
    model_definition_file_path="path/to/my_model.py"
)

# Example custom model file (my_model.py):
from lighteval.models.abstract_model import LightevalModel

class MyCustomModel(LightevalModel):
    def __init__(self, config, env_config):
        super().__init__(config, env_config)
        # Custom initialization...

    def greedy_until(self, *args, **kwargs):
        # Custom generation logic...
        pass

自定义模型的示例可以在 examples/custom_models/google_translate_model.py 中找到。

备注

  • 自定义模型类必须继承自 LightevalModel 并实现所有必需的方法
  • 文件中只应定义一个继承自 LightevalModel 的类
  • 模型文件在运行时动态加载,因此请确保所有依赖项都可用
  • 加载自定义模型文件时要小心,因为它们可以执行任意代码

Open AI 模型

class lighteval.models.endpoints.openai_model.OpenAIClient

< >

( config: OpenAIModelConfig env_config )

greedy_until

< >

( requests: list override_bs: typing.Optional[int] = None ) list[GenerativeResponse]

参数

  • requests (list[Request]) — 包含上下文和结束条件的请求列表。
  • override_bs (int, optional) — 覆盖生成的批量大小。默认为 None。

返回

list[GenerativeResponse]

生成的响应列表。

使用贪婪解码策略生成响应,直到满足某些终止条件。

VLLM 模型

VLLMModel

class lighteval.models.vllm.vllm_model.VLLMModelConfig

< >

( generation_parameters: GenerationParameters = GenerationParameters(early_stopping=None, repetition_penalty=None, frequency_penalty=None, length_penalty=None, presence_penalty=None, max_new_tokens=None, min_new_tokens=None, seed=None, stop_tokens=None, temperature=None, top_k=None, min_p=None, top_p=None, truncate_prompt=None, response_format=None) model_name: str revision: str = 'main' dtype: str = 'bfloat16' tensor_parallel_size: typing.Annotated[int, Gt(gt=0)] = 1 data_parallel_size: typing.Annotated[int, Gt(gt=0)] = 1 pipeline_parallel_size: typing.Annotated[int, Gt(gt=0)] = 1 gpu_memory_utilization: typing.Annotated[float, Ge(ge=0)] = 0.9 max_model_length: typing.Optional[typing.Annotated[int, Gt(gt=0)]] = None swap_space: typing.Annotated[int, Gt(gt=0)] = 4 seed: typing.Annotated[int, Ge(ge=0)] = 1234 trust_remote_code: bool = False use_chat_template: bool = False add_special_tokens: bool = True multichoice_continuations_start_space: bool = True pairwise_tokenization: bool = False max_num_seqs: typing.Annotated[int, Gt(gt=0)] = 128 max_num_batched_tokens: typing.Annotated[int, Gt(gt=0)] = 2048 subfolder: str | None = None )

class lighteval.models.vllm.vllm_model.VLLMModel

< >

( config: VLLMModelConfig )

greedy_until

< >

( requests: list override_bs: typing.Optional[int] = None ) list[GenerateReturn]

参数

  • requests (list[Request]) — 包含上下文和结束条件的请求列表。
  • override_bs (int, optional) — 覆盖生成的批量大小。默认为 None。

返回

list[GenerateReturn]

生成的响应列表。

使用贪婪解码策略生成响应,直到满足某些终止条件。

< > 在 GitHub 上更新