Lighteval 文件
快速教程
並獲得增強的文件體驗
開始使用
快速入門
我們建議使用 --help
標誌來獲取有關每個命令可用選項的更多資訊。 lighteval --help
Lighteval 可以通過幾個不同的命令來使用。
lighteval accelerate
:使用 🤗 Accelerate 在 CPU 或一個或多個 GPU 上評估模型lighteval nanotron
:使用 ⚡️ Nanotron 在分散式環境中評估模型lighteval vllm
:使用 🚀 VLLM 在一個或多個 GPU 上評估模型lighteval endpoint
inference-endpoint
:使用 🔗 Inference Endpoint 在一個或多個 GPU 上評估模型tgi
:使用 🔗 Text Generation Inference 在一個或多個 GPU 上評估模型openai
:使用 🔗 OpenAI API 在一個或多個 GPU 上評估模型
基本用法
要在 Truthful QA 基準上使用 🤗 Accelerate 評估 GPT-2
,請執行
lighteval accelerate \
"model_name=openai-community/gpt2" \
"leaderboard|truthfulqa:mc|0|0"
在這裡,我們首先選擇一個後端(accelerate
、nanotron
或 vllm
),然後指定要執行的模型和任務。
模型引數的語法是 `key1=value1,key2=value2,etc`。有效的鍵值對與後端配置相對應,並在[下面](#Model Arguments)詳細說明。
任務規範的語法一開始可能有點難懂。格式如下
{suite}|{task}|{num_few_shot}|{0 for strict `num_few_shots`, or 1 to allow a truncation if context size is too small}
如果第四個值設定為 1,lighteval 將檢查提示(包括少樣本示例)是否對於任務或模型的上下文大小來說過長。如果是,則會自動減少少樣本示例的數量。
所有官方支援的任務都可以在 tasks_list 和 extended 資料夾中找到。此外,社群提供的任務可以在 community 資料夾中找到。有關任務實現的更多詳細資訊,例如提示是如何構建的,或使用了哪些指標,您可以檢視實現它們的檔案。
支援執行多個任務,可以使用逗號分隔的列表,或者透過指定檔案路徑。檔案結構應類似於 examples/tasks/recommended_set.txt。指定檔案路徑時,應以 ./
開頭。
lighteval accelerate \
"model_name=openai-community/gpt2" \
./path/to/lighteval/examples/tasks/recommended_set.txt
# or, e.g., "leaderboard|truthfulqa:mc|0|0|,leaderboard|gsm8k|3|1"
在一個或多個 GPU 上評估模型
資料並行
要在單個或多個 GPU 上評估模型,首先透過執行以下命令建立一個多 GPU 配置。
accelerate config
然後,您可以像下面這樣在 8 個 GPU 上使用資料並行評估模型
accelerate launch --multi_gpu --num_processes=8 -m \
lighteval accelerate \
"model_name=openai-community/gpt2" \
"leaderboard|truthfulqa:mc|0|0"
在這裡,--override_batch_size
定義了每個裝置的批次大小,所以有效的批次大小將是 override_batch_size * num_gpus
。
流水線並行
要在 2 個或更多 GPU 上使用流水線並行評估模型,請執行
lighteval accelerate \
"model_name=openai-community/gpt2,model_parallel=True" \
"leaderboard|truthfulqa:mc|0|0"
這將自動使用 accelerate 將模型分佈到各個 GPU 上。
透過設定 model_parallel=True
並使用 accelerate 在 GPU 之間分配資料,可以同時結合資料並行和流水線並行。
後端配置
model-args
引數接受一個表示模型引數列表的字串。允許的引數根據你使用的後端(vllm 或 accelerate)而有所不同。
Accelerate
- pretrained (str):HuggingFace Hub 模型 ID 名稱或要載入的預訓練模型的路徑。這實際上是 HuggingFace
transformers
API 中from_pretrained
的pretrained_model_name_or_path
引數。 - tokenizer (Optional[str]):用於分詞的 HuggingFace Hub 分詞器 ID。
- multichoice_continuations_start_space (Optional[bool]):是否在多項選擇生成的每個續寫內容的開頭新增一個空格。例如,上下文:“法國的首都是什麼?”以及選項:“巴黎”、“倫敦”。將被分詞為:“法國的首都是什麼? 巴黎”和“法國的首都是什麼? 倫敦”。True 表示新增空格,False 表示去除空格,None 則不作處理。
- subfolder (Optional[str]):模型倉庫中的子資料夾。
- revision (str):模型的修訂版本。
- max_gen_toks (Optional[int]):要生成的最大詞元數。
- max_length (Optional[int]):生成輸出的最大長度。
- add_special_tokens (bool, optional, defaults to True):是否向輸入序列新增特殊詞元。如果為
None
,對於序列到序列模型(例如 T5),預設值將設定為True
,對於因果模型則為False
。 - model_parallel (bool, optional, defaults to None):True/False:強制使用或不使用
accelerate
庫在多個裝置上載入大型模型。預設值:None,這對應於比較程序數與 GPU 數量。如果程序數更少 => 模型並行,否則不是。 - dtype (Union[str, torch.dtype], optional, defaults to None):如果指定,則將模型權重轉換為
dtype
。字串會被轉換為torch.dtype
物件(例如float16
->torch.float16
)。使用dtype="auto"
從模型權重中推斷型別。 - device (Union[int, str]):用於模型訓練的裝置。
- quantization_config (Optional[BitsAndBytesConfig]):模型的量化配置,手動提供以量化精度載入通常為浮點數的模型。4 位和 8 位精度需要此配置。
- trust_remote_code (bool):是否在載入模型時信任遠端程式碼。
VLLM
- pretrained (str):HuggingFace Hub 模型 ID 名稱或要載入的預訓練模型的路徑。
- gpu_memory_utilization (float):要使用的 GPU 記憶體比例。
- batch_size (int):模型訓練的批次大小。
- revision (str):模型的修訂版本。
- dtype (str, None):模型使用的資料型別。
- tensor_parallel_size (int):要使用的張量並行單元數量。
- data_parallel_size (int):要使用的資料並行單元數量。
- max_model_length (int):模型的最大長度。
- swap_space (int):每個 GPU 的 CPU 交換空間大小 (GiB)。
- seed (int):模型使用的隨機種子。
- trust_remote_code (bool):是否在載入模型時信任遠端程式碼。
- use_chat_template (bool):是否使用聊天模板。
- add_special_tokens (bool):是否向輸入序列新增特殊詞元。
- multichoice_continuations_start_space (bool):是否在多項選擇生成的每個續寫內容的開頭新增空格。
- subfolder (Optional[str]):模型倉庫中的子資料夾。
Nanotron
在單個 GPU 上評估一個使用 nanotron 訓練的模型。
Nanotron 模型不能在沒有 torchrun 的情況下進行評估。
torchrun --standalone --nnodes=1 --nproc-per-node=1 \ src/lighteval/__main__.py nanotron \ --checkpoint-config-path ../nanotron/checkpoints/10/config.yaml \ --lighteval-config-path examples/nanotron/lighteval_config_override_template.yaml
nproc-per-node
引數應與 lighteval_config_template.yaml
檔案中配置的資料、張量和流水線並行度相匹配。即:nproc-per-node = data_parallelism * tensor_parallelism * pipeline_parallelism
。