Lighteval 文档
模型
并获得增强的文档体验
开始使用
模型
模型
LightevalModel
如有需要,执行清理操作,例如关闭端点。
greedy_until
< 源码 >( requests: list ) → list[GenerativeResponse]
使用贪婪解码策略生成响应,直到满足某些终止条件。
使用贪婪解码策略生成响应,直到满足某些终止条件。
对上下文和续写进行分词,并计算这些分词序列的对数似然。
此函数用于计算上下文的对数似然,以用于困惑度指标。
对上下文和续写进行分词,并计算这些分词序列的对数似然。
tok_encode_pair
< 源码 >( context continuation pairwise: bool = 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]
使用贪婪解码策略生成响应,直到满足某些终止条件。
计算所有与 model_parallel 相关的参数
loglikelihood
< 源码 >( requests: list ) → list[Tuple[float, bool]]
对上下文和续写进行分词,并计算这些分词序列的对数似然。
loglikelihood_single_token
< 源码 >( requests: list ) → list[Tuple[float, bool]]
对上下文和续写进行分词,并计算这些分词序列的对数似然。
pad_and_gather
< source >( output_tensor: Tensor drop_last_samples: bool = True num_samples: int = None ) → torch.Tensor
将 output_tensor
填充到最大长度,并跨进程收集长度。
prepare_batch_logprob
< source >( 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
< source >( 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
< source >( config: TransformersModelConfig )
DeltaModel
class lighteval.models.transformers.delta_model.DeltaModelConfig
< source >( 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
< source >( config: TransformersModelConfig )
基于端点的模型
InferenceEndpointModel
class lighteval.models.endpoints.endpoint_model.InferenceEndpointModelConfig
< source >( 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
< source >( 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
< source >( 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
< source >( 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.custom.custom_model.CustomModelConfig
< source >( 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 )
用于在 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
< source >( config: OpenAIModelConfig env_config )
greedy_until
< source >( requests: list override_bs: typing.Optional[int] = None ) → list[GenerativeResponse]
使用贪婪解码策略生成响应,直到满足某些终止条件。
VLLM 模型
VLLMModel
class lighteval.models.vllm.vllm_model.VLLMModelConfig
< source >( 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 )
greedy_until
< source >( requests: list override_bs: typing.Optional[int] = None ) → list[GenerateReturn]
使用贪婪解码策略生成响应,直到满足某些终止条件。