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]
使用貪婪解碼策略生成響應,直到滿足某些終止條件。