ฐานโค้ดนี้เป็นการนำ LayerSkip ไปใช้: การเปิดใช้งานการอนุมานทางออกล่วงหน้าและการถอดรหัสการคาดเดาด้วยตนเอง
$ git clone [email protected]:facebookresearch/LayerSkip.git
$ cd LayerSkip
$ conda create --name layer_skip python=3.10
$ conda activate layer_skip
$ pip install -r requirements.txt
โมเดลการเข้าถึง: หากต้องการสังเกตการเร่งความเร็ว คุณต้องเข้าถึง LLM ที่ได้รับการฝึกอบรมโดยใช้สูตร LayerSkip เรามีจุดตรวจ 6 จุดบน HuggingFace ของลามะรุ่นต่างๆ ที่ได้รับการฝึกฝนอย่างต่อเนื่องโดยใช้สูตร LayerSkip:
facebook/layerskip-llama2-7B
facebook/layerskip-llama2-13B
facebook/layerskip-codellama-7B
facebook/layerskip-codellama-34B
facebook/layerskip-llama3-8B
facebook/layerskip-llama3.2-1B
เพื่อเข้าถึงแต่ละรุ่น:
huggingface-cli login
และคุณจะได้รับแจ้งให้ระบุโทเค็นที่คุณได้รับในขั้นตอนที่ 3เมื่อคุณรันขั้นตอนเหล่านั้นแล้ว คำสั่งด้านล่างเพื่อรันจุดตรวจ LayerSkip ควรใช้งานได้
หากต้องการรันหนึ่งในโมเดลของเราในโหมดโต้ตอบโดยใช้การถอดรหัสอัตโนมัติแบบปกติ:
$ torchrun generate.py --model facebook/layerskip-llama2-7B
--sample True
--max_steps 512
ในการสังเกตการเร่งความเร็ว คุณต้องใช้การถอดรหัสแบบคาดเดาตัวเองเพื่อสร้างโทเค็น และระบุ --exit_layer
ซึ่งเป็นเลเยอร์ของระยะร่างที่จะออก และ --num_speculations
จำนวนโทเค็นแบบร่าง:
$ torchrun generate.py --model facebook/layerskip-llama2-7B
--sample True
--max_steps 512
--generation_strategy self_speculative
--exit_layer 8
--num_speculations 6
เคล็ดลับ:
--model
เป็นโมเดล HuggingFace ใดก็ได้ แต่เพื่อที่จะสังเกตการเร่งความเร็วด้วยการถอดรหัสแบบคาดเดาในตัวเอง ให้ใช้โมเดลที่ได้รับการฝึกโดยใช้สูตร LayerSkip เช่น โมเดลที่เราเปิดซอร์สบน HuggingFace--sample
, --temperature
, --top_p
และ --top_k
python generate.py --help
เพื่อดูรายละเอียดเกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่งต่างๆ หากต้องการเปรียบเทียบชุดข้อมูล:
$ torchrun benchmark.py --model facebook/layerskip-llama2-7B
--dataset cnn_dm_summarization
--num_samples 100
--generation_strategy self_speculative
--exit_layer 8
--num_speculations 6
--output_dir ./logs
เคล็ดลับ:
--dataset
:cnn_dm_summarization
: การสรุป CNN/DMxsum_summarization
: การสรุป XSUMcnn_dm_lm
: การสร้างแบบจำลองภาษา CNN/DM (ให้คำสองสามคำแรกของบทความ สร้างบทความที่เหลือ)human_eval
: การเข้ารหัส HumanEvaln
-shot ที่ระบุได้โดยระบุอาร์กิวเมนต์ --n_shot
--sample
, --temperature
, --top_p
และ --top_k
python benchmark.py --help
เพื่อดูรายละเอียดเกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่งต่างๆ เราได้รวมสคริปต์การสร้างของเราเข้ากับชุดประเมินแบบจำลองภาษา Eleuther เพื่อเปิดใช้งานงานจำนวนมากและข้อความที่สร้างขึ้นหลังการประมวลผลอย่างเหมาะสม
$ torchrun eval.py --model facebook/layerskip-llama2-7B
--tasks gsm8k
--limit 10
--generation_strategy self_speculative
--exit_layer 8
--num_speculations 6
--output_dir ./logs
เคล็ดลับ:
gsm8k
หรือ cnn_dailymail
) ในขณะที่งานจำแนกประเภท เช่น งานคำถามปรนัย (เช่น piqa
, social_iqa
) หรืองานคำถาม True/False (เช่น boolq
) ไม่นำไปสู่การเร่งความเร็ว--tasks
หากต้องการดูรายการงานที่เป็นไปได้ทั้งหมด โปรดตรวจสอบลิงก์นี้generate.py
และ benchmark.py
คุณสามารถระบุโมเดล ชุดข้อมูล และพารามิเตอร์การสุ่มตัวอย่างที่แตกต่างกันได้python benchmark.py --help
เพื่อดูรายละเอียดเกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่งต่างๆ ไฮเปอร์พารามิเตอร์การอนุมานของเรา exit_layer
และ num_speculations
จะเป็นตัวกำหนดการเร่งความเร็วระหว่างการอนุมาน:
exit_layer
:num_speculations
: การผสมผสานที่เหมาะสมที่สุดของ exit_layer
และ num_speculations
อาจเปลี่ยนแปลงไปตามโมเดล ชุดข้อมูล และพารามิเตอร์การสุ่มตัวอย่าง ดังนั้นเราจึงจัดเตรียมสคริปต์เพื่อกวาดล้างตารางของ exit_layer
และ num_speculations
ที่แตกต่างกัน :
$ torchrun sweep.py --model facebook/layerskip-llama2-7B
--dataset human_eval
--generation_strategy self_speculative
--num_samples 150
--max_steps 256
--output_dir ./logs/
--sample False
สิ่งนี้จะสร้างไฟล์ CSV ในไดเร็กทอรีที่ระบุในอาร์กิวเมนต์ --outpu_dir
เคล็ดลับ:
generate.py
และ benchmark.py
คุณสามารถระบุโมเดล ชุดข้อมูล และพารามิเตอร์การสุ่มตัวอย่างที่แตกต่างกันได้python sweep.py --help
เพื่อดูรายละเอียดเกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่งต่างๆ เพื่อตรวจสอบว่าโทเค็นที่สร้างขึ้นของอัลกอริธึมการถอดรหัสแบบคาดเดาในตัวเองนั้นถูกต้อง เราได้สร้างสคริปต์เพื่อเปรียบเทียบผลลัพธ์ของการถอดรหัสแบบถอยอัตโนมัติกับการถอดรหัสแบบคาดเดาในตัวเอง โปรดทราบว่าผลลัพธ์ที่เราสามารถรับประกันความเท่าเทียมกันเมื่อไม่มีการสุ่มตัวอย่างเท่านั้น (เช่น --sample False
):
$ torchrun correctness.py --model facebook/layerskip-llama2-7B
--dataset human_eval
--generation_strategy self_speculative
--num_speculations 6
--exit_layer 4
--num_samples 10
--sample False
--output_dir ./logs
กรุณาตรวจสอบ DOCKER.md เพื่อตั้งค่าโปรเจ็กต์โดยใช้นักเทียบท่า
นอกจากนี้เรายังมีการใช้งานอื่นๆ ของการอนุมาน LayerSkip:
torch.compile()
การหาปริมาณ และเทนเซอร์แบบขนานการดำเนินการฝึกอบรมของเราอยู่ในระหว่างดำเนินการ คุณสามารถตรวจสอบคำขอดึงนี้เพื่อดูรายละเอียดและการสนทนาได้
LayerSkip ได้รับอนุญาตภายใต้ใบอนุญาต CC-by-NC อ้างถึงไฟล์ LICENSE ในไดเร็กทอรีระดับบนสุด
เรายินดีต้อนรับการมีส่วนร่วมของ LayerSkip หากคุณสนใจที่จะมีส่วนร่วม โปรดดูเอกสารนี้
หากคุณใช้ LayerSkip ในการวิจัยของคุณ โปรดใช้รายการ BibTex ต่อไปนี้:
@misc { layerskip ,
title = { LayerSkip: Enabling Early Exit Inference and Self-Speculative Decoding } ,
author = { Mostafa Elhoushi and Akshat Shrivastava and Diana Liskovich and Basil Hosmer and Bram Wasti and Liangzhen Lai and Anas Mahmoud and Bilge Acun and Saurabh Agarwal and Ahmed Roman and Ahmed A Aly and Beidi Chen and Carole-Jean Wu } ,
booktitle = " Proceedings of the 62nd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) " ,
month = aug,
year = " 2024 " ,
address = " Bangkok, Thailand " ,
publisher = " Association for Computational Linguistics " ,
url = " https://aclanthology.org/2024.acl-long.681 " ,
doi = " 10.18653/v1/2024.acl-long.681 " ,
pages = " 12622--12642 " ,
}