一致性大语言模型:高效并行解码器家族
一致性大语言模型(CLLMs)是一个新的模型家族,能够通过高效并行解码$n$个token来减少推理延迟。这种解码方法称为雅可比解码,与传统的自回归(AR)解码相比,它提高了推理效率。CLLMs的训练目标是通过将任何随机初始化的$n$个token序列映射到与AR解码相同的结果,以尽可能少的步骤来执行高效的雅可比解码。
实验结果证明了CLLMs的有效性,在各种任务中生成速度提高了$2.4\times$到$3.4\times$。
下面展示了使用CLLM解决一个基本数学问题时,生成速度显著提高(约$3\times$)的演示:
目录
新闻 🔥
- [2024/3] CLLMs已集成到FastChat中!
- [2024/2] CLLM论文现已在arXiv上发布。CLLMs模型检查点已在Huggingface Hub上发布。
简介
一致性大语言模型(CLLMs)是从预训练LLMs中精炼而来的高效并行解码器家族。
与现有的快速解码技术相比,CLLMs实现快速并行解码无需:
- 草稿模型
- 架构修改/辅助模型组件
这为CLLMs带来了一些优势:
- CLLMs不必处理获取"好"的草稿模型和在单一系统中管理两个不同模型的复杂性。
- CLLMs与目标LLMs共享相同的架构,在将该技术应用于不同模型时不需要额外的工程努力。
- CLLMs可以与其他高效LLM推理技术(如前瞻解码)无缝集成,以实现更显著的加速。
安装
- 环境设置:
conda create -n cllm python=3.10
conda activate cllm
- 克隆此仓库并从源代码构建:
git clone git@github.com:hao-ai-lab/Consistency_LLM.git
cd Consistency_LLM
- 安装依赖:
pip install -r requirements.txt
pip install flash-attn==2.4.1
模型权重
目标预训练模型
大小 | 数据集 | Huggingface 仓库 |
---|---|---|
7B | ShareGPT | cllm/vicuna-7b-sharegpt-gpt4-48k |
7B | GSM8K (数学) | GAIR/Abel-7B-001 |
7B | Spider (文本到SQL) | cllm/deepseekcoder-7b-instruct-spider |
7B | Code-Search-Net Python | cllm/deepseekcoder_7b_codesearch_net_python |
CLLMs
大小 | 数据集 | Huggingface 仓库 |
---|---|---|
7B | ShareGPT | cllm/consistency-llm-7b-sharegpt48k |
7B | GSM8K (数学) | cllm/consistency-llm-7b-math |
7B | Spider (文本到SQL) | cllm/consistency-llm-7b-spider |
7B | Code-Search-Net Python | cllm/consistency-llm-7b-codesearchnet |
使用方法
推理
bash applications/run_chat_cllm.sh {模型路径} {cllm类型}
cllm类型
可以是spider
、python
、gsm8k
或sharegpt
。
训练
- 收集雅可比轨迹:
- 方法1:直接从我们的Huggingface Hub页面下载雅可比轨迹到
data/collected_jacobi_trajectory/
。 - 方法2(生成适合您自己的目标模型和数据集的轨迹):一些包含额外信息(如数据库依赖)或无法直接从Huggingface Hub加载的原始数据集(例如,Spider和ShareGPT)需要安装在
data/raw_data
中。然后运行scripts/generate_trajectory.sh
,CLLM的训练数据集将保存在data/collected_jacobi_trajectory/
中。
例如,对于gsm8k数据集,运行:
# max_new_tokens对应n_token_sequence的大小
CUDA_VISIBLE_DEVICES=0 bash scripts/generate_trajectory.sh {文件名} {模型路径} {n_token_seq_size} {max_new_seq_len}
其他命令选项
--filename: 原始数据集的路径,目前支持{data/raw_data/spider, code_search_net, data/raw_data/gsm8k_train.jsonl, data/raw_data/ShareGPT_V3_unfiltered_cleaned_split.json} \
--data_size: 用于提取雅可比轨迹的最大提示数 \
--use_aug: 使用数据增强技术 \
--use_labels: 将数据集的标签添加到输出文件中
- 训练CLLM:
bash scripts/train_cllm.sh {模型路径} {轨迹文件} {输出路径} {n_token_seq_size}
评估
我们遵循human-eval、Spider、MT-bench和GSM8K中的相同设置来评估CLLMs的生成质量。在eval
文件夹中可以找到评估CLLMs吞吐量(以tokens/s计)、快进令牌数、稳定令牌数的示例代码。以GSM8K数据集为例:
测试加速效果,运行:
CUDA_VISIBLE_DEVICES=0 bash eval/gsm8k/speedup.sh {模型路径} {目标模型路径} {max_new_tokens}
测试准确率,运行:
CUDA_VISIBLE_DEVICES=0 python eval/gsm8k/acc.py --model_dir cllm路径 --temperature 0.0 --top_p 1.0 --output_file_name 'cllm_generated_gsm8k.jsonl' \
--dev_set "gsm8k" --prompt_type math-single --max_new_tokens_for_consistency 16 --max_tokens 1024 --use_consistency_decoding
引用
这是以下论文的官方项目仓库。如果您觉得这个仓库有帮助,请引用:
@misc{kou2024cllms,
title={CLLMs: Consistency Large Language Models},
author={Siqi Kou and Lanxiang Hu and Zhezhi He and Zhijie Deng and Hao Zhang},
year={2024},
eprint={2403.00835},
archivePrefix={arXiv},
primaryClass={cs.CL}
}