قاعدة التعليمات البرمجية هذه هي تطبيق 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
نماذج الوصول: لمراقبة التسريع، تحتاج إلى الوصول إلى LLMs الذين تم تدريبهم باستخدام وصفة LayerSkip. نحن نقدم 6 نقاط فحص على HuggingFace لنماذج Llama المختلفة التي يتم تدريبها مسبقًا باستمرار باستخدام وصفة 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 Language Model Evaluation Harness لتمكين عدد كبير من المهام والنص الذي تم إنشاؤه بعد العملية بشكل صحيح.
$ 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. ارجع إلى ملف الترخيص الموجود في دليل المستوى الأعلى.
نحن نرحب بالمساهمات في 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 " ,
}