资讯动态

零基础在windows环境下的WSL使用llamafactory(三)

发布时间:2026/8/20 23:46:02 来源:尧图企业网站定制
目录数据蒸馏如何基于给定文档蒸馏数据现成工具--EasyDataSet具体流程文本块的获取问题-答案对的生成如何调参基础功能控制学习深度控制测试集用于控制显存启用QLora其他功能性参数模型相关swanLab相关总结小练数据蒸馏❓ 为什么输入和输出数据要分开构造问题能不能用一套流程同时生成问题和答案回答不能必须解耦。如果混在一起做一旦最终效果不好你很难排查是“题目出得烂”还是“答案给得错”。分开的好处第一步专心造出高质量、多样化的“输入问题”第二步拿着定好的问题去生成“输出答案”。这样就像流水线作业哪一步出问题修哪一步调试效率极高。❓ 为什么要刻意提升提示词的差异化问题用同一种指令模板批量生成数据不行吗回答不行那样模型会变“傻”。如果提示词千篇一律生成的数据就会缺乏变化。目的通过变换指令的语气、角度和复杂度即提升差异化强迫模型学习各种各样的表达方式。这样训练出来的模型才够灵活能接住用户千奇百怪的提问。❓ 为什么造数据时“有时不加示例有时又要加”这是一个非常反直觉但关键的技巧1. 构造输入出题时坚决不要示例原因防止“思维偷懒”和模仿。如果你给了示例大模型就会倾向于模仿示例的句式导致生成的几千个问题长得都差不多。不给示例才能逼它发散思维创造出真正多样化的问题。2. 蒸馏输出解题时必须加示例原因为了“对齐标准”和“规范格式”。这时候你的目的是让模型学会某种特定的回答风格或逻辑比如由浅入深、带代码块等。加上示例Few-shot就是给模型立规矩让它照着样板答题确保输出的质量稳定且符合预期。如何基于给定文档蒸馏数据现成工具--EasyDataSet地址如下https://github.com/ConardLi/easy-dataset/blob/main/README.zh-CN.md具体流程文本块的获取首先思考如何把一个超长的文档手册丢给ai去学习然后让他能根据用户的提问根据手册的内容回答呢存在着许多问题1.上下文长度有限制2.问题质量太差3.数据集比较难获取。将文档手册转化为 Markdown 格式并基于文本块大小进行切块Chunking是构建大模型检索增强生成RAG系统或进行知识库向量化时的核心预处理步骤。这个流程主要由解析转换与智能切块两大核心阶段构成。首先是格式规范化的清洗与转换阶段。原始的文档手册通常拥有各种复杂的排版如 PDF 的双栏、Word 的样式、HTML 的标签或是 EPUB 等格式。在这个环节中系统会通过专门的解析工具剥离掉冗余的页眉、页脚、图表干扰及噪声信息并将内容统一转换为结构清晰的纯文本 Markdown 格式。转换后的 Markdown 会保留原文档丰富的层级语法例如利用#、##等标题标签来明确界定内容的主题边界同时利用有序或无序列表保持文本的逻辑结构这为后续的精确切块打下了良好的语法基础。接下来是基于文本块大小的语义与结构化切块阶段。传统固定长度的硬切块往往会粗暴地将一句话或一个完整段落拦腰截断导致上下文严重丢失。因此现代的切块流程通常采用结合了 Markdown 语法特征的递归或滑动窗口切块法。系统首先会优先依据 Markdown 的标题层级H1、H2、H3将长文档自然拆解成多个独立的章节模块确保每一个模块都承载相对完整的局部语义。随后如果某个章节的文本量依然超过了预设的“文本块大小Token 限制或字符数限制”系统则会深入到段落、句子甚至是单词的粒度进行精细化拆分同时引入“重叠区域Overlap”机制——即相邻两个文本块之间保留一部分交叉的上下文内容。问题-答案对的生成如何基于给定的文本块生成问题-答案对呢?一是分别让大模型独立生成问题和答案便于调试整个生成过程。二是千方百计的增加问题的丰富度。「文体」是指内容的知识表达框架「受众」是指内容的目标读者群体这个就叫做「GA」对例如让大模型根据原来的文档生成5组GA对将每个问题的GA对填充到提示词中让模型参考生成问题。这样子实现了可以让大模型在对同一个文本块站在不同的视角生成不同的问题。注意一个问题针对模型生成的问题随机剔除百分之60的问号防止模型过于依赖问号来回答问题。这样子就可以根据文本框得到不同的问题了。接下来就是根据问题生成答案了。输入文本块和问题让模型严格按照文本块来生成答案。dsR1在训练冷启动阶段的几千条数据和SFT的80w条数据。其实也是有人工介入筛选的。如何调参也就是常见的「教师」「学生」模型目前将参数划分为基础功能、控制学习深度、控制测试集、用于控制显存、其他功能性参数这五个范围。接下来将逐一进行学习基础功能model_name_or_path--指定你要加载的基础模型Base Model所在的路径或者在 Hugging Face 远程仓库上的名字。本地文件夹路径比如你在本地下载或保存好的模型文件夹目录如 /home/xing/study/finetune/models/Qwen3-0.6B。远程模型名称比如 Hugging Face 官网或 ModelScope 上的开源模型仓库 ID如 Qwen/Qwen3.5-2B。建议去 ModelScope 下载快速一点template--告诉框架如何将你的数据集如instruction、output包装成该模型在训练时所熟悉的特定对话格式例如包含特定的角色标记、系统提示词前缀或对话结束符。不同系列的模型如 Qwen、ChatGLM、Llama 等通常有各自专属的对话格式。如果使用了错误的 template模型在训练时就无法正确理解输入和输出的边界从而影响训练效果。例如在 Qwen 模型中通常会将其设置为qwen。stage--用来指定当前任务运行的流水线阶段。它主要包含四个核心阶段pretrain预训练阶段使用大量的无监督原始文本进行底座模型的预训练或继续预训练让模型学习语言的基本规律和海量知识。sft监督微调阶段使用带有明确输入输出对的指令数据如问答、代码生成等对模型进行微调让其学会理解和遵循人类指令。rm奖励模型训练阶段在人类反馈强化学习RLHF中使用训练一个能够为主模型的回答打分排序的奖励模型。ppo或dpo等强化学习/偏好对齐阶段通过人类偏好数据或强化学习算法进一步对齐模型价值观使其输出更符合人类习惯和安全规范。这三个参数用来控制当前运行脚本所要执行的具体任务动作布尔值通常填true或falsedo_train控制是否进行训练。设置为true时程序会开始执行模型的训练流程如微调。do_eval控制是否进行评估验证。设置为true时程序会在训练过程中或单独运行验证集用来评估模型当前的准确率或损失。do_predict控制是否进行预测推理测试。设置为true时程序会使用测试集让模型进行批量推理预测生成对应的输出结果。finetuning_type--用来指定你所采用的微调训练方法参数高效微调类型。lora高效参数微调PEFT只训练少量的低秩适配器参数显存占用低、速度快。full全量微调更新模型的所有参数效果上限高但需要极大的显存。控制学习深度lora_rank是 LoRA 微调中的低秩矩阵阶数参数。它决定了 LoRA 注入的旁路低秩矩阵的大小。核心作用lora_rank的值越大低秩矩阵的容量就越高模型能学习到的细节和复杂特征就越多但显存开销和参数量也会微幅上升值越小参数越少、显存占用越低。常见取值通常设为8、16、32或64等。对于轻量级微调或小数据集通常从8或16开始尝试。learning_rate--是大模型微调和神经网络训练中最核心的超参数。它用来控制模型参数在每次梯度更新时的调整步子有多大学习率过大模型在训练时步子迈得太大会导致损失函数Loss剧烈震荡甚至无法收敛。学习率过小模型步子迈得太小训练速度会极其缓慢或者容易陷入局部最优解。warmup_ratio--用来指定在训练初期进行学习率预热Warmup的步数占总训练步数的比例例如 0.1 代表前 10% 的步骤。在预热阶段学习率会从 0 逐渐爬升到设定的目标学习率这能有效防止模型在训练初期因为梯度过大而导致训练崩溃或不稳定。max_samples--用来限制每个数据集中最多参与训练的样本数量。如果你的数据集非常大但你只想快速跑通流程、测试代码或者进行小规模验证就可以设置一个数值如 1000系统会自动截取前指定数量的样本进行训练从而大幅缩短单轮测试的时间。num_train_epochs--是用来指定模型训练总轮数Epochs的参数。它决定了整个训练数据集会被模型完整学习和遍历多少次。数值过大模型可能会过度拟合训练数据即过拟合导致在面对新问题时泛化能力下降。数值过小模型可能还没来得及充分学习数据中的规律就结束了训练导致欠拟合。控制测试集大模型训练中用于控制模型评估与权重保存频率的核心参数eval_strategy--用来指定何时对模型进行验证集评估例如设置为 steps 表示按步数评估或者设为 epoch 表示按轮次评估。通过评估可以实时监控模型在验证集上的表现。val_steps--当 eval_strategy 设置为按步数steps评估时该参数用来控制每隔多少训练步数执行一次验证评估。save_steps--用来控制每隔多少训练步数保存一次模型的权重检查点Checkpoint。这能防止训练中断时进度丢失也方便挑选出效果最好的历史权重。用于控制显存cutoff_len--是大模型微调中用来设置文本最大截断长度上下文长度限制的参数。限制输入模型的所有样本包括 prompt 和 response 拼接后的总长度的最大 Token 数量。如果某条数据的长度超过了这个设定值系统会对其进行截断如果低于这个值则会保留完整内容。这能有效防止显存溢出OOM并确保输入维度的统一。per_device_train_batch_size--用来设置单张显卡每个设备上的训练批次大小Batch Size的参数。它决定了模型在每一次参数更新时单张显卡同时处理多少条样本数据数值调大可以提高显卡利用率和训练速度但会占用更多的显存。如果设置过大容易导致显存溢出OOM。数值调小显存占用低适合显存较小的显卡。如果需要达到较大的总批次效果通常可以配合gradient_accumulation_steps梯度累积来一起使用。gradient_accumulation_steps--用来在显存受限时模拟大批次训练的核心参数。它的工作原理是尽管你的 per_device_train_batch_size单卡批次设得很小比如 1但模型不会每处理完 1 步就立刻更新参数。而是将多次前向传播计算出的梯度累加起来等到累积够了指定的步数例如 8 步之后才统一对模型参数进行一次真正的更新。这样可以在几乎不增加额外显存开销的前提下达到增大总批次大小Effective Batch Size的效果从而让训练过程更加平稳。quantization_bit--是用来设置模型量化位数的参数常见可选值为4或8。它的核心作用是降低显存占用通过将模型的权重从高精度如 FP16/BF16压缩为低精度如 4 比特或 8 比特大幅减少显存消耗让消费级显卡也能跑得动大模型。代价量化位数越低例如从 8bit 降到 4bit显存省得越多但模型的精度和输出质量可能会受到一定程度的轻微损失。如果不进行量化该参数通常留空或不设置。启用QLoraquantization_bit--设置模型量化位数的参数常见可选值为4或8降低显存占用通过将模型的权重从高精度如 FP16/BF16压缩为低精度如 4 比特或 8 比特大幅减少显存消耗让消费级显卡也能跑得动大模型。代价量化位数越低例如从 8bit 降到 4bit显存省得越多但模型的精度和输出质量可能会受到一定程度的轻微损失。如果不进行量化该参数通常留空或不设置。其他功能性参数模型相关swanLab相关swanlab_mode--控制SwanLab 实验追踪与日志记录模式的参数常见选项包括online、offline或disabled等联网记录 (online)将训练过程中的损失值Loss、学习率、评估指标等实时同步并上传到 SwanLab 云端方便在网页端实时监控训练曲线。离线记录 (offline)将日志保存在本地不实时联网适合网络不便或需要离线跑实验的场景。禁用 (disabled)关闭 SwanLab 日志记录功能。swanlab_project--设置SwanLab 实验项目名称的参数归类与管理在你使用 SwanLab 进行实验追踪时所有属于同一个大模型微调项目或同一类实验的不同次训练Run都可以归类到同一个项目名称下。网页端展示当你在 SwanLab 的面板中查看训练可视化曲线时项目名称能帮你清晰地把不同任务、不同数据集或者不同架构的实验区分开来。swanlab_run_name--设置SwanLab 单次实验Run名称的参数精准标识在同一个实验项目swanlab_project下往往会进行多轮不同超参数或不同数据集的训练。通过给每次训练起一个独特的运行名称Run Name你可以一眼区分出哪次实验对应哪组配置例如 qwen-lora-lr1e-4。便于对比在 SwanLab 的网页端看板中清晰的实验名称能让你直观地对比不同参数组合下的训练效果与 Loss 曲线走势swanlab_api_key--配置 SwanLab 账号授权密钥API Key的参数身份认证在你的训练环境如服务器终端与 SwanLab 云端平台之间建立安全连接。当你将实验数据上传并同步到云端时系统需要通过这个密钥来验证你的用户身份确保日志能正确存入你的个人或团队账户中。总结小练根据题目参数计算总参数更新次数的核心步骤如下1. 确定训练集样本数总样本数为 1000验证集占比 10%故训练集样本数为 1000×(1−0.1)9002. 计算每个 epoch 的 batch 数每个 batch 包含 2 个样本因此每个 epoch 的 batch 数为 900/24503. 考虑梯度累积机制梯度累积步数为 5即每 5 个 batch 才执行一次参数更新。因此每个 epoch 的参数更新次数为 450/5904. 计算总参数更新次数训练共进行 4 个 epoch因此总更新次数为 4×90360最终结果总共更新参数 360 次。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价