Эта база кода представляет собой реализацию 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 различных моделей 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, чтобы обеспечить выполнение большого количества задач и правильную постобработку сгенерированного текста.
$ 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
) или задачи с вопросами «Верно/Неверно» (например, 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, чтобы настроить проект с помощью Docker.
У нас также есть другие реализации вывода 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 " ,
}