
Axolotl 微调实战Ministral3 2512 Thinking 模型显式思维链 QLoRA 指南【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotl本篇技术指南围绕 Axolotl 对Ministral3 2512mistralai/Ministral-3-3B-Reasoning-2512的 Thinking 能力微调展开Thinking 模型在回答前会先输出显式的思维链Chain-of-Thought推理过程并将内容划分为 thinking 与 response 两个独立段落。读完本文你将掌握 Axolotl 中 multi-content 数据集格式含role: thinking的编写规范、配套 QLoRA 配置文件每个参数的用途以及底层 chat_template 策略如何处理多段内容与推理痕迹从而直接复现一个约 4.76 GiB 显存开销的单卡 Thinking 微调实验。Ministral3 2512 与 Thinking 能力Ministral3 是 MistralAI 推出的开源权重模型家族。在 examples/ministral3/README.md 中Axolotl 为这一系列提供了三套微调指南多轮对话基础微调ministral3-3b-qlora.yaml、Thinking 推理微调本文主题位于 examples/ministral3/think/以及 Vision 视觉微调examples/ministral3/vision/README.md。其中Thinking 能力是 Ministral3 2512 的核心特性模型能够在正式回答前生成显式的推理步骤将内部思考与最终回答分离。这一能力让模型适合数学计算、逐步推理、逻辑分析等场景。对于这类模型微调数据集必须显式地提供 thinking 段落Axolotl 通过 multi-content 消息格式与role: thinking支持这一点详见下文数据集格式章节。前置条件开始之前需要满足安装 Axolotl参见 examples/ministral3/README.md 中的安装指引建议从源码安装以使用最新特性完整安装说明见 docs/installation.qmd。强烈建议安装 Cut Cross Entropy本示例配置通过plugins启用了axolotl.integrations.cut_cross_entropy.CutCrossEntropyPlugin该插件能显著降低训练 VRAM 占用。仓库提供了安装脚本 scripts/cutcrossentropy_install.py参考 docs/custom_integrations.qmd 中关于 Cut Cross Entropy 的部分。数据集使用type: chat_template因此需保证所用 tokenizer 支持聊天模板本示例使用mistral-commontokenizer。快速开始一条命令启动 Thinking 微调运行以下命令即可开始 Thinking 模型的 QLoRA 微调axolotl train examples/ministral3/think/ministral3-3b-think-qlora.yaml该配置在 4-bit 量化 LoRA 适配器 Cut Cross Entropy 插件的组合下显存开销约为 4.76 GiB适合单张消费级显卡运行。启动前确认配置文件中的数据集Nanobit/text-think-2k-test可正常访问或替换为你自己的 thinking 格式数据集训练脚本与配置路径均相对于仓库根目录。使用要点Tips数据集必须使用multi-content 格式并在 system / assistant 消息中支持额外的role: thinking详见下文。严禁混用content: str与content: list[dict]同一数据集内所有消息的 content 字段类型必须保持一致否则数据集加载会直接失败。配置文件逐项解析核心配置位于 ministral3-3b-think-qlora.yaml下面按功能模块拆解模型与 tokenizerbase_model: mistralai/Ministral-3-3B-Reasoning-2512 # Enable to use mistral-common tokenizer tokenizer_use_mistral_common: truebase_model指向 Thinking 推理版本的 3B 模型。注意它并非通用底座Ministral-3-3B-2512而是-Reasoning-后缀的专用版本其 chat template 才包含 thinking 段落的处理逻辑。tokenizer_use_mistral_common: true启用 Mistral 官方的mistral-commontokenizer。这是当前 Ministral3 系列 SFT 微调的唯一受支持方式仅限type: chat_template数据集详见文末限制。量化与插件plugins: - axolotl.integrations.cut_cross_entropy.CutCrossEntropyPlugin load_in_8bit: false load_in_4bit: trueload_in_4bit: true以 4-bit 量化加载底座模型是 4.76 GiB 低显存开销的关键Cut Cross Entropy 插件在计算交叉熵损失时跳过 logits 的完整物化进一步压减显存与计算量。数据集datasets: - path: Nanobit/text-think-2k-test type: chat_template dataset_prepared_path: last_run_prepared val_set_size: 0数据集类型为chat_template即完全交由模型的 chat template 进行格式化而不是走 Axolotl 内置的 prompt 模板dataset_prepared_path: last_run_prepared复用上次预处理结果以加速迭代val_set_size: 0不使用验证集划分Thinking 数据集通常用于纯 SFT 演示。LoRA 适配器adapter: qlora lora_model_dir: lora_r: 32 lora_alpha: 16 lora_dropout: 0.05 lora_target_linear: true lora_target_modules: - gate_proj - down_proj - up_proj - q_proj - v_proj - k_proj - o_projadapter: qlora在 4-bit 底座上叠加 LoRA 低秩适配lora_r: 32、lora_alpha: 16为低秩维度与缩放系数alpha/r 0.5lora_dropout: 0.05防止过拟合显式列出q/k/v/o注意力投影与gate/down/upMLP 投影共 7 类目标模块lora_target_linear: true还会将线性层纳入 LoRA 目标确保主干参数全部可被低秩适配覆盖。训练超参数sequence_len: 2048 sample_packing: true gradient_accumulation_steps: 4 micro_batch_size: 2 num_epochs: 1 optimizer: adamw_bnb_8bit lr_scheduler: cosine learning_rate: 0.0002 bf16: auto tf32: false gradient_checkpointing: true attn_implementation: flash_attention_2 warmup_ratio: 0.1 evals_per_epoch: 1 saves_per_epoch: 1sequence_len: 2048Thinking 数据集通常较长思考 回答2048 的上下文长度可容纳完整的推理链sample_packing: true开启样本打包将多个短样本拼接到同一序列提高显存利用率micro_batch_size: 2×gradient_accumulation_steps: 4组合出有效 batch size 8optimizer: adamw_bnb_8bit使用 bitsandbytes 8-bit 优化器进一步省显存bf16: auto、gradient_checkpointing: true、attn_implementation: flash_attention_2共同构成低显存训练三角warmup_ratio: 0.1提供 10% 步数的学习率预热saves_per_epoch: 1每个 epoch 保存一次 checkpoint如需验证 checkpoint 保存流程可取消注释save_first_step: true。数据集格式multi-content 与 thinking 段落Thinking 模型的数据集要求multi-content多段内容消息格式即每条消息的content不再是单个字符串而是一个内容片段content part列表并额外支持role: thinking类型。Axolotl 的 chat_template 提示策略 负责解析这种格式并交给模型的聊天模板渲染。标准示例{ messages: [ { role: system, content: [ { type: text, text: {SYSTEM_PROMPT}} ] }, { role: user, content: [ { type: text, text: Solve this step by step: What is 15% of 240?} ] }, { role: assistant, content: [ { type: thinking, thinking: I need to calculate 15% of 240. First, Ill convert 15% to decimal: 0.15. Then multiply: 0.15 × 240 36. }, { type: text, text: To find 15% of 240, Ill multiply 240 by 0.15:\n\n240 × 0.15 36\n\nTherefore, 15% of 240 is 36. } ] } ] }要点system / user 消息content为[{ type: text, text: ... }]形式的列表type: text表示普通文本片段assistant 消息先放type: thinking片段携带thinking字段即模型内部推理痕迹再放type: text片段最终对外回答。渲染后模型会学习用显式推理链衔接最终答案建议使用与模型训练阶段一致的{SYSTEM_PROMPT}可显著提升思考质量。片段粒度与空格边界源码提示从源码看chat_template.py 中的_convert_content_parts会把 content part 列表拼装为连续字符串每个 part 可提供text/content/value中的任意一个作为文本并可携带trainbool或weight0/1字段控制该片段是否参与 loss 计算。实现中有两条重要约束值得留意空格归属影响 token 切分BPE tokenizer 通常把空格作为词首 token 的一部分如 answer是一个 token因此片段边界应在空格之前断开例如[Let me think..., The answer is 4.]优于[Let me think... , The answer is 4.]换行一般与前面标点合并:\n是一个 token应把换行保留在前一个片段尾部。跨界 token 会被保守掩码若某 token 恰好跨越了 train/mask 边界该 token 默认不参与训练当片段以空格结尾且相邻片段 train 标志不同时代码会输出警告提示调整空格归属。内容字段一致性同一数据集内每条消息的content要么全部是字符串content: str要么全部是片段列表content: list[dict]两者混用会导致数据集加载失败——因为 chat_template 策略 会在加载与转换阶段对 content 做统一处理。高级选项closed 参数控制 [/THINK] 闭合标签thinking片段支持可选的closed参数用于控制是否在推理痕迹末尾追加[/THINK]闭合标签{ type: thinking, thinking: Internal reasoning here..., closed: true // Default: true, controls adding the closing [/THINK] tag }默认值为true渲染时在思考内容后自动闭合[/THINK]标签设为false不追加闭合标签适用于数据集本身已包含完整标签、或需要以未闭合形式拼接后续内容的场景。相关数据配置项thinking 字段映射除 multi-content 格式外Axolotl 的数据集配置 schema 还提供了一批与推理痕迹相关的字段便于对接reasoning_content风格的开源数据配置项默认值作用field_thinkingreasoning_content数据集样本中承载推理痕迹的字段名template_thinking_keyreasoning_content聊天模板期望读取推理痕迹所用的键名split_thinkingfalse仅 Qwen3 模板是否将 assistant 内容按分隔标签内的推理痕迹拆分这些字段的映射逻辑同样实现在 chat_template.py 的消息转换流程当样本的推理键命中template_thinking_key时推理内容会被转换为聊天模板对应的 thinking 占位若开启split_thinking则会从 assistant 内容中提取分隔标签内的推理文本并拆分为 thinking 与 answer 两段。Ministral3 Thinking 示例直接使用 multi-content 的type: thinking片段无需依赖这些映射字段但理解它们有助于将其他推理痕迹格式的数据迁移到本工作流。已知限制根据 examples/ministral3/README.md 中的说明当前 Ministral3 系列支持存在以下限制tokenizer 限制目前仅支持mistral-commontokenizer 进行监督微调SFT且仅支持type: chat_template数据集不支持覆盖 token暂不支持通过配置改写/覆盖模型 token偏好微调DPO 等、强化学习RL等范式尚未对 Ministral3 系列提供同等支持仍属未来工作。延伸阅读多轮对话基础微调见 examples/ministral3/ministral3-3b-qlora.yamlVision 视觉微调见 examples/ministral3/vision/README.md数据集加载与格式见 docs/dataset_loading.qmd 与 docs/dataset-formats/conversation.qmdchat_template 类型优化指南见 docs/optimizations.qmd。【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考