皮皮网
皮皮网

【抓取完整源码api】【fftshift 源码】【avalonjs源码】sft源码

来源:gtk头源码下载 发表时间:2024-12-22 15:58:29

1.手把手教你微调百亿大模型:基于Firefly微调Qwen1.5-14b
2.Text-to-SQL小白入门(十一)DAIL-SQL教你刷Spider榜单第一
3.大模型训练入门四
4.只用1块A100,就能训练自己的Llama-2模型!
5.拆解大语言模型RLHF中的PPO

sft源码

手把手教你微调百亿大模型:基于Firefly微调Qwen1.5-14b

       本文旨在引导新手通过使用Firefly项目微调Qwen1.5-b模型,学习大模型的微调流程。此教程不仅适用于微调llama、ziya、抓取完整源码apibloom等模型,同时Firefly项目正在逐步兼容更多开源大模型,如InternLM、CPM-bee、ChatGLM2等。此教程是大模型训练的步步指引,即使你是训练大模型的新手,也能通过本文快速在单显卡上训练出自己的大模型。

       访问Firefly项目链接:/yangjianxin1/Firefly

       1. 安装环境

       假定读者具备一定的python编程基础,直接跳过python、cuda、git等编程环境和工具的安装教程。

       首先,将Firefly项目代码库clone至本地:

       1. 进入项目目录

       2. 创建相应的虚拟环境

       3. 安装相应的python包

       确保使用源码安装所有包,避免不必要的麻烦。推荐torch版本为1.3,避免使用2.0。

       2. 准备训练集

       Firefly项目提供多个高质量指令数据集,推荐使用moss数据集,数据集下载地址在Github项目地址中。

       训练数据为jsonl格式,每行为一个多轮对话,conversation字段是必需的,可根据实际需求添加或删除其他字段。

       也可使用自定义数据,fftshift 源码只需整理成指定格式即可。在项目的data/dummy_data.jsonl文件中存放了调试数据,可用于代码调试。

       3. 配置训练参数

       所有训练参数配置存储在train_args目录,便于统一管理。以微调Qwen1.5-b为例,参数配置文件路径为train_args/qlora/qwen1.5-b-sft-qlora.json,可根据硬件条件调整文件中的训练参数。

       训练参数详细说明如下:

       在微调Qwen1.5-b时,训练配置如下,需根据实际情况调整:

       model_name_or_path:可指定huggingface模型仓库名称或本地模型路径。使用huggingface仓库名称时,训练脚本会自动下载权重、tokenizer和代码等。本地访问较慢时,建议先下载模型至本地,使用本地路径。

       如遇到OOM问题,可调整max_seq_length、per_device_train_batch_size等参数缓解。开启gradient_checkpointing参数可大幅降低显存占用,但会减慢训练速度。

       4. 启动训练

       执行以下脚本启动训练,num_gpus表示训练使用的显卡数量。全球批大小为per_device_train_batch_size * gradient_accumulation_steps * num_gpus。

       在RTX上训练7B模型,每个step大约秒,B模型每个step大约秒。

       5. 合并权重

       训练中仅保存adapter的权重,不保存合并后的avalonjs源码模型权重。训练结束后,手动将adapter与base model的权重合并。adapter权重保存至output_dir指定目录,执行script目录下的merge_lora.py脚本获取合并后的模型权重。

       注意:Qwen1.5-b等模型自定义了结构和tokenizer,代码未合并至transformers库中。合并权重后,需复制huggingface模型仓库中的python文件至合并权重目录,否则加载合并模型进行推理时会出错。

       权重合并脚本如下,请根据实际的base model和adapter保存路径,调整save_path、adapter_name_or_path、model_name_or_path等参数。

       6. 模型推理

       完成权重合并后,即可使用模型进行推理。项目提供单轮对话和多轮对话脚本,详情参见script/chat目录。该脚本兼容本项目训练的所有模型。

       生成脚本中的top_p、repetition_penalty、temperature、do_sample等参数对生成效果影响显著,根据使用场景进行调整。

       推理阶段,模型的解码方式对生成效果影响巨大,常用解码方式包括Greedy Search、Beam Search、Top-K Sampling、Top-P Sampling、basewar 源码Contrastive Search等。

       目前主流模型多采用Top-P Sampling,具有随机性,能提高丰富度,降低重复输出,本项目也使用此方式。Contrastive Search也值得尝试,是一种确定性解码算法。

       解码方式值得深入探讨,有兴趣的读者后续可关注。

       单轮对话:

       多轮对话:

       7. 结语

       本文详细介绍了使用Firefly项目微调Qwen1.5-b模型的步骤,希望读者按照本教程逐步操作,顺利完成大模型的训练。

Text-to-SQL小白入门(十一)DAIL-SQL教你刷Spider榜单第一

       深入学习Text2SQL+LLM领域,可以访问这个持续更新的GitHub项目:github.com/eosphoros-ai...,该项目汇集了该领域相关简介、综述、经典方法、基础大模型、微调策略、数据集及实践项目等资源。

       当前,Spider榜单第一已非.6,但其强大性能依然显著,最新排名为MiniSeek的.2(未开源代码),更多榜单详情可查阅Awesome-Text2SQL开源项目。

       Text2SQL结果问题表示探讨了5大类别,通过实验对比,发现去除Prompt中的外键信息及不使用解释对结果有显著影响。实验结果直观展示于图2和表6,白色源码图2展示了外键信息在Spider-dev场景下的消融效果,绿色箭头表示增加,红色箭头表示减少。

       关于是否解释问题,同样进行了消融实验,图3和表7提供了对比结果。实验表明,在不同条件下,正确选择是否解释对于结果的影响至关重要。

       上下文学习In-Context Learning(ICL)聚焦于Code Representation Prompt的选择。实验结果表明,ICL方法在不同场景下展现出较高的适应性与有效性。

       在Example Selection方面,实验将示例分为5类,并通过3种组织方式进行了评估,结果显示,DAIL Selection方法在不同评估场景中表现优秀。

       针对Token Efficiency的比较,不仅从精度角度考量,还深入分析了过程消耗及token数量,实验结果充分展示了不同模型在效率与效果之间的权衡。

       综上所述,Text2SQL领域的研究与实践正不断深入,通过精心设计的实验与方法优化,实现更高的性能与效率。few-shot模型在某些场景下不如SFT模型表现出色,这一点是研究中的关键发现。

       为了更全面地理解核心方法DAIL-SQL的具体步骤及细节,建议深入阅读源码,结合实际案例与理论分析,以深化对Text2SQL+LLM领域的认识。

大模型训练入门四

       大模型训练的世界里,我们已经探讨了模型架构、并行框架优化和基础结构。接下来,PEFT步骤中的各种技术如Adapter、Prefix和Prompt,以及关键的RLHF方法,特别是PPO算法,成为了训练的核心。PPO,作为年OpenAI的创新,通过策略剪辑和优化,提升了训练的稳定性。强化学习框架的核心是智能体与环境的互动,基于MDP模型,通过Policy Gradient进行目标参数学习,包括Actor-Critic框架的演变,如A2C和A3C的形成。

       在Actor-Critic框架中,Policy Gradient方法通过Action-Value视角,结合Advantage函数,降低了方差,形成了以Action Reward为中心的Critic。而PPO在此基础上引入小步快走策略,通过KL距离限制和MSE项,进一步优化了策略更新。TRL项目提供了各种核心类,如SFT、RM和PPO,它们在模型训练中涉及数据处理、奖励计算和模型优化,例如PPOTrainer的训练过程涉及模型更新、奖励评估和梯度计算。

       CarperAI的trlx则支持多种强化学习训练方法,如PPOGPT和ILQLGPT,其中ILQL结合Q学习和Transformer,适用于语言模型的奖励优化,尽管调参相对复杂。PPO算法的源码在TRL库和trlx中都有体现,且两者在模型训练方面有着相似的损失函数设计。

       总的来说,大模型训练中,PPO算法是强化学习策略的重要部分,通过实际项目中的应用,我们能更深入理解其在模型优化中的作用和实现细节。后续还将继续研究其他框架的源码,以全面掌握大模型训练的奥秘。

只用1块A,就能训练自己的Llama-2模型!

       只需一行代码,你就能在自己数据上训练所有Llama-2模型,只需一个A GPU,甚至可以使用亿参数的模型。这得益于4bit和PEFT的高效技术。

       使用PPO微调语言模型主要涉及三个关键步骤。首先,生成(Rollout):语言模型根据查询生成响应或连续文本。然后,评估(Evaluation):使用评估函数、模型、人工反馈或组合对查询和生成响应进行评估。最后,优化(Optimization):通过已训练模型和参考模型计算序列中每个令牌的对数概率。优化步骤中,使用查询和响应对来计算KL散度,作为额外奖励信号,确保生成响应不会偏离参考语言模型太远。PPO算法在此过程中进行训练。

       安装过程包括使用pip安装Python库。如需从源代码运行库中的示例,需先克隆代码仓库,然后使用pip安装。

       如果你想开发TRL库,使用可编辑模式进行安装。

       如何使用?

       使用SFTTrainer,一个transformers Trainer的轻量化封装,轻松在自定义数据集上微调语言模型或适配器。

       使用RewardTrainer,为查询和响应生成评估。评估可由人工参与,或作为另一个模型的输出。

       使用PPOTrainer,基于查询生成响应,随后对响应进行评估。评估过程可能涉及人工反馈,或另一个模型输出。

       对于更高级应用,如IMDB情感分类,请参考项目中的sentiment_tuning.py示例脚本。下面展示了优化前后,从模型中提取的几个实例。

       了解更多信息,请访问GitHub项目地址:github.com/lvwerra/trl。

拆解大语言模型RLHF中的PPO

       大多数介绍大语言模型RLHF的文章在提及PPO算法细节时往往止步于此,要么直接跳过,要么提供一个链接。实际上,LLM x PPO与传统PPO存在差异。在深入理解这一过程中,我经历了从困惑到自行探究的旅程。通过阅读相关论文源码和与同事的相互验证,我最终理解了大语言模型RLHF中的PPO算法。

       鉴于此,我认为分享我的理解是有价值的。这篇文章旨在详细分解大语言模型RLHF中的PPO算法,涵盖了采样、反馈和学习三个阶段。在阅读之前,建议对大语言模型RLHF的前两步有基本了解,即SFT Model和Reward Model的训练过程。本文旨在深入解释而非从零开始介绍强化学习。

       接下来,我将分阶段介绍大语言模型RLHF中的PPO算法,通过伪代码和计算图辅助理解。

       大语言模型的RLHF本质上是一个模型通过试错和学习不断优化自身的过程。在这个过程中,我们扮演教师角色,提出问题,模型则以“学生”的身份尝试给出答案。教师通过检查答案的正确性给予反馈,帮助模型逐步改进。

       采样阶段是模型根据提示输出答案的过程,是模型自行生成训练数据的过程。在PPO算法中,此阶段包括策略(policy)的采样,策略由演员模型和评论家模型组成,它们分别负责决策和评估。

       反馈阶段是奖励模型(Reward Model)对答案进行评分的过程,为模型提供正反两方面的指导。奖励模型通过计算匹配分数,衡量答案的正确性和合理性。

       学习阶段则是模型根据反馈进行自我改进的过程。在这一阶段,策略通过优化损失函数来强化优势动作,实现性能的提升。

       综上所述,大语言模型RLHF中的PPO算法通过采样、反馈和学习三个阶段,实现了模型的不断优化和改进。掌握这些细节后,我们可以探索更多应用,例如模型优化、改进策略等。

相关栏目:休闲