❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
🚀 快速阅读
- Self-Lengthen 是一个创新的迭代训练框架,通过生成器和扩展器的协同工作,提升大型语言模型生成长文本的能力。
- 该框架无需额外数据或专有模型,基于模型内在的知识和技能,有效解决长文本生成的训练缺陷问题。
- Self-Lengthen 可应用于多种不同的长文本生成任务,如文学创作、学术研究等。
正文(附运行示例)
Self-Lengthen 是什么
Self-Lengthen 是阿里巴巴千问团队推出的一个创新的迭代训练框架,旨在提升大型语言模型(LLMs)生成长文本的能力。框架基于两个角色——生成器(Generator)和扩展器(Extender)协同工作,生成器负责生成初始响应,扩展器将响应拆分、扩展产生更长的文本。整个过程不断迭代,逐步训练模型处理更长的输出。Self-Lengthen 无需额外数据或专有模型,基于 LLMs 的内在知识和技能,有效解决长文本生成的训练缺陷问题。
Self-Lengthen 的主要功能
- 提升输出长度:让 LLMs 能生成比传统训练方法更长的文本输出。
- 保持内容质量:在扩展文本长度的同时,保持甚至提升生成内容的连贯性和相关性。
- 无需额外数据:不依赖外部数据源或专有模型,基于模型内在的知识和技能。
- 迭代训练:基于迭代过程逐步提升模型处理长文本的能力。
- 灵活性:能应用于多种不同的长文本生成任务,如文学创作、学术研究等。
Self-Lengthen 的技术原理
- 生成器(Generator)和扩展器(Extender):
- 生成器:负责生成初始的短文本响应。
- 扩展器:将生成器的输出作为输入,扩展成长文本。
- 迭代训练过程:
- 基于反复迭代,逐步增加生成器和扩展器处理长文本的能力。
- 每次迭代中,扩展器尝试将生成器的输出扩展得更长,用更长的输出微调生成器,直接生成更长的文本。
- 指令增广:用自指导技术扩充和多样化训练指令,更好地引导模型生成长文本。
- 两阶段扩展方法:
- 第一阶段:扩展器扩展生成器输出的前半部分。
- 第二阶段:用第一阶段的扩展结果指导扩展剩余部分,实现整个文本的扩展。
- 微调模型:用基于扩展得到更长的文本微调生成器和扩展器,便于在未来的迭代中生成更长的文本。
- 质量控制:基于规则和评估机制确保生成的长文本质量,避免重复、无意义的扩展。
如何运行 Self-Lengthen
🔧 准备工作
- 克隆此仓库。
- 我们在
FastChat
项目中进行了若干关键更改,以支持 vLLM LoRA 请求和额外的解码参数(如repetition_penalty
和top_k
)。请克隆 此仓库 并运行pip install -e ".[model_worker,webui]"
安装。 - 运行
pip install -r requirements.txt
安装其他所需包。 - 仓库包含适用于 Qwen 和 LLaMA 模型的 Self-Lengthen 代码。两者代码库的主要结构相同,只有细微差别(例如,聊天模板、提示词、过滤条件)以适应各自的特性。导航到 Qwen 或 LLaMA 目录以继续以下步骤。
运行代码
代码支持多节点和单节点执行。运行步骤如下:
- 更改
run.sh
、run_server.sh
、run_collect_data.sh
和config.py
文件顶部的base_model
变量为你基础模型的路径。 - 确保
WORLD_SIZE
、RANK
、MASTER_ADDR
和MASTER_PORT
设置为你集群的适当值(对于单节点,WORLD_SIZE
为 1,RANK
为 0)。 - 在每个节点上执行:
bash run.sh > run_$RANK.log \--base_model=YOUR_MODEL_PATH \--instruct_count=5000 \--max_iter=3 2>&1
较大的 max_iter
将进行更多宏迭代,最终生成更长的响应。在每个宏迭代中,我们从服务由 FastChat 管理的 vLLM 工作器开始,然后依次执行步 0)自指导、步 1)初始响应生成 和步 2)响应扩展(考虑到用户隐私,我们仅发布运行所需的最少种子指令)。最后,关闭 vLLM 服务器并利用 LLaMA-Factory 微调生成器和扩展器。 4. 等待 Self-Lengthen 过程完成。对于小型集群,可能需要一些时间。
数据收集
Self-Lengthen 过程完成后:
- (可选)在每个节点上运行以下命令以生成更多数据;设置
total_count
为每个节点所需的生成数量:
bash run_collect_data.sh --base_model=YOUR_MODEL_PATH \--total_count=5000 \--instruct_count=500 \--max_iter=3
- 在主节点上运行
python collect_data.py
收集所有生成的训练数据。
训练过程
训练过程简单如下:
- 使用
eval/add_length_control.py
将长度需求纳入查询。 - 对(查询,长响应)对进行监督微调。
这有助于使模型的输出符合所需的长度要求,同时保持连贯性和相关性。
资源
- 关注并回复公众号【65】或【SelfLengthen】获取相关项目资源。
❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦