EAGLE

EAGLE

大型语言模型快速解码的新突破

EAGLE项目为大型语言模型提供了一种高效的快速解码方法。通过创新的特征外推技术,EAGLE显著提升了生成效率。其改进版EAGLE-2引入了动态草稿树结构,进一步优化了性能。与传统解码方法相比,EAGLE和EAGLE-2在13B模型上分别实现了3倍和4倍的速度提升。该开源项目不仅提供了多种预训练模型权重,还支持各类LLM架构,并配备了详尽的使用文档和评估工具。

EAGLE大语言模型快速解码性能维持推理速度Github开源项目

<img src="https://yellow-cdn.veclightyear.com/ab5030c0/c2f505d4-ea51-4cf2-b938-85e7aae6759c.png" alt="EAGLE" width="220" align="left"><div align="center"><h1> EAGLE</h1></div>

<p align="center"> | <a href="https://arxiv.org/pdf/2401.15077.pdf"><b>论文 (EAGLE)</b></a> | <a href="https://arxiv.org/pdf/2406.16858"><b>论文 (EAGLE-2)</b></a> | <a href="https://sites.google.com/view/ eagle-llm"><b>博客</b></a> | <a href="https://huggingface.co/spaces/yuhuili/EAGLE-2"><b>演示</b></a> | </p> <p align="center"> <a href=""> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/c08be02e-cc73-48d7-8a1b-02c259e568b7.svg" alt="版本"> </a> <a href="https://opensource.org/licenses/Apache-2.0"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/1fe2d9fa-1a47-40bf-9887-d36fa9acc4df.svg" alt="许可证"> </a> <a href="https://github.com/SafeAILab/EAGLE/issues"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/bda22bb8-a693-424d-be3f-062333d9ee6b.svg" alt="维护"> </a> <a href="https://github.com/SafeAILab/EAGLE/pulls"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/bf429610-d166-49e9-b0e1-8a3269fd3ce4.svg?style=flat" alt="欢迎贡献"> </a> </p>

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/b000a927-64f1-4ed4-832d-1c1077033905.jpg" alt="benchmark" width="790"> </p>

EAGLE(更高效语言模型外推算法)是一种新的基准,用于快速解码大型语言模型(LLMs),并保证性能不会下降。这种方法通过外推LLMs的次顶层上下文特征向量,显著提高了生成效率。

  • EAGLE 特点:
    • <a href="https://github.com/hemingkx/Spec-Bench/blob/main/Leaderboard.md"><b>第三方</b></a>评估认证为目前最快的推测方法。
    • <a href="https://github.com/pytorch-labs/gpt-fast"><b>gpt-fast</b></a>上实现2倍速度提升。
    • 比普通解码快3倍(13B)。
    • <a href="https://lmsys.org/blog/2023-11-21-lookahead-decoding/"><b>Lookahead</b></a>快2倍(13B)。
    • <a href="https://sites.google.com/view/medusa-llm"><b>Medusa</b></a>快1.6倍(13B)。
    • 可证明地保持与普通解码在生成文本分布上的一致性。
    • 可在8块RTX 3090 GPU上训练(1-2天内)和测试。即使GPU资源有限也能负担得起。
    • 可与其他并行技术结合,如vLLM、DeepSpeed、Mamba、FlashAttention、量化和硬件优化。

EAGLE-2使用草稿模型的置信度分数来近似接受率,动态调整草稿树结构,进一步提升性能。

  • EAGLE-2 特点:
    • 比普通解码快4倍(13B)。
    • 比EAGLE-1快1.4倍(13B)。
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/0d215541-e231-4d1e-8e1e-9f6a897f6496.gif" alt="演示gif"> </p>

使用EAGLE-2,在2块RTX 3060 GPU上的推理速度可以比在A100 GPU上的普通自回归解码更快。

更新

2024.8.8:我们现在支持Qwen-2。

2024.6.27:EAGLE-2发布。

2024.2.25:EAGLE被<a href="https://github.com/hemingkx/Spec-Bench/blob/main/Leaderboard.md">第三方</a>评估认证为最快的推测方法。

2024.1.17:我们现在支持Mixtral-8x7B-Instruct

2023.12.8:EAGLE v1.0发布。

待办事项

  • 支持非贪婪推理(可证明地保持文本分布)。
  • 支持更多LLMs,如Mixtral 8x7B。
  • 支持LLaMA-3。
  • 支持Qwen-2。

默认主分支是EAGLE-2的实现。如要使用EAGLE-1,请切换到v1分支。

目录

设置与安装

git clone https://github.com/SafeAILab/EAGLE.git cd EAGLE pip install -r requirements.txt

EAGLE权重

注意: 当Qwen2为目标模型时,请使用bf16精度而非fp16以避免数值溢出。Qwen2的草稿模型训练数据集为ShareGPT,已删除非英语数据。因此,如果要在非英语数据(如中文)上使用,请使用相应数据进行训练。

与EAGLE相比,EAGLE-2无需额外训练,使用相同的权重。

基础模型EAGLE在Hugging Face上EAGLE参数数量基础模型EAGLE在Hugging Face上EAGLE参数数量
Vicuna-7B-v1.3yuhuili/EAGLE-Vicuna-7B-v1.30.24BLLaMA2-Chat 7Byuhuili/EAGLE-llama2-chat-7B0.24B
Vicuna-13B-v1.3yuhuili/EAGLE-Vicuna-13B-v1.30.37BLLaMA2-Chat 13Byuhuili/EAGLE-llama2-chat-13B0.37B
Vicuna-33B-v1.3yuhuili/EAGLE-Vicuna-33B-v1.30.56BLLaMA2-Chat 70Byuhuili/EAGLE-llama2-chat-70B0.99B
Mixtral-8x7B-Instruct-v0.1yuhuili/EAGLE-mixtral-instruct-8x7B0.28B
LLaMA3-Instruct 8Byuhuili/EAGLE-LLaMA3-Instruct-8B0.25BLLaMA3-Instruct 70Byuhuili/EAGLE-LLaMA3-Instruct-70B0.99B
Qwen2-7B-Instructyuhuili/EAGLE-Qwen2-7B-Instruct0.26BQwen2-72B-Instructyuhuili/EAGLE-Qwen2-72B-Instruct1.05B

推理

我们提供的推理代码自动分配模型权重(在多个GPU上加载模型),使您可以运行超出单个GPU内存的模型。

使用界面

我们提供了一个建议的网页界面,您可以通过运行以下命令来使用。模型完全加载后,终端会输出一个URL,您可以在浏览器中输入该URL进行访问。

python -m eagle.application.webui --ea-model-path [EAGLE权重路径]\ --base-model-path [原始模型路径]\ --model-type [vicuna\llama2\llama3]\ --total-token [整数]

total-token是草稿token的数量。对于较小的模型和高级GPU,这个值可以设置得更大。根据具体设备和模型进行调整可以达到更好的效果。如果设置为-1,EAGLE-2将自动配置此参数。

使用代码

您可以使用我们提供的"eagenerate"来加速生成,就像使用Hugging Face的'generate'一样。以下是一个示例。

from eagle.model.ea_model import EaModel from fastchat.model import get_conversation_template model = EaModel.from_pretrained( base_model_path=base_model_path, ea_model_path=EAGLE_model_path, torch_dtype=torch.float16, low_cpu_mem_usage=True, device_map="auto", total_token=-1 ) model.eval() your_message="Hello" conv = get_conversation_template("vicuna") conv.append_message(conv.roles[0], your_message) conv.append_message(conv.roles[1], None) prompt = conv.get_prompt() input_ids=model.tokenizer([prompt]).input_ids input_ids = torch.as_tensor(input_ids).cuda() output_ids=model.eagenerate(input_ids,temperature=0.5,max_new_tokens=512) output=model.tokenizer.decode(output_ids[0])

注意:Vicuna、LLaMA2-Chat和LLaMA3-Instruct都是聊天模型。您需要使用正确的聊天模板,否则会导致模型输出异常并影响EAGLE的性能。

训练

生成训练数据

您可以运行以下命令来生成训练数据。

python -m eagle.ge_data.allocation --outdir [数据路径]

训练自回归头

accelerate launch -m --mixed_precision=bf16 eagle.train.main --tmpdir [数据路径]\ --cpdir [检查点路径] --configpath [配置文件路径]

eagle/train提供了配置文件的示例。

您也可以使用DeepSpeed进行训练。

cd eagle/train deepspeed main_deepspeed.py --deepspeed_config ds_config.json

在自定义模型上进行推理

如果原始LLM结构与LLaMA和Mixtral不同,您可以按以下方式使用EAGLE:

从Transformers库中复制modeling_basemodelname.py,然后进行修改以利用预分配的kv_cache来提高基础模型的速度。您可以参考model/modeling_llama_kv.py获取指导,需要修改的地方用# [MODIFIED]标注。这些修改非常少。

评估

您可以使用以下命令在MT-bench上测试EAGLE的速度。

python -m eagle.evaluation.gen_ea_answer_vicuna(或gen_ea_answer_vicuna_llama2chat)\ --ea-model-path [EAGLE权重路径]\ --base-model-path [原始模型路径]\

如果您需要具体的加速比,还需要运行以下命令来获取普通自回归的速度。

python -m eagle.evaluation.gen_baseline_answer_vicuna\ (或gen_ea_answer_vicuna_llama2chat)\ --ea-model-path [EAGLE权重路径]\ --base-model-path [原始模型路径]\

上述两个命令each会生成一个.jsonl文件,记录生成结果和wall time。然后,您可以使用evaluation/speed.py来计算速度比。

🌟 我们的贡献者

衷心感谢所有贡献者。

贡献者

参考文献

有关技术细节和完整实验结果,请查看EAGLE论文EAGLE-2论文

@inproceedings{li2024eagle, 
	author = {Yuhui Li and Fangyun Wei and Chao Zhang and Hongyang Zhang}, 
	title = {EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty}, 
	booktitle = {International Conference on Machine Learning},
	year = {2024}
}
@misc{li2024eagle2fasterinferencelanguage,
      title={EAGLE-2: Faster Inference of Language Models with Dynamic Draft Trees}, 
      author={Yuhui Li and Fangyun Wei and Chao Zhang and Hongyang Zhang},
      year={2024},
      eprint={2406.16858},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2406.16858}, 
}

致谢

本项目受到了LLM社区中许多优秀项目的影响,如MedusaFastChat等。标志由GPT-4设计。我们还感谢与蔡天乐、张浩、孙子腾等人进行的许多宝贵讨论。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多