|
LLMs之benchmark之lm-evaluation-harness:lm-evaluation-harness(語(yǔ)言模型評(píng)估工具)的簡(jiǎn)介、安裝和使用方法、案例應(yīng)用之詳細(xì)攻略 lm-evaluation-harness的簡(jiǎn)介2023年12月,lm-evaluation-harness項(xiàng)目提供了一個(gè)統(tǒng)一的框架,用于在大量不同的評(píng)估任務(wù)上測(cè)試生成型語(yǔ)言模型。 Github地址:https://github.com/EleutherAI/lm-evaluation-harness 1、功能特點(diǎn)為L(zhǎng)LMs提供60多個(gè)標(biāo)準(zhǔn)學(xué)術(shù)基準(zhǔn)測(cè)試,包含數(shù)百個(gè)子任務(wù)和變體。 語(yǔ)言模型評(píng)估工具是Hugging Face的Open LLM Leaderboard的后臺(tái),已在數(shù)百篇論文中使用,并被包括NVIDIA、Cohere、BigScience、BigCode、Nous Research和Mosaic ML在內(nèi)的幾十個(gè)組織內(nèi)部使用。 2、公告lm-evaluation-harness的新版本v0.4.0已發(fā)布! 新更新和功能包括: lm-evaluation-harness的安裝和使用方法1、安裝從GitHub倉(cāng)庫(kù)安裝lm-eval包,請(qǐng)運(yùn)行:
我們還提供了許多可選依賴項(xiàng)以擴(kuò)展功能。在本文件末尾有一個(gè)詳細(xì)的表格。
2、基本使用用戶指南提供了一個(gè)用戶指南,詳細(xì)列出了支持的所有參數(shù),可以在此處和終端中通過(guò)調(diào)用lm_eval -h查看。或者,可以使用lm-eval代替lm_eval。 可以使用lm-eval --tasks list查看支持的任務(wù)列表(或任務(wù)分組)。任務(wù)描述和相應(yīng)子文件夾的鏈接提供在這里。 Hugging Face transformers要在HuggingFace Hub上評(píng)估托管的模型(如GPT-J-6B)上的hellaswag任務(wù),可以使用以下命令(假設(shè)你在使用兼容CUDA的GPU):
可以使用--model_args標(biāo)志向模型構(gòu)造函數(shù)提供額外的參數(shù)。最值得注意的是,這支持在Hub上存儲(chǔ)部分訓(xùn)練檢查點(diǎn)的常見(jiàn)做法,或指定運(yùn)行模型的數(shù)據(jù)類型:
通過(guò)transformers.AutoModelForCausalLM(自回歸,僅解碼器的GPT樣式模型)和transformers.AutoModelForSeq2SeqLM(如T5等編碼器-解碼器模型)加載的模型均受支持。 通過(guò)將--batch_size標(biāo)志設(shè)置為auto,可以自動(dòng)選擇批處理大小。這將自動(dòng)檢測(cè)適合設(shè)備的最大批處理大小。在長(zhǎng)短示例差異較大的任務(wù)中,定期重新計(jì)算最大批處理大小以獲得進(jìn)一步的加速效果是有幫助的。為此,請(qǐng)?jiān)谏鲜鰳?biāo)志后附加:N,以自動(dòng)重新計(jì)算批處理大小N次。例如,要重新計(jì)算批處理大小4次,命令如下:
注意:就像你可以向transformers.AutoModel提供本地路徑一樣,你也可以通過(guò)--model_args向lm_eval提供本地路徑,方法是設(shè)置pretrained=/path/to/model 使用Hugging Face accelerate進(jìn)行多GPU評(píng)估我們支持兩種主要方式使用Hugging Face的accelerate ��庫(kù)進(jìn)行多GPU評(píng)估。要執(zhí)行數(shù)據(jù)并行評(píng)估(每個(gè)GPU加載一個(gè)完整的模型副本),我們使用accelerate啟動(dòng)器如下:
在模型可以放入單個(gè)GPU的情況下,這允許你在K個(gè)GPU上以K倍于單GPU的速度進(jìn)行評(píng)估。 使用accelerate進(jìn)行多GPU評(píng)估的第二種方式是當(dāng)模型太大無(wú)法放入單個(gè)GPU時(shí)。 在這種情況下,在accelerate啟動(dòng)器外運(yùn)行庫(kù),但通過(guò)--model_args將parallelize=True傳遞,如下所示:
這意味著模型的權(quán)重將被分割到所有可用的GPU上。 對(duì)于更高級(jí)的用戶或更大的模型,當(dāng)parallelize=True時(shí),我們還允許以下參數(shù): 注意:我們目前不支持原生的多節(jié)點(diǎn)評(píng)估,建議使用外部托管的服務(wù)器運(yùn)行推理請(qǐng)求,或創(chuàng)建與分布式框架的自定義集成,如GPT-NeoX庫(kù)所做。 NVIDIA NeMo模型NVIDIA NeMo Framework是一個(gè)為研究人員和使用PyTorch開(kāi)發(fā)語(yǔ)言模型的開(kāi)發(fā)人員設(shè)計(jì)的生成性AI框架。 要評(píng)估NeMo模型,請(qǐng)首先按照文檔安裝NeMo。我們強(qiáng)烈建議使用NVIDIA PyTorch或NeMo容器,特別是在安裝Apex或其他依賴項(xiàng)時(shí)遇到問(wèn)題時(shí)(請(qǐng)參閱最新發(fā)布的容器)。請(qǐng)按照安裝部分的說(shuō)明也安裝lm評(píng)估工具庫(kù)。 NeMo模型可以通過(guò)NVIDIA NGC Catalog或NVIDIA的Hugging Face頁(yè)面獲得。在NVIDIA NeMo框架中,有轉(zhuǎn)換腳本可以將流行模型(如Llama、Falcon、Mixtral或MPT)的hf檢查點(diǎn)轉(zhuǎn)換為NeMo。 在單GPU上運(yùn)行NeMo模型:
建議將NeMo模型解包以避免在Docker容器內(nèi)解包 - 這可能會(huì)導(dǎo)致磁盤空間溢出。為此,可以運(yùn)行:
使用NVIDIA nemo模型進(jìn)行多GPU評(píng)估默認(rèn)情況下,只使用一個(gè)GPU。但我們支持在一個(gè)節(jié)點(diǎn)上進(jìn)行評(píng)估時(shí),使用數(shù)據(jù)復(fù)制或張量/管道并行。 要啟用數(shù)據(jù)復(fù)制,請(qǐng)將devices的model_args設(shè)置為要運(yùn)行的數(shù)據(jù)副本數(shù)量。例如,運(yùn)行8個(gè)數(shù)據(jù)副本覆蓋8個(gè)GPU的命令如下:
要啟用張量和/或管道并行,請(qǐng)?jiān)O(shè)置tensor_model_parallel_size和/或pipeline_model_parallel_size的model_args。此外,還必須將devices設(shè)置為tensor_model_parallel_size和/或pipeline_model_parallel_size的乘積。例如,使用4個(gè)GPU的一個(gè)節(jié)點(diǎn),張量并行度為2,管道并行度為2的命令如下:
請(qǐng)注意,建議將python命令替換為torchrun --nproc-per-node=<設(shè)備數(shù)> --no-python,以便更輕松地將模型加載到GPU中。這對(duì)于加載到多個(gè)GPU的大型檢查點(diǎn)特別重要。 尚不支持的功能:多節(jié)點(diǎn)評(píng)估以及數(shù)據(jù)復(fù)制與張量或管道并行的組合。 Tensor + Data Parallel與vLLM的優(yōu)化推理我們還支持vLLM,用于支持的模型類型進(jìn)行更快的推理,尤其是在多GPU上分割模型時(shí)更快。例如,單GPU或多GPU(張量并行、數(shù)據(jù)并行或兩者結(jié)合)推理的命令如下:
要使用vllm,請(qǐng)執(zhí)行pip install lm_eval[vllm]。有關(guān)支持的vLLM配置的完整列表,請(qǐng)參考我們的vLLM集成和vLLM文檔。 vLLM的輸出偶爾與Huggingface有所不同。我們將Huggingface視為參考實(shí)現(xiàn),并提供一個(gè)腳本來(lái)檢查vllm結(jié)果與HF的有效性。 提示:為了獲得最快的性能,請(qǐng)盡可能使用--batch_size auto,以利用其連續(xù)批處理功能! 模型API和推理服務(wù)器我們的庫(kù)還支持通過(guò)幾個(gè)商業(yè)API提供的模型進(jìn)行評(píng)估,并希望實(shí)現(xiàn)對(duì)最常用的性能良好的本地/自托管推理服務(wù)器的支持。 要調(diào)用托管模型,請(qǐng)使用:
我們還支持使用您自己的本地推理服務(wù)器,使用鏡像OpenAI Completions和ChatCompletions API的服務(wù)器。
請(qǐng)注意,對(duì)于外部托管模型,不應(yīng)使用--device和--batch_size等配置,并且不起作用。就像您可以使用--model_args為本地模型的模型構(gòu)造函數(shù)傳遞任意參數(shù)一樣,您可以使用它為托管模型的API傳遞任意參數(shù)。有關(guān)他們支持的參數(shù)的信息,請(qǐng)參閱托管服務(wù)的文檔。
不提供logits或logprobs的模型只能與類型為generate_until的任務(wù)一起使用,而本地模型或提供其提示的logits/logprobs的API可以在所有任務(wù)類型上運(yùn)行:generate_until、loglikelihood、loglikelihood_rolling和multiple_choice。 有關(guān)不同任務(wù)輸出類型和模型請(qǐng)求類型的更多信息,請(qǐng)參閱我們的文檔。 注意:對(duì)于閉環(huán)聊天模型API(如Anthropic Claude 3和GPT-4),我們建議首先仔細(xì)查看使用--limit 10的幾個(gè)樣本輸出,以確認(rèn)在生成任務(wù)上的答案提取和評(píng)分表現(xiàn)符合預(yù)期。對(duì)于anthropic-chat-completions,通過(guò)在--model_args中提供system="<some system prompt here>",指導(dǎo)模型如何響應(yīng)可能很有用。 其他框架許多其他庫(kù)中都包含調(diào)用評(píng)估挑戰(zhàn)的腳本。這些包括GPT-NeoX、Megatron-DeepSpeed和mesh-transformer-jax。 附加功能注意:對(duì)于不適合直接評(píng)估的任務(wù) —— 無(wú)論是由于執(zhí)行不受信任代碼的風(fēng)險(xiǎn)還是由于評(píng)估過(guò)程中的復(fù)雜性 —— 可以使用--predict_only標(biāo)志獲取解碼生成,以進(jìn)行事后評(píng)估。 如果您有兼容Metal的Mac,可以通過(guò)將--device cuda:0替換為--device mps(需要PyTorch版本2.1或更高版本)來(lái)運(yùn)行評(píng)估挑戰(zhàn)。請(qǐng)注意,PyTorch MPS后端仍處于早期開(kāi)發(fā)階段,因此可能存在正確性問(wèn)題或不支持的操作。如果您在MPS后端上觀察到模型性能異常,我們建議首先檢查在--device cpu和--device mps上的模型正向傳遞是否匹配。 注意,您可以通過(guò)運(yùn)行以下命令來(lái)查看LM輸入的樣子:
這將為每個(gè)任務(wù)寫出一個(gè)文本文件。 要驗(yàn)證執(zhí)行任務(wù)本身之外的任務(wù)數(shù)據(jù)的完整性,可以使用--check_integrity標(biāo)志:
3、高級(jí)使用技巧對(duì)于使用HuggingFace transformers庫(kù)加載的模型,通過(guò)--model_args提供的任何參數(shù)將直接傳遞給相關(guān)的構(gòu)造函數(shù)。這意味著您可以像使用AutoModel一樣使用我們的庫(kù)。例如,您可以通過(guò)在model_args參數(shù)中添加local path通過(guò)pretrained=或使用PEFT微調(diào)的模型來(lái)運(yùn)行調(diào)用,如下所示:
使用Hugging Face transformers庫(kù)可以輕松加載提供為增量權(quán)重的模型。在--model_args中,設(shè)置delta參數(shù)以指定增量權(quán)重,并使用pretrained參數(shù)指定它們將應(yīng)用于的相對(duì)基本模型:
GPTQ量化模型可以通過(guò)在model_args參數(shù)中指定文件名,使用autogptq=NAME(或autogptq=True以使用默認(rèn)名稱)加載:
我們支持任務(wù)名稱中的通配符,例如,您可以通過(guò)--task lambada_openai_mt_* 運(yùn)行所有機(jī)器翻譯的lambada任務(wù)。 4、保存結(jié)果要保存評(píng)估結(jié)果,請(qǐng)?zhí)峁┮粋€(gè)--output_path。我們還支持使用--log_samples標(biāo)志記錄模型響應(yīng),以進(jìn)行事后分析。 此外,您可以通過(guò)--use_cache提供一個(gè)目錄,用于緩存先前運(yùn)行的結(jié)果。這樣可以避免重復(fù)執(zhí)行相同的(模型,任務(wù))對(duì)進(jìn)行重新評(píng)分。 要將結(jié)果和樣本推送到Hugging Face Hub,請(qǐng)首先確保在HF_TOKEN環(huán)境變量中設(shè)置了具有寫訪問(wèn)權(quán)限的訪問(wèn)令牌。然后,使用--hf_hub_log_args標(biāo)志指定組織、倉(cāng)庫(kù)名稱、倉(cāng)庫(kù)可見(jiàn)性以及是否將結(jié)果和樣本推送到Hub - 例如,HF Hub上的示例數(shù)據(jù)集。
這使您可以通過(guò)以下方式輕松從Hub下載結(jié)果和樣本:
有關(guān)支持的參數(shù)的完整列表,請(qǐng)查閱我們文檔中的接口指南! 5、可視化結(jié)果您可以無(wú)縫地使用Weights & Biases(W&B)和Zeno分析和可視化評(píng)估挑戰(zhàn)運(yùn)行的結(jié)果。 Zeno您可以使用Zeno來(lái)可視化評(píng)估挑戰(zhàn)運(yùn)行的結(jié)果。
您還需要安裝額外的lm_eval[zeno]包。 要可視化結(jié)果,請(qǐng)使用log_samples和output_path標(biāo)志運(yùn)行評(píng)估挑戰(zhàn)。我們期望output_path包含代表各個(gè)模型名稱的多個(gè)文件夾。因此,您可以在任意數(shù)量的任務(wù)和模型上運(yùn)行評(píng)估,并將所有結(jié)果作為Zeno項(xiàng)目上傳。
然后,您可以使用zeno_visualize腳本上傳生成的數(shù)據(jù):
這將使用data_path中的所有子文件夾作為不同的模型,并將這些模型文件夾中的所有任務(wù)上傳到Zeno。如果在多個(gè)任務(wù)上運(yùn)行評(píng)估挑戰(zhàn),則project_name將用作前綴,并將為每個(gè)任務(wù)創(chuàng)建一個(gè)項(xiàng)目。 您可以在examples/visualize-zeno.ipynb中找到此工作流程的示例。 Weights and Biases通過(guò)Weights and Biases集成,您現(xiàn)在可以花更多時(shí)間提取對(duì)評(píng)估結(jié)果的深入見(jiàn)解。該集成旨在通過(guò)Weights & Biases(W&B)平臺(tái)簡(jiǎn)化記錄和可視化實(shí)驗(yàn)結(jié)果的流程。 集成提供以下功能: 首先,您需要安裝lm_eval[wandb]額外包。執(zhí)行pip install lm_eval[wandb]。使用您的唯一W&B令牌對(duì)計(jì)算機(jī)進(jìn)行身份驗(yàn)證。訪問(wèn)https:///authorize獲取令牌。在命令行終端中運(yùn)行wandb login。 像往常一樣使用wandb_args標(biāo)志運(yùn)行評(píng)估挑戰(zhàn)。使用此標(biāo)志提供參數(shù)以初始化wandb運(yùn)行(wandb.init)為逗號(hào)分隔的字符串參數(shù)。
在stdout中,您將找到指向W&B運(yùn)行頁(yè)面和生成報(bào)告的鏈接。您可以在examples/visualize-wandb.ipynb中找到此工作流程的示例,以及如何在CLI之外集成它的示例。 lm-evaluation-harness的案例應(yīng)用持續(xù)更新中…… |
|
|