ข่าวล่าสุด
hf-multimodal
และ vllm-vlm
และงาน mmmu
เป็นฟีเจอร์ต้นแบบ . เรายินดีต้อนรับผู้ใช้ให้ลองใช้คุณสมบัติที่กำลังดำเนินการนี้และทดสอบความเครียดด้วยตนเอง และขอแนะนำให้พวกเขาลองดู lmms-eval
ซึ่งเป็นโปรเจ็กต์ที่ยอดเยี่ยมที่เดิมแยกจาก lm-evalue-harness สำหรับงานต่อเนื่องหลายรูปแบบในวงกว้างมากขึ้น รุ่นและคุณสมบัติต่างๆlocal-completions
เพื่อประเมินโมเดลมี lm-evalue-harness เวอร์ชัน v0.4.0 ใหม่แล้ว !
การอัปเดตและคุณสมบัติใหม่ประกอบด้วย:
โปรดดูหน้าเอกสารที่อัปเดตของเราใน docs/
สำหรับรายละเอียดเพิ่มเติม
การพัฒนาจะดำเนินต่อไปในสาขา main
และเราขอแนะนำให้คุณส่งคำติชมเกี่ยวกับคุณสมบัติที่ต้องการ และวิธีการปรับปรุงไลบรารีเพิ่มเติม หรือถามคำถาม ทั้งในประเด็นหรือการประชาสัมพันธ์บน GitHub หรือในความขัดแย้งของ EleutherAI!
โปรเจ็กต์นี้จัดเตรียมกรอบการทำงานแบบรวมเพื่อทดสอบโมเดลภาษาเชิงสร้างสรรค์ในงานประเมินผลที่แตกต่างกันจำนวนมาก
คุณสมบัติ:
Language Model Evaling Harness เป็นแบ็คเอนด์สำหรับ ? Open LLM Leaderboard ยอดนิยมของ Hugging Face ถูกนำมาใช้ในเอกสารหลายร้อยฉบับ และถูกใช้เป็นการภายในโดยองค์กรต่างๆ มากมาย รวมถึง NVIDIA, Cohere, BigScience, BigCode, Nous Research และ Mosaic ML
หากต้องการติดตั้งแพ็คเกจ lm-eval
จากที่เก็บ github ให้รัน:
git clone --depth 1 https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .
นอกจากนี้เรายังจัดเตรียมการขึ้นต่อกันที่เป็นตัวเลือกจำนวนหนึ่งสำหรับฟังก์ชันการทำงานเพิ่มเติมอีกด้วย ตารางรายละเอียดมีอยู่ท้ายเอกสารนี้
คู่มือผู้ใช้ที่ให้รายละเอียดรายการอาร์กิวเมนต์ที่รองรับทั้งหมดมีให้ที่นี่ และบนเทอร์มินัลโดยการเรียก lm_eval -h
หรือคุณสามารถใช้ lm-eval
แทน lm_eval
ได้
รายการงานที่รองรับ (หรือการจัดกลุ่มงาน) สามารถดูได้ด้วย lm-eval --tasks list
คำอธิบายงานและลิงก์ไปยังโฟลเดอร์ย่อยที่เกี่ยวข้องมีอยู่ที่นี่
transformers
กอดใบหน้า ในการประเมินโมเดลที่โฮสต์บน HuggingFace Hub (เช่น GPT-J-6B) บน hellaswag
คุณสามารถใช้คำสั่งต่อไปนี้ (ซึ่งถือว่าคุณใช้ GPU ที่เข้ากันได้กับ CUDA):
lm_eval --model hf
--model_args pretrained=EleutherAI/gpt-j-6B
--tasks hellaswag
--device cuda:0
--batch_size 8
อาร์กิวเมนต์เพิ่มเติมสามารถจัดเตรียมให้กับตัวสร้างโมเดลได้โดยใช้แฟล็ก --model_args
สิ่งที่โดดเด่นที่สุดคือสิ่งนี้สนับสนุนหลักปฏิบัติทั่วไปในการใช้คุณสมบัติ revisions
บน Hub เพื่อจัดเก็บจุดตรวจสอบที่ได้รับการฝึกอบรมบางส่วน หรือเพื่อระบุประเภทข้อมูลสำหรับการรันโมเดล:
lm_eval --model hf
--model_args pretrained=EleutherAI/pythia-160m,revision=step100000,dtype= " float "
--tasks lambada_openai,hellaswag
--device cuda:0
--batch_size 8
โมเดลที่โหลดผ่าน transformers.AutoModelForCausalLM
ทั้งสองตัว AutoModelForCausalLM (รุ่นสไตล์ GPT แบบ autoregressive, ตัวถอดรหัสเท่านั้น) และ transformers.AutoModelForSeq2SeqLM
(เช่น รุ่นตัวเข้ารหัส-ตัวถอดรหัส เช่น T5) ใน Huggingface ได้รับการรองรับ
การเลือกขนาดแบทช์สามารถทำได้อัตโนมัติโดยตั้งค่าสถานะ --batch_size
เป็น auto
การดำเนินการนี้จะทำการตรวจหาขนาดแบตช์ที่ใหญ่ที่สุดที่จะพอดีกับอุปกรณ์ของคุณโดยอัตโนมัติ ในงานที่มีความแตกต่างอย่างมากระหว่างตัวอย่างที่ยาวที่สุดและสั้นที่สุด การคำนวณขนาดแบตช์ที่ใหญ่ที่สุดใหม่เป็นระยะๆ เพื่อเพิ่มความเร็วต่อไปอาจเป็นประโยชน์ เมื่อต้องการทำเช่นนี้ ให้ผนวก :N
เข้ากับแฟล็กด้านบนเพื่อคำนวณขนาดแบตช์ที่ใหญ่ที่สุด N
ครั้งใหม่โดยอัตโนมัติ ตัวอย่างเช่น หากต้องการคำนวณขนาดแบตช์ใหม่ 4 ครั้ง คำสั่งจะเป็น:
lm_eval --model hf
--model_args pretrained=EleutherAI/pythia-160m,revision=step100000,dtype= " float "
--tasks lambada_openai,hellaswag
--device cuda:0
--batch_size auto:4
บันทึก
เช่นเดียวกับที่คุณสามารถระบุเส้นทางท้องถิ่นไปยัง transformers.AutoModel
คุณยังสามารถระบุเส้นทางท้องถิ่นไปยัง lm_eval
ผ่าน --model_args pretrained=/path/to/model
accelerate
เราสนับสนุนสามวิธีหลักในการใช้ไลบรารีเร่งความเร็วของ Hugging Face สำหรับการประเมิน GPU หลายตัว
ใน การประเมินข้อมูลแบบคู่ขนาน (โดยที่ GPU แต่ละตัวโหลด สำเนาแบบเต็มของโมเดลแยกกัน ) เราจะใช้ประโยชน์จากตัวเรียกใช้ accelerate
ดังต่อไปนี้:
accelerate launch -m lm_eval --model hf
--tasks lambada_openai,arc_easy
--batch_size 16
(หรือผ่าน accelerate launch --no-python lm_eval
)
สำหรับกรณีที่โมเดลของคุณสามารถใส่บน GPU ตัวเดียวได้ สิ่งนี้จะทำให้คุณสามารถประเมิน K GPUs K ได้เร็วกว่าตัวเดียว
คำเตือน : การตั้งค่านี้ใช้ไม่ได้กับการแบ่งส่วนโมเดล FSDP ดังนั้นในการ accelerate config
FSDP จะต้องปิดการใช้งาน หรือต้องใช้ตัวเลือก NO_SHARD FSDP
วิธีที่สองของการใช้ accelerate
สำหรับการประเมิน GPU หลายตัวคือเมื่อโมเดลของคุณมี ขนาดใหญ่เกินกว่าที่จะใส่บน GPU ตัวเดียวได้
ในการตั้งค่านี้ ให้รันไลบรารี ภายนอก accelerate
Launcher แต่ส่ง parallelize=True
ไปยัง --model_args
ดังนี้:
lm_eval --model hf
--tasks lambada_openai,arc_easy
--model_args parallelize=True
--batch_size 16
ซึ่งหมายความว่าน้ำหนักของโมเดลของคุณจะถูกแบ่งตาม GPU ที่มีอยู่ทั้งหมด
สำหรับผู้ใช้ขั้นสูงหรือโมเดลที่ใหญ่กว่า เราอนุญาตให้ใช้อาร์กิวเมนต์ต่อไปนี้เมื่อ parallelize=True
เช่นกัน:
device_map_option
: วิธีแบ่งน้ำหนักโมเดลตาม GPU ที่มีอยู่ ค่าเริ่มต้นเป็น "อัตโนมัติ"max_memory_per_gpu
: หน่วยความจำ GPU สูงสุดที่จะใช้ต่อ GPU ในการโหลดโมเดลmax_cpu_memory
: จำนวนหน่วยความจำ CPU สูงสุดที่จะใช้เมื่อถ่ายน้ำหนักโมเดลไปที่ RAMoffload_folder
: โฟลเดอร์ที่น้ำหนักโมเดลจะถูกออฟโหลดลงดิสก์หากจำเป็นตัวเลือกที่สามคือการใช้ทั้งสองอย่างพร้อมกัน ซึ่งจะช่วยให้คุณสามารถใช้ประโยชน์จากทั้งการขนานข้อมูลและการแบ่งส่วนโมเดล และมีประโยชน์อย่างยิ่งสำหรับโมเดลที่มีขนาดใหญ่เกินกว่าจะพอดีกับ GPU ตัวเดียว
accelerate launch --multi_gpu --num_processes {nb_of_copies_of_your_model}
-m lm_eval --model hf
--tasks lambada_openai,arc_easy
--model_args parallelize=True
--batch_size 16
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับความเท่าเทียมของโมเดลและวิธีใช้กับไลบรารี accelerate
โปรดดูเอกสารประกอบการเร่งความเร็ว
คำเตือน: เราไม่รองรับการประเมินแบบหลายโหนดโดยใช้ประเภทโมเดล hf
! โปรดอ้างอิงการบูรณาการไลบรารี GPT-NeoX ของเราสำหรับตัวอย่างโค้ดที่ใช้เขียนสคริปต์การประเมินหลายเครื่องแบบกำหนดเอง
หมายเหตุ: ขณะนี้เราไม่รองรับการประเมินแบบหลายโหนดแบบเนทิฟ และแนะนำให้ใช้เซิร์ฟเวอร์ที่โฮสต์ภายนอกเพื่อเรียกใช้คำขอการอนุมาน หรือสร้างการผสานรวมแบบกำหนดเองกับเฟรมเวิร์กแบบกระจายของคุณเช่นเดียวกับที่ทำกับไลบรารี GPT-NeoX
nemo
NVIDIA NeMo Framework เป็นเฟรมเวิร์ก AI ที่สร้างขึ้นสำหรับนักวิจัยและนักพัฒนาไพทอร์ชที่ทำงานเกี่ยวกับโมเดลภาษา
หากต้องการประเมินโมเดล nemo
ให้เริ่มต้นด้วยการติดตั้ง NeMo ตามเอกสารประกอบ เราขอแนะนำอย่างยิ่งให้ใช้คอนเทนเนอร์ NVIDIA PyTorch หรือ NeMo โดยเฉพาะอย่างยิ่งหากมีปัญหาในการติดตั้ง Apex หรือการพึ่งพาอื่น ๆ (ดูคอนเทนเนอร์ที่ออกล่าสุด) โปรดติดตั้งไลบรารีสายรัดประเมิน lm โดยทำตามคำแนะนำในส่วนการติดตั้ง
สามารถรับโมเดล NeMo ได้ผ่านทาง NVIDIA NGC Catalog หรือในหน้า Hugging Face ของ NVIDIA ใน NVIDIA NeMo Framework มีสคริปต์การแปลงเพื่อแปลงจุดตรวจ hf
ของโมเดลยอดนิยม เช่น llama, falcon, mixtral หรือ mpt เป็น nemo
รันโมเดล nemo
บน GPU ตัวเดียว:
lm_eval --model nemo_lm
--model_args path= < path_to_nemo_model >
--tasks hellaswag
--batch_size 32
ขอแนะนำให้แกะโมเดล nemo
เพื่อหลีกเลี่ยงการแกะออกภายในคอนเทนเนอร์นักเทียบท่า เพราะอาจทำให้พื้นที่ดิสก์ล้น เพื่อที่คุณสามารถเรียกใช้:
mkdir MY_MODEL
tar -xvf MY_MODEL.nemo -c MY_MODEL
nemo
ตามค่าเริ่มต้น จะใช้ GPU เพียงตัวเดียวเท่านั้น แต่เรารองรับการจำลองข้อมูลหรือความขนานของเทนเซอร์/ไปป์ไลน์ในระหว่างการประเมินบนโหนดเดียว
model_args
ของ devices
เป็นจำนวนแบบจำลองข้อมูลที่จะรัน ตัวอย่างเช่น คำสั่งให้เรียกใช้การจำลองข้อมูล 8 รายการบน GPU 8 ตัวคือ: torchrun --nproc-per-node=8 --no-python lm_eval
--model nemo_lm
--model_args path= < path_to_nemo_model > ,devices=8
--tasks hellaswag
--batch_size 32
model_args
ของ tensor_model_parallel_size
และ/หรือ pipeline_model_parallel_size
นอกจากนี้ คุณยังต้องตั้งค่า devices
ให้เท่ากับผลคูณของ tensor_model_parallel_size
และ/หรือ pipeline_model_parallel_size
ตัวอย่างเช่น คำสั่งให้ใช้หนึ่งโหนดจาก 4 GPU โดยมีเทนเซอร์ขนานเป็น 2 และไปป์ไลน์ขนานเป็น 2 คือ: torchrun --nproc-per-node=4 --no-python lm_eval
--model nemo_lm
--model_args path= < path_to_nemo_model > ,devices=4,tensor_model_parallel_size=2,pipeline_model_parallel_size=2
--tasks hellaswag
--batch_size 32
โปรดทราบว่าขอแนะนำให้แทนที่คำสั่ง python
ด้วย torchrun --nproc-per-node=<number of devices> --no-python
เพื่ออำนวยความสะดวกในการโหลดโมเดลลงใน GPU นี่เป็นสิ่งสำคัญอย่างยิ่งสำหรับจุดตรวจขนาดใหญ่ที่โหลดลงใน GPU หลายตัว
ยังไม่รองรับ: การประเมินแบบหลายโหนดและการรวมกันของการจำลองข้อมูลด้วยความขนานของเทนเซอร์หรือไปป์ไลน์
vLLM
นอกจากนี้เรายังรองรับ vLLM เพื่อการอนุมานที่รวดเร็วกว่าในประเภทโมเดลที่รองรับ โดยเฉพาะอย่างยิ่งเร็วกว่าเมื่อแยกโมเดลออกเป็น GPU หลายตัว สำหรับ GPU เดี่ยวหรือหลาย GPU - เทนเซอร์ขนาน ข้อมูลขนาน หรือทั้งสองอย่างรวมกัน - การอนุมาน ตัวอย่างเช่น:
lm_eval --model vllm
--model_args pretrained={model_name},tensor_parallel_size={GPUs_per_model},dtype=auto,gpu_memory_utilization=0.8,data_parallel_size={model_replicas}
--tasks lambada_openai
--batch_size auto
หากต้องการใช้ vllm ให้ทำ pip install lm_eval[vllm]
สำหรับรายการการกำหนดค่า vLLM ที่รองรับทั้งหมด โปรดอ้างอิงการรวม vLLM ของเราและเอกสารประกอบ vLLM
vLLM มีความแตกต่างในเอาต์พุตจาก Huggingface ในบางครั้ง เราถือว่า Huggingface เป็นการดำเนินการอ้างอิง และจัดเตรียมสคริปต์สำหรับตรวจสอบความถูกต้องของผลลัพธ์ vllm กับ HF
เคล็ดลับ
เพื่อประสิทธิภาพที่เร็วที่สุด เราขอแนะนำให้ใช้ --batch_size auto
สำหรับ vLLM ทุกครั้งที่เป็นไปได้ เพื่อใช้ประโยชน์จากฟังก์ชันการทำงานเป็นชุดอย่างต่อเนื่อง
เคล็ดลับ
การส่ง max_model_len=4096
หรือค่าเริ่มต้นที่สมเหตุสมผลอื่นๆ ไปยัง vLLM ผ่าน model args อาจทำให้เกิดการเร่งความเร็วหรือป้องกันข้อผิดพลาดหน่วยความจำไม่เพียงพอเมื่อพยายามใช้ขนาดแบตช์อัตโนมัติ เช่น Mistral-7B-v0.1 ซึ่งกำหนดค่าเริ่มต้นไว้ที่ความยาวสูงสุดที่ 32k
ไลบรารีของเรายังสนับสนุนการประเมินโมเดลที่ให้บริการผ่าน API เชิงพาณิชย์หลายตัว และเราหวังว่าจะใช้การสนับสนุนสำหรับเซิร์ฟเวอร์การอนุมานภายในเครื่อง/โฮสต์ด้วยตนเองที่มีประสิทธิภาพสูงสุดซึ่งมีการใช้งานบ่อยที่สุด
หากต้องการเรียกโมเดลที่โฮสต์ ให้ใช้:
export OPENAI_API_KEY=YOUR_KEY_HERE
lm_eval --model openai-completions
--model_args model=davinci
--tasks lambada_openai,hellaswag
นอกจากนี้เรายังสนับสนุนการใช้เซิร์ฟเวอร์การอนุมานภายในเครื่องของคุณเองกับเซิร์ฟเวอร์ที่จำลอง OpenAI Completions และ ChatCompletions API
lm_eval --model local-completions --tasks gsm8k --model_args model=facebook/opt-125m,base_url=http://{yourip}:8000/v1/completions,num_concurrent=1,max_retries=3,tokenized_requests=False,batch_size=16
โปรดทราบว่าสำหรับโมเดลที่โฮสต์ภายนอก การกำหนดค่า เช่น --device
ที่เกี่ยวข้องกับตำแหน่งที่จะวางโมเดลในเครื่อง ไม่ควรใช้และไม่สามารถทำงานได้ เช่นเดียวกับที่คุณสามารถใช้ --model_args
เพื่อส่งอาร์กิวเมนต์ที่กำหนดเองไปยังตัวสร้างโมเดลสำหรับโมเดลโลคัล คุณสามารถใช้มันเพื่อส่งอาร์กิวเมนต์ที่กำหนดเองไปยัง API โมเดลสำหรับโมเดลที่โฮสต์ได้ ดูเอกสารประกอบของบริการโฮสติ้งเพื่อดูข้อมูลเกี่ยวกับข้อโต้แย้งที่พวกเขาสนับสนุน
API หรือเซิร์ฟเวอร์การอนุมาน | ดำเนินการ? | --model <xxx> | รุ่นที่รองรับ: | ประเภทคำขอ: |
---|---|---|---|---|
ความสำเร็จของ OpenAI | openai-completions , local-completions | โมเดล OpenAI Completions API ทั้งหมด | generate_until , loglikelihood , loglikelihood_rolling | |
การแชท OpenAI เสร็จสิ้น | openai-chat-completions , local-chat-completions | โมเดล ChatCompletions API ทั้งหมด | generate_until (ไม่มี logprobs) | |
มานุษยวิทยา | anthropic | เครื่องยนต์มานุษยวิทยาที่รองรับ | generate_until (ไม่มี logprobs) | |
แชทมานุษยวิทยา | anthropic-chat , anthropic-chat-completions | เครื่องยนต์มานุษยวิทยาที่รองรับ | generate_until (ไม่มี logprobs) | |
ซินธ์ซินธ์ | textsynth | เครื่องยนต์ที่รองรับทั้งหมด | generate_until , loglikelihood , loglikelihood_rolling | |
เชื่อมโยงกัน | ⌛ - ถูกบล็อกจากข้อผิดพลาด Cohere API | ไม่มี | เอ็นจิ้น cohere.generate() ทั้งหมด | generate_until , loglikelihood , loglikelihood_rolling |
Llama.cpp (ผ่าน llama-cpp-python) | gguf , ggml | ทุกรุ่นรองรับโดย llama.cpp | generate_until , loglikelihood , (ยังไม่ได้ใช้การประเมินความงุนงง) | |
วีแอลแอลเอ็ม | vllm | โมเดลภาษาเชิงสาเหตุ HF ส่วนใหญ่ | generate_until , loglikelihood , loglikelihood_rolling | |
แมมบ้า | mamba_ssm | โมเดลภาษาสถาปัตยกรรม Mamba ผ่านแพ็คเกจ mamba_ssm | generate_until , loglikelihood , loglikelihood_rolling | |
Huggingface Optimum (LM เชิงสาเหตุ) | openvino | AutoModelForCausalLM ที่ใช้ตัวถอดรหัสเท่านั้นที่แปลงด้วย Huggingface Optimum เป็นรูปแบบ OpenVINO™ Intermediate Representation (IR) | generate_until , loglikelihood , loglikelihood_rolling | |
เซลล์ประสาทผ่าน AWS Inf2 (LM เชิงสาเหตุ) | neuronx | AutoModelForCausalLM ที่รองรับตัวถอดรหัสเท่านั้นเพื่อทำงานบนอิมเมจ Huggingface-ami สำหรับ inferentia2 | generate_until , loglikelihood , loglikelihood_rolling | |
Neural Magic DeepSparse | deepsparse | LM ใดๆ จาก SparseZoo หรือบน HF Hub ที่มีแท็ก "deepsparse" | generate_until , loglikelihood | |
ประสาทเมจิก SparseML | sparseml | AutoModelForCausalLM แบบถอดรหัสเท่านั้นจาก SparseZoo หรือบน HF Hub มีประโยชน์อย่างยิ่งสำหรับโมเดลที่มีการวัดปริมาณ เช่น zoo:llama2-7b-gsm8k_llama2_pretrain-pruned60_quantized | generate_until , loglikelihood , loglikelihood_rolling | |
เซิร์ฟเวอร์อนุมานในพื้นที่ของคุณ! | local-completions หรือ local-chat-completions | รองรับเซิร์ฟเวอร์ที่เข้ากันได้กับ OpenAI API พร้อมการปรับแต่งที่ง่ายดายสำหรับ API อื่น ๆ | generate_until , loglikelihood , loglikelihood_rolling |
โมเดลที่ไม่ระบุ logits หรือ logprobs สามารถใช้ได้กับงานประเภท generate_until
เท่านั้น ในขณะที่โมเดลโลคัลหรือ API ที่จัดหา logprobs/logits ของพร้อมต์สามารถรันได้กับงานทุกประเภท: generate_until
, loglikelihood
, loglikelihood_rolling
และ multiple_choice
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับงาน output_types
และประเภทคำขอโมเดลต่างๆ โปรดดูเอกสารประกอบของเรา
บันทึก
เพื่อประสิทธิภาพที่ดีที่สุดกับ API โมเดลการแชทแบบปิด เช่น Anthropic Claude 3 และ GPT-4 เราขอแนะนำให้ดูตัวอย่างเอาต์พุตบางส่วนอย่างระมัดระวังโดยใช้ --limit 10
ก่อน เพื่อยืนยันว่าการแยกคำตอบและการให้คะแนนในงานสร้างนั้นทำงานได้ตามที่คาดไว้ การให้ system="<some system prompt here>"
ภายใน --model_args
สำหรับ anthropic-chat-completions เพื่อสั่งโมเดลว่ารูปแบบใดที่จะตอบสนองอาจมีประโยชน์
ไลบรารีอื่นๆ จำนวนหนึ่งมีสคริปต์สำหรับเรียกใช้ eval harness ผ่านไลบรารีของตน ซึ่งรวมถึง GPT-NeoX, Megatron-DeepSpeed และ mesh-transformer-jax
หากต้องการสร้างการผสานรวมที่คุณกำหนดเอง คุณสามารถทำตามคำแนะนำจากบทช่วยสอนนี้
บันทึก
สำหรับงานที่ไม่เหมาะสำหรับการประเมินโดยตรง ไม่ว่าจะเป็นความเสี่ยงเนื่องจากการดำเนินการโค้ดที่ไม่น่าเชื่อถือหรือความซับซ้อนในกระบวนการประเมิน แฟล็ก --predict_only
พร้อมใช้งานเพื่อรับรุ่นที่ถอดรหัสแล้วสำหรับการประเมินภายหลังเฉพาะกิจ
หากคุณมี Mac ที่รองรับ Metal คุณสามารถเรียกใช้ eval harness ได้โดยใช้แบ็คเอนด์ MPS โดยแทนที่ --device cuda:0
ด้วย --device mps
(ต้องใช้ PyTorch เวอร์ชัน 2.1 หรือสูงกว่า) โปรดทราบว่าแบ็กเอนด์ PyTorch MPS ยังอยู่ในช่วงเริ่มต้นของการพัฒนา ดังนั้นอาจมีปัญหาด้านความถูกต้องหรือการดำเนินการที่ไม่ได้รับการสนับสนุน หากคุณสังเกตเห็นความแปลกประหลาดในประสิทธิภาพของโมเดลบนแบ็คเอนด์ MPS เราขอแนะนำให้ตรวจสอบก่อนว่าการส่งต่อโมเดลของคุณบน --device cpu
และ --device mps
ตรงกัน
บันทึก
คุณสามารถตรวจสอบลักษณะของอินพุต LM ได้โดยการรันคำสั่งต่อไปนี้:
python write_out.py
--tasks < task1,task2,... >
--num_fewshot 5
--num_examples 10
--output_base_path /path/to/output/folder
การดำเนินการนี้จะเขียนไฟล์ข้อความหนึ่งไฟล์สำหรับแต่ละงาน
หากต้องการตรวจสอบความสมบูรณ์ของข้อมูลของงานที่คุณกำลังดำเนินการ นอกเหนือจากการรันงานด้วยตนเอง คุณสามารถใช้แฟล็ก --check_integrity
:
lm_eval --model openai
--model_args engine=davinci
--tasks lambada_openai,hellaswag
--check_integrity
สำหรับโมเดลที่โหลดด้วยไลบรารี transformers
HuggingFace อาร์กิวเมนต์ใด ๆ ที่ให้ไว้ผ่าน --model_args
จะถูกส่งผ่านไปยังตัวสร้างที่เกี่ยวข้องโดยตรง ซึ่งหมายความว่าทุกสิ่งที่คุณสามารถทำได้ด้วย AutoModel
ก็สามารถทำได้ด้วยไลบรารีของเรา ตัวอย่างเช่น คุณสามารถส่งผ่านเส้นทางท้องถิ่นผ่าน pretrained=
หรือใช้โมเดลที่ปรับแต่งด้วย PEFT โดยรับสายที่คุณจะเรียกใช้เพื่อประเมินโมเดลพื้นฐานและเพิ่ม ,peft=PATH
ให้กับอาร์กิวเมนต์ model_args
:
lm_eval --model hf
--model_args pretrained=EleutherAI/gpt-j-6b,parallelize=True,load_in_4bit=True,peft=nomic-ai/gpt4all-j-lora
--tasks openbookqa,arc_easy,winogrande,hellaswag,arc_challenge,piqa,boolq
--device cuda:0
โมเดลที่ให้มาเป็นตุ้มน้ำหนักเดลต้าสามารถโหลดได้อย่างง่ายดายโดยใช้ไลบรารีหม้อแปลง Hugging Face ภายใน --model_args ให้ตั้งค่าอาร์กิวเมนต์เดลต้าเพื่อระบุน้ำหนักเดลต้า และใช้อาร์กิวเมนต์ที่ได้รับการฝึกล่วงหน้าเพื่อกำหนดโมเดลฐานสัมพัทธ์ที่จะนำไปใช้:
lm_eval --model hf
--model_args pretrained=Ejafa/llama_7B,delta=lmsys/vicuna-7b-delta-v1.1
--tasks hellaswag
สามารถโหลดโมเดลเชิงปริมาณ GPTQ ได้โดยใช้ GPTQModel (เร็วกว่า) หรือ AutoGPTQ
GPTQModel: เพิ่ม ,gptqmodel=True
ไปที่ model_args
lm_eval --model hf
--model_args pretrained=model-name-or-path,gptqmodel=True
--tasks hellaswag
AutoGPTQ: เพิ่ม ,autogptq=True
ไปที่ model_args
:
lm_eval --model hf
--model_args pretrained=model-name-or-path,autogptq=model.safetensors,gptq_use_triton=True
--tasks hellaswag
เรารองรับไวลด์การ์ดในชื่องาน เช่น คุณสามารถรันงาน lambada ที่แปลด้วยเครื่องทั้งหมดได้ผ่านทาง --task lambada_openai_mt_*
หากต้องการบันทึกผลการประเมิน ให้ระบุ --output_path
นอกจากนี้เรายังสนับสนุนการตอบสนองของโมเดลการบันทึกด้วยแฟล็ก --log_samples
สำหรับการวิเคราะห์ภายหลังเฉพาะกิจ
นอกจากนี้ เราสามารถจัดเตรียมไดเร็กทอรีด้วย --use_cache
เพื่อแคชผลลัพธ์ของการรันก่อนหน้า วิธีนี้ช่วยให้คุณหลีกเลี่ยงการดำเนินการซ้ำของคู่เดียวกัน (โมเดล งาน) สำหรับการให้คะแนนใหม่
หากต้องการส่งผลลัพธ์และตัวอย่างไปยัง Hugging Face Hub ขั้นแรกตรวจสอบให้แน่ใจว่าโทเค็นการเข้าถึงที่มีการเข้าถึงการเขียนได้รับการตั้งค่าในตัวแปรสภาพแวดล้อม HF_TOKEN
จากนั้น ใช้แฟล็ก --hf_hub_log_args
เพื่อระบุองค์กร ชื่อพื้นที่เก็บข้อมูล การเปิดเผยพื้นที่เก็บข้อมูล และไม่ว่าจะส่งผลลัพธ์และตัวอย่างไปยังฮับหรือไม่ - ชุดข้อมูลตัวอย่างบน HF Hub ตัวอย่างเช่น:
lm_eval --model hf
--model_args pretrained=model-name-or-path,autogptq=model.safetensors,gptq_use_triton=True
--tasks hellaswag
--log_samples
--output_path results
--hf_hub_log_args hub_results_org=EleutherAI,hub_repo_name=lm-eval-results,push_results_to_hub=True,push_samples_to_hub=True,public_repo=False
ซึ่งช่วยให้คุณดาวน์โหลดผลลัพธ์และตัวอย่างจาก Hub ได้อย่างง่ายดาย โดยใช้:
from datasets import load_dataset
load_dataset ( "EleutherAI/lm-eval-results-private" , "hellaswag" , "latest" )
หากต้องการทราบรายการอาร์กิวเมนต์ที่รองรับทั้งหมด โปรดดูคำแนะนำอินเทอร์เฟซในเอกสารประกอบของเรา
คุณสามารถเห็นภาพและวิเคราะห์ผลลัพธ์ของชุดประเมินผลของคุณได้อย่างราบรื่นโดยใช้ทั้ง Weights & Biases (W&B) และ Zeno
คุณสามารถใช้ Zeno เพื่อแสดงภาพผลลัพธ์ของการวิ่งสายรัดประเมินของคุณ
ขั้นแรก ไปที่ hub.zenoml.com เพื่อสร้างบัญชีและรับรหัส API บนหน้าบัญชีของคุณ เพิ่มคีย์นี้เป็นตัวแปรสภาพแวดล้อม:
export ZENO_API_KEY=[your api key]
คุณจะต้องติดตั้งแพ็คเกจ lm_eval[zeno]
เพิ่มเติมด้วย
หากต้องการแสดงผลลัพธ์เป็นภาพ ให้รันสายรัด eval ด้วยแฟล็ก log_samples
และ output_path
เราคาดว่า output_path
จะมีหลายโฟลเดอร์ที่แสดงชื่อรุ่นแต่ละรุ่น คุณสามารถดำเนินการประเมินงานและโมเดลจำนวนเท่าใดก็ได้ และอัปโหลดผลลัพธ์ทั้งหมดเป็นโปรเจ็กต์บน Zeno
lm_eval
--model hf
--model_args pretrained=EleutherAI/gpt-j-6B
--tasks hellaswag
--device cuda:0
--batch_size 8
--log_samples
--output_path output/gpt-j-6B
จากนั้น คุณสามารถอัปโหลดข้อมูลผลลัพธ์ได้โดยใช้สคริปต์ zeno_visualize
:
python scripts/zeno_visualize.py
--data_path output
--project_name " Eleuther Project "
นี่จะใช้โฟลเดอร์ย่อยทั้งหมดใน data_path
เป็นโมเดลที่แตกต่างกัน และอัปโหลดงานทั้งหมดภายในโฟลเดอร์โมเดลเหล่านี้ไปยัง Zeno หากคุณรันชุดควบคุม eval ในหลายงาน project_name
จะถูกนำมาใช้เป็นคำนำหน้าและหนึ่งโปรเจ็กต์จะถูกสร้างขึ้นต่องาน
คุณสามารถดูตัวอย่างเวิร์กโฟลว์นี้ได้ใน example/visualize-zeno.ipynb
ด้วยการผสานรวม Weights and Biases คุณสามารถใช้เวลามากขึ้นในการดึงข้อมูลเชิงลึกที่ลึกซึ้งยิ่งขึ้นไปยังผลการประเมินของคุณ การบูรณาการได้รับการออกแบบมาเพื่อปรับปรุงกระบวนการบันทึกและการแสดงภาพผลการทดลองโดยใช้แพลตฟอร์ม Weights & Biases (W&B)
การบูรณาการมีฟังก์ชันการทำงาน
results.json
เป็นสิ่งประดิษฐ์สำหรับการควบคุมเวอร์ชัน<task_name>_eval_samples.json
หากตัวอย่างถูกบันทึกไว้ ก่อนอื่น คุณจะต้องติดตั้งแพ็คเกจ lm_eval[wandb] เพิ่มเติม ทำ pip install lm_eval[wandb]
ตรวจสอบเครื่องของคุณด้วยโทเค็น W&B ที่เป็นเอกลักษณ์ของคุณ ไปที่ https://wandb.ai/authorize เพื่อรับหนึ่งอัน ทำการ wandb login
ในเทอร์มินัลบรรทัดคำสั่งของคุณ
รัน eval harness ตามปกติด้วยแฟล็ก wandb_args
ใช้แฟล็กนี้เพื่อจัดเตรียมอาร์กิวเมนต์สำหรับการเริ่มต้นการรัน wandb (wandb.init) เป็นอาร์กิวเมนต์สตริงที่คั่นด้วยเครื่องหมายจุลภาค
lm_eval
--model hf
--model_args pretrained=microsoft/phi-2,trust_remote_code=True
--tasks hellaswag,mmlu_abstract_algebra
--device cuda:0
--batch_size 8
--output_path output/phi-2
--limit 10
--wandb_args project=lm-eval-harness-integration
--log_samples
ใน stdout คุณจะพบลิงก์ไปยังเพจการดำเนินการ W&B รวมถึงลิงก์ไปยังรายงานที่สร้างขึ้น คุณสามารถดูตัวอย่างเวิร์กโฟลว์นี้ได้ใน example/visualize-wandb.ipynb และตัวอย่างวิธีผสานการทำงานนอกเหนือจาก CLI
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับห้องสมุดและวิธีที่ทุกอย่างเข้ากัน โปรดดูหน้าเอกสารประกอบทั้งหมดของเรา! เราวางแผนที่จะโพสต์แผนงานที่กว้างขึ้นสำหรับการปรับปรุงห้องสมุดตามที่ต้องการและวางแผนไว้เร็วๆ นี้ พร้อมด้วยข้อมูลเพิ่มเติมว่าผู้ร่วมให้ข้อมูลสามารถช่วยได้อย่างไร
หากต้องการใช้งานใหม่ในชุดควบคุม eval โปรดดูคู่มือนี้
โดยทั่วไป เราปฏิบัติตามรายการลำดับความสำคัญนี้เพื่อจัดการกับข้อกังวลเกี่ยวกับการแจ้งเตือนและรายละเอียดการประเมินอื่นๆ:
สิ่งเหล่านี้เป็นแนวทางไม่ใช่กฎเกณฑ์ และสามารถลบล้างได้ในสถานการณ์พิเศษ
เราพยายามจัดลำดับความสำคัญของข้อตกลงกับขั้นตอนที่กลุ่มอื่นใช้เพื่อลดอันตรายเมื่อผู้คนเปรียบเทียบการวิ่งในเอกสารต่างๆ อย่างหลีกเลี่ยงไม่ได้ แม้ว่าเราจะท้อแท้กับการปฏิบัติก็ตาม ในอดีต เรายังจัดลำดับความสำคัญของการนำไปใช้จาก Language Models are Few Shot Learners เนื่องจากเป้าหมายเดิมของเราคือการเปรียบเทียบผลลัพธ์กับรายงานนั้นโดยเฉพาะ
วิธีที่ดีที่สุดในการรับการสนับสนุนคือการเปิดปัญหาใน repo นี้หรือเข้าร่วมเซิร์ฟเวอร์ EleutherAI Discord ช่อง #lm-thunderdome
มีไว้สำหรับการพัฒนาโปรเจ็กต์นี้โดยเฉพาะ และช่อง #release-discussion
มีไว้สำหรับรับการสนับสนุนสำหรับการเผยแพร่ของเรา หากคุณเคยใช้ห้องสมุดและมีประสบการณ์เชิงบวก (หรือเชิงลบ) เรายินดีรับฟังจากคุณ!
สามารถติดตั้งการพึ่งพาพิเศษผ่าน pip install -e ".[NAME]"
ชื่อ | ใช้ |
---|---|
เอพีไอ | สำหรับการใช้โมเดล api (Anthropic, OpenAI API) |
ลึกเบาบาง | สำหรับการรันโมเดล DeepSparse ของ NM |
ผู้พัฒนา | สำหรับการประชาสัมพันธ์และการมีส่วนร่วม |
gptq | สำหรับการโหลดโมเดลด้วย GPTQ |
hf_transfer | เพื่อเพิ่มความเร็วในการดาวน์โหลดไฟล์ HF Hub |
ไม่มีวันหยุด | สำหรับการรันงาน IFEval |
เซลล์ประสาท | สำหรับการรันบนอินสแตนซ์ AWS inf2 |
แมมบ้า | สำหรับการโหลดโมเดล Mamba SSM |
คณิตศาสตร์ | สำหรับการตรวจสอบคำตอบงานคณิตศาสตร์ |
พูดได้หลายภาษา | สำหรับโทเค็นไนเซอร์หลายภาษา |
เหมาะสมที่สุด | สำหรับการรันรุ่น Intel OpenVINO |
พรอมต์ซอร์ส | สำหรับการใช้พรอมต์ซอร์ส |
ประโยค | สำหรับการใช้ tokenizer ประโยค |
สปาร์เซมล์ | สำหรับการใช้โมเดล SparseML ของ NM |
การทดสอบ | สำหรับการรันชุดทดสอบไลบรารี |
vllm | สำหรับการโหลดโมเดลด้วย vLLM |
เซโน | สำหรับการแสดงภาพผลลัพธ์ด้วย Zeno |
- | - |
ทั้งหมด | โหลดความพิเศษทั้งหมด (ไม่แนะนำ) |
@misc{eval-harness,
author = {Gao, Leo and Tow, Jonathan and Abbasi, Baber and Biderman, Stella and Black, Sid and DiPofi, Anthony and Foster, Charles and Golding, Laurence and Hsu, Jeffrey and Le Noac'h, Alain and Li, Haonan and McDonell, Kyle and Muennighoff, Niklas and Ociepa, Chris and Phang, Jason and Reynolds, Laria and Schoelkopf, Hailey and Skowron, Aviya and Sutawika, Lintang and Tang, Eric and Thite, Anish and Wang, Ben and Wang, Kevin and Zou, Andy},
title = {A framework for few-shot language model evaluation},
month = 07,
year = 2024,
publisher = {Zenodo},
version = {v0.4.3},
doi = {10.5281/zenodo.12608602},
url = {https://zenodo.org/records/12608602}
}