EAGLE项目Readme中文翻译版

EAGLE

 EAGLE

EAGLE(Extrapolation Algorithm for Greater Language-model Efficiency)是一种针对大语言模型 (LLMs) 的新型高效生成基准。该方法通过外推LLMs的第二顶层上下文特征向量,显著提升文本生成效率。

  • EAGLE 具有以下特点:
    • 第三方评估认证,是迄今为止最快的推测方法。
    • gpt-fast 上实现了2倍加速。
    • 比原始解码快3倍 (13B)。
    • Lookahead2倍 (13B)。
    • Medusa1.6倍 (13B)。
    • 保持生成文本分布与原始解码一致的理论保证。
    • 训练适应期短(1-2天),可在8块RTX 3090 GPUs上测试,硬件要求低。
    • 可与其他并行技术如vLLM、DeepSpeed、Mamba、FlashAttention、量化和硬件优化结合使用。

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

  • EAGLE-2 具有以下特点:
    • 比原始解码快4倍 (13B)。
    • 比EAGLE-1 快1.4倍 (13B)。

使用EAGLE-2,在2块RTX 3060 GPUs上进行推理的速度比在A100 GPU上进行原始自回归解码的速度还要快。

更新日志

2024.8.23: EAGLE 已与 vLLM 合并。

2024.8.8: 现已支持 Qwen-2。

2024.6.27: 发布 EAGLE-2。

2024.5.25: EAGLE 已与 Intel® LLM library for PyTorch 合并。

2024.5.9: EAGLE 已与 Intel® Extension for Transformers 合并。

2024.2.25: EAGLE 经 第三方评估认证为最快推测方法。

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内存无法负担的大模型上运行。

使用UI

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

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

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

用代码

您可以像使用 Hugging Face 的 generate 一样使用我们提供的 eagenerate 进行加速生成。以下是一个示例。

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(or gen_ea_answer_vicuna_llama2chat)\
		 --ea-model-path [EAGLE 权重路径]\ 
		 --base-model-path [原始模型路径]\

如果需要具体的加速比率,还需要运行以下命令获取原始自回归的速度。

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

上述两个命令将各自生成一个记录生成结果和壁钟时间的.jsonl文件。然后,可以使用 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设计。我们也感谢与Tianle Cai、Hao Zhang、Ziteng Sun等人的宝贵讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值