1. 引言

注意:本文部分内容根据AI生成,请注意甄别,仅供参考。

本文主要整理LLaMA-Factory 相关的名词,并进行解析。同学们可以根据目录导航去了解相关的知识点。
在这里插入图片描述

2. 基础名词

2.1 语言(Language)

在这里插入图片描述
LLaMA-Factory 支持的语言有如下:

 en(英语)、ru(俄语)、zh(中文)、ka(格鲁吉亚语)、ja(日语)

选择语言之后,整个 WebUI 的菜单、按钮、提示信息等都会自动切换到对应语言。

2.2 模型

在这里插入图片描述

2.2.1 模型名称(Model name)

LLaMA-Factory 支持的模型如下:

模型名 参数量 Template
Baichuan 2 7B/13B baichuan2
BLOOM/BLOOMZ 560M/1.1B/1.7B/3B/7.1B/176B -
ChatGLM3 6B chatglm3
Command R 35B/104B cohere
DeepSeek (Code/MoE) 7B/16B/67B/236B deepseek
DeepSeek 2.5/3 236B/671B deepseek3
DeepSeek R1 (Distill) 1.5B/7B/8B/14B/32B/70B/671B deepseekr1
Falcon 7B/11B/40B/180B falcon
Falcon-H1 0.5B/1.5B/3B/7B/34B falcon_h1
Gemma/Gemma 2/CodeGemma 2B/7B/9B/27B gemma/gemma2
Gemma 3/Gemma 3n 1B/4B/6B/8B/12B/27B gemma3/gemma3n
GLM-4/GLM-4-0414/GLM-Z1 9B/32B glm4/glmz1
GLM-4.1V* 9B glm4v
GLM-4.5* 106B/355B glm4_moe
GPT-2 0.1B/0.4B/0.8B/1.5B -
GPT-OSS 20B/120B gpt
Granite 3.0-3.3 1B/2B/3B/8B granite3
Granite 4 7B granite4
Hunyuan 7B hunyuan
Index 1.9B index
InternLM 2-3 7B/8B/20B intern2
InternVL 2.5-3 1B/2B/8B/14B/38B/78B intern_vl
Kimi-VL 16B kimi_vl
Llama 7B/13B/33B/65B -
Llama 2 7B/13B/70B llama2
Llama 3-3.3 1B/3B/8B/70B llama3
Llama 4 109B/402B llama4
Llama 3.2 Vision 11B/90B mllama
LLaVA-1.5 7B/13B llava
LLaVA-NeXT 7B/8B/13B/34B/72B/110B llava_next
LLaVA-NeXT-Video 7B/34B llava_next_video
MiMo 7B mimo
MiniCPM 0.5B/1B/2B/4B/8B cpm/cpm3/cpm4
MiniCPM-o-2.6/MiniCPM-V-2.6 8B minicpm_o/minicpm_v
Ministral/Mistral-Nemo 8B/12B ministral
Mistral/Mixtral 7B/8x7B/8x22B mistral
Mistral Small 24B mistral_small
OLMo 1B/7B -
PaliGemma/PaliGemma2 3B/10B/28B paligemma
Phi-1.5/Phi-2 1.3B/2.7B -
Phi-3/Phi-3.5 4B/14B phi
Phi-3-small 7B phi_small
Phi-4 14B phi4
Pixtral 12B pixtral
Qwen (1-2.5) (Code/Math/MoE/QwQ) 0.5B/1.5B/3B/7B/14B/32B/72B/110B qwen
Qwen3 (MoE) 0.6B/1.7B/4B/8B/14B/32B/235B qwen3
Qwen2-Audio 7B qwen2_audio
Qwen2.5-Omni 3B/7B qwen2_omni
Qwen2-VL/Qwen2.5-VL/QVQ 2B/3B/7B/32B/72B qwen2_vl
Seed Coder 8B seed_coder
Skywork o1 8B skywork_o1
StarCoder 2 3B/7B/15B -
TeleChat2 3B/7B/35B/115B telechat2
XVERSE 7B/13B/65B xverse
Yi/Yi-1.5 (Code) 1.5B/6B/9B/34B yi
Yi-VL 6B/34B yi_vl
Yuan 2 2B/51B/102B yuan

2.2.2 模型路径(Model path)

模型路径是本地模型的文件路径或 Hugging Face 的模型标识符。

  • 本地文件系统路径:指向你本机磁盘上已下载好、符合 Hugging Face 目录结构的模型文件夹(确保该目录中包含 config.json、tokenizer 配置以及权重文件),例如:/data/models/chinese-llama-7b
  • Hugging Face Hub 标识符:在线仓库里的模型名称(含可选用户名/组织名与命名空间),例如:meta-llama/Llama-2-7b-chat-hf

2.2.3 模型下载源(Hub name)

LaMa-Factory 首次(或缓存失效时)拉取模型权重、分词器及配置文件时,需要决定从哪个平台去下载,下拉框可三选一:

选项 全称 / 地址 适用场景 备注
huggingface Hugging Face Hub 国际网络畅通 官方源,模型最全,速度取决于国际带宽
modelscope ModelScope 魔搭社区 国内网络、教育网 阿里达摩院运营,镜像同步快,网络受限环境推荐
openmind 魔乐社区 华为昇腾/Atlas 生态 华为主导,对 Ascend 芯片有专门优化

总结“网络好就用 huggingface;国内或受限就用 modelscope;华为设备或魔乐专模就用 openmind”。

2.3 微调方法

在这里插入图片描述

2.3.1 微调方法(Finetuning method)

告诉 LaMa-Factory 在训练阶段只改哪些参数,从而决定显存占用、训练速度与最终效果之间的权衡,下拉框三选一:

选项 全称/含义 原理 显存 适用场景
lora Low-Rank Adaptation 冻结原模型权重,插入少量可训练的低秩矩阵 最低 显存有限、快速实验、多卡并行
full Full-Parameter Fine-Tuning 放开全部参数一起训练 最高 数据量大、算力充足、追求极限精度
freeze Freeze(部分冻结) 冻结大部分层,只训练顶层/指定层 中等 想保留原模型知识、仅微调少量层

总结“显存小选 lora,算力足选 full,想折中选 freeze”。

2.3.2 检查点路径(Checkpoint path)

告诉 LaMa-Factory 在 继续训练(resume)或 加载已微调好的权重 进行推理/评估时,去哪个目录里找完整的模型检查点。与「模型路径」不同,这里指向的通常是你自己上一次微调保存下来的结果(包含完整或 LoRA 权重、优化器状态、训练步数等信息)。

在这里插入图片描述
常见示例 :

   # 继续上次的 LoRA 训练
   ./saves/llama2-7b-chat/lora/checkpoint-1200

   # 加载已经微调完并合并权重的完整模型
   ./saves/baichuan-13b/full/best_model

   # 评估或推理时,直接指向上次保存的最终目录
   ./output/exp_20240807

与「模型路径」的关系 :

  • 如果 checkpoint_path 为空,LaMa-Factory 会完全从 model_name_or_path 初始化。
  • 如果 checkpoint_path 不为空,则会覆盖 model_name_or_path 里的权重,用于继续训练或直接使用微调后的模型。

总结“检查点路径”就是告诉程序别用原来的预训练权重,用我上次训练出来的那一份。

2.4 量化

在这里插入图片描述

2.4.1 量化等级(Quantization bit)

在加载大模型前,先把权重压缩到 8-bit 或 4-bit 整数,从而显著降低显存占用和推理延迟,下拉框三选一:

选项 含义 显存节省 速度 适用场景
none 不做量化,保持原精度(FP16/BF16) 0 % 基准 显存充裕、追求最高精度
8 8-bit 整数量化(INT8) ≈ 50 % 轻微下降 中等显存、可接受少量误差
4 4-bit 整数量化(INT4/Q4_0、Q4_K、NF4 等) ≈ 75 % 明显下降 显存紧张、快速实验、本地部署

总结“显存够选 none,想省一半选 8,想省四分之三选 4”

2.4.2 量化方法(Quantization method)

在“量化等级”里选了 8-bit 或 4-bit 后,再决定具体用哪一套算法去做低比特压缩,LaMa-Factory 的下拉框目前给出三种:

bnb(bitsandbytes)
• 最常见的动态量化库,社区支持最好。
• 支持 4-bit(NF4/fp4)和 8-bit(INT8)两种位宽。
• 与 LoRA/QLoRA 配合最成熟,微调阶段几乎零额外开发量。
• 显存节省约 50 %(8-bit)或 75 %(4-bit),对推理速度影响较小。
• 依赖:bitsandbytes CUDA 内核,安装简单,一条 pip install bitsandbytes 即可。

hqq(Half-Quadratic Quantization)
• 2024 年提出的“半二次”量化算法,无需校准数据即可后训练量化。
• 支持 2-8 bit 可配置位宽,官方推荐 3-4 bit 仍能保持较高精度。
• 在极低比特(2-3 bit)场景下,精度显著优于线性量化。
• 推理速度极快,适合边缘端部署;与 LoRA 同样兼容。
• 依赖:pip install hqq(或源码安装)。

eetq(Efficient and Effective Ternary Quantization)
• 三值/INT8 量化方案,目前 LaMa-Factory 固定 8-bit。
• 实现简单、延迟最低,对 GPU Tensor Core 友好;但仅 8-bit,压缩率低于前两者。
• 适合对延迟极度敏感、显存又不是极端紧张的场景。
• 依赖:pip install eetq(或指定 git 源码)。

总结“大众稳选 bnb,极限压缩选 hqq,只要快选 eetq”。

2.5 对话模版

在这里插入图片描述

在训练或推理时,把「用户输入」包装成符合目标模型 prompt 格式的「完整字符串」。不同模型家族(LLaMA-2-Chat、Baichuan-Chat、ChatGLM3、Qwen、Vicuna …)对 system / user / assistant / history 的拼接方式、特殊 token、换行符都有细微差异,模板就是用来 自动完成这种拼接 的。

LaMa-Factory 的下拉框里常见的内置模板示例 :

模板名 适用模型 处理后示例(简化)
llama2 LLaMA-2-Chat <s>[INST] <<SYS>>\nsystem\n<</SYS>>\nuser [/INST] assistant </s>
baichuan Baichuan-Chat <reserved_106>user<reserved_107>assistant
chatglm3 ChatGLM3 `[gMASK]sop<
qwen Qwen-Chat `<
vicuna Vicuna-v1.5 USER: user\nASSISTANT: assistant
raw / none 基座模型 不做任何包装,直接把用户文本送进去

注意:

  • 下拉框里直接挑与模型名字一致或官方推荐的模板。
  • 若自定义模板,可把对应的 .jinja/.yaml 文件放到 templates/ 目录,下拉框会自动出现同名选项。
  • 选错模板会导致模型输出乱码、胡言乱语,或者训练损失不降。

总结“模型是谁,模板就选谁;模板选错,效果全毁。”

2.6 RoPE插值方法

在这里插入图片描述
当输入文本长度超过模型预训练时的最大位置编码(例如 4k)时,通过 “插值” 把未见过的长位置索引映射回模型熟悉的区间,从而 无需重训 即可扩展上下文窗口。LaMa-Factory 下拉框给出了 5 种可选策略,按复杂度与效果递增:

选项 全称 / 原理 特点 适用场景
none 不插值 原样使用训练长度,超长直接外推,效果差 只处理短文本、或已专门重训
linear 线性插值 把位置索引整体等比例压缩,实现简单但易失真 快速实验;8k 以内扩展
dynamic 动态 NTK 插值 根据实时序列长度自动计算缩放系数,兼顾长短文本 开源模型零样本长文本首选,无需微调
yarn Yet another RoPE extensioN 将不同频率维度分段处理:高频保留、低频线性插值、中频平滑过渡,支持 >200k token 超长输入;需少量长文本微调恢复精度 超长文档、代码仓库、书籍级任务
llama3 Llama-3 官方方案 先对 8k 长度继续预训练,再采用组合式 RoPE 缩放(含 yarn 思想),兼顾精度与效率;仅适合 Llama-3 系列 官方 8k+ 场景,直接开箱即用

总结“短文本 none,8k 以内 linear,通用长文本 dynamic,极限超长 yarn,Llama-3 就用 llama3”。

2.7 加速方式

在这里插入图片描述
决定在训练或推理阶段,用哪一套 底层算子/系统级优化 来加速 Transformer 的注意力计算、显存调度或端到端流程。LaMa-Factory 的下拉框目前提供 4 个互斥选项:

选项 全称 / 实现 核心优化点 适用场景一句话
auto 自动检测 框架根据 GPU 架构、CUDA 版本、依赖是否安装,自动在 flashattn2unslothxformerspytorch-native 之间回退 不想折腾,让系统自己挑
flashattn2 FlashAttention-2 针对 Attention 的 IO-aware 精确加速:分块 (tiling) + Tensor Core,无精度损失;训练/推理都能用 长序列、大模型训练,A100/H100 等高端卡效果最佳
unsloth Unsloth 框架 训练阶段专用:重写反向传播 + 梯度检查点 + 动态量化,单卡可提速 2-10 倍,显存省 70 % 单卡/多卡训练,显存紧张又想快
liger_kernel Liger Kernel 推理阶段专用:算子融合、JIT 编译、静态内存预分配,面向端侧或 CPU/GPU 混合部署 边缘设备、推理服务、低延迟场景

如何选?

  1. 默认 auto:最省心,系统会优先尝试 flashattn2 → unsloth → 原生。
  2. 训练长序列或 GPU 支持 FA2 → 手动选 flashattn2
  3. 本地 GPU 显存 < 24 GB,又想跑 7B/13B → 选 unsloth 并配合 4-bit 量化。
  4. 只是做端侧推理或需要极致低延迟 → 选 liger_kernel

总结 “不想管就选 auto,训练又快又准 flashattn2,显存吃紧 unsloth,端侧推理 liger_kernel。”

2.8 设备显存

在这里插入图片描述

LaMa-Factory 在训练或推理阶段最多能占用多少显存,防止 OOM(Out-Of-Memory)或把整卡占爆。单位统一用 GiB(1 GiB = 1024 MiB)。

常见填写方式

场景 示例值 说明
单卡 24 GB,留 2 GB 给系统 22 实际最大占用 ≈ 22 GiB
8×A100 80 GB,想让每张卡最多吃 70 GB 70 多卡并行时每张卡都受 70 GiB 限制
笔记本 6 GB,测试小模型 5 留 1 GB 给 GUI/浏览器

注意事项

  1. 如果同时开启了 8/4-bit 量化LoRAunsloth 等优化,显存需求会大幅下降,可适当把 device_memory 调低。
  2. 若出现 OOM,先减 per_device_train_batch_sizegradient_accumulation_steps,再下调 device_memory
  3. 在 CPU/多卡混合训练时,该参数仅限制 GPU 显存;CPU offload 部分不受此限制。

2.9 相关知识

2.9.1 显存

显存,全称是显卡内存(Video Memory,VRAM),是安装在显卡(GPU)上的一种高速存储器,用于存储和处理图像、视频和3D数据等与图形相关的信息。

显存、显卡、独立显卡、集成显卡、GPU、CPU等概念常常出现在电脑硬件、图形处理、人工智能等领域,看起来复杂,其实背后有清晰的关系。一张图先理清大局:

CPU(中央处理器)
│
├── 集成显卡(iGPU) → 使用共享内存
│
└── 主板插槽 ↘
             ↘
              独立显卡(dGPU) → 包含 GPU + 显存(VRAM)
                          │
                          └─ NVIDIA/AMD(显卡厂商)
                                 │
                                 └─ CUDA(NVIDIA 的 GPU 编程平台)

如果使用的是 Mac (Apple Silicon 架构),这些概念会和传统的 PC(尤其是配 NVIDIA 显卡的 Windows/Linux)有些不同理解方式,下面是针对 Apple Silicon 架构的解释。

                 ┌────────────────────────────────────────────────────┐
                 │               Apple 芯片(SoC)                     │
                 │─────────────────────────────────────────────────── │
                 │                                                    │
                 │  ┌────────────┐  ┌────────────┐  ┌───────────────┐ │
                 │  │    CPU     │  │    GPU     │  │  Neural       │ │ 
                 │  │(通用计算)  │  │(图形处理)  │  │ Engine神经引擎 │ │ 
                 │  └────────────┘  └────────────┘  └───────────────┘ │
                 │                                                    │
                 │        所有模块共享这块统一内存(Unified Memory)       │
                 └────────────────────────────────────────────────────┘
		                                   ▲
		                                   │
		                    不再区分“显存 VRAM”和“系统内存 RAM”
		                                   │
                ┌─────────────────────────────────────────────────────┐
                │            无需独立显卡(NVIDIA/AMD)                  │
                │          GPU 内置,Metal 接口调用图形能力               │
                └─────────────────────────────────────────────────────┘
                                   │
		        ┌──────────────────────────────────────────────────────┐
		        │                    编程接口支持(非 CUDA)              │
		        │  - Metal(图形+计算)                                  │
		        │  - Core ML(AI 推理)                                  │
		        │  - PyTorch-MPS / TensorFlow-Metal(深度学习)          │
		        └──────────────────────────────────────────────────────┘

概念 在 Mac 上的理解
GPU Apple 芯片中内置的图形处理器,性能很强
显卡 没有独立显卡,GPU 是芯片一部分
显存(VRAM) 使用统一内存(Unified Memory)
CPU M4 内部集成的高效能 + 高能效核心
CUDA NVIDIA 专有,Mac 不支持,使用 Metal 代替
PyTorch/TensorFlow 需要配置 MPS 或 Metal 后端才能在 Mac GPU 上运行

2.9.2 CPU/GPU/NPU/TPU

下面用一个清晰简洁的表格总结 CPU、GPU、NPU 和 TPU 的核心区别和特点:

项目 CPU GPU NPU TPU
全称 中央处理器 图形处理器 神经网络处理器 张量处理器
主要用途 通用计算 并行计算,图形渲染 AI推理加速 AI训练和推理
计算特点 串行处理,灵活性高 大规模并行计算 针对神经网络矩阵运算优化 专门为机器学习设计的加速器
编程接口 C/C++、Java 等 CUDA、OpenCL、Metal 等 Core ML(Apple)、NNAPI(Android) TensorFlow、XLA
能效比 较低 中等 极高
代表厂商 Intel、AMD NVIDIA、AMD Apple(Neural Engine)、华为、三星 Google
是否支持训练 支持 支持 主要推理,不支持大规模训练 支持
典型应用 操作系统、应用程序逻辑 游戏、视频渲染、深度学习 手机、边缘设备的
AI推理(加速已经训练好的模型执行,比如图像识别、语音识别、自然语言处理等任务,通常在手机、边缘设备上实现快速响应和低功耗) 、
实时处理(例如实时人脸识别、摄像头画面增强、智能助手语音识别等需要快速低延迟的应用)、
低功耗设备(智能手机、IoT设备、智能摄像头等对功耗敏感的设备使用NPU做AI计算)
云端大规模AI训练

这几种处理器虽然侧重点不同,但它们之间是互补且协同工作的关系。简单来说:

  • CPU :是通用的大脑,负责整体控制、逻辑判断、调度任务。
  • GPU :是擅长做大规模并行计算和图形渲染的“多线程工厂”,帮 CPU 加速大量重复计算。
  • NPU :专门针对 AI 神经网络推理做硬件加速,比 GPU 更省电更高效,但灵活性略低。
  • TPU :是谷歌为深度学习训练和推理设计的“超级加速器”,专门优化机器学习计算。

3. 训练相关名词(train)

3.1 基础设置

3.1.1 训练阶段

在这里插入图片描述
在 LaMa-Factory 里,「训练阶段」决定整个 pipeline 的 数据格式、损失函数、优化目标 以及 后续可用功能 。下拉框共有 6 个互斥选项,按典型流程从前到后排列:

选项 描述 输入数据长什么样 产出
Pre-Training
(继续预训练)
让基座模型在大规模无监督文本上继续学通用知识 纯文本文件,每行一段 doc 新的基座权重
Supervised Fine-Tuning
(SFT,监督微调)
用「指令-回答」对把模型变成对话/任务助手 JSONL:{“instruction”:“…”, “input”:“…”, “output”:“…”} 指令微调模型
Reward Modeling
(RM,奖励模型训练)
让模型学会给「回答」打分,为后续 RLHF 提供奖励信号 JSONL:{“chosen”:“…”, “rejected”:“…”} 奖励模型权重
PPO 用 RM 的打分做强化学习,进一步对齐人类偏好 JSONL:{“prompt”:“…”}(无需答案) 强化后对话模型
DPO 直接利用「chosen / rejected」对做偏好对齐,不需要显式奖励模型 JSONL:{“prompt”:“…”, “chosen”:“…”, “rejected”:“…”} 偏好对齐模型
KTO 类似 DPO,但使用「输赢」信号而非完整句子对,样本标注更轻 JSONL:{“prompt”:“…”, “completion”:“…”, “label”:true/false} 偏好对齐模型

总结“先 Pre-Training 打底,再 SFT 教对话,RM 学打分,PPO/DPO/KTO 做对齐。”

3.1.2 数据集

简单来说,数据集就是一组经过组织和整理的数据集合,常用于训练、验证、测试机器学习和深度学习模型,也被广泛应用于统计分析、数据挖掘、人工智能、科研等领域。

3.1.2.1 数据集分类

注意:使用自定义数据集时,请更新 data/dataset_info.json 文件。

LLaMA-Factory提供丰富的数据集,常见的内置数据集分类如下:

📘 预训练数据集(预训练阶段,Pre-training)

数据集名称 说明 语言/领域
Wiki Demo (en) 维基百科小规模演示数据 英文
RefinedWeb (en) 高质量网页文本 英文
RedPajama V2 (en) RedPajama 第二版网页和书籍语料 英文
Wikipedia (en) 英文维基百科全文 英文
Wikipedia (zh) 中文维基百科全文 中文
Pile (en) 多来源大型英文语料 英文
SkyPile (zh) Skywork 中文预训练语料 中文
FineWeb (en) 网页抓取后处理文本 英文
FineWeb-Edu (en) 教育领域网页文本 英文
The Stack (en) 开源代码语料库 多语言代码
StarCoder (en) StarCoder 代码语料 代码

🧾 指令微调数据集(指令微调阶段,SFT)

数据集名称 说明 语言/领域
Identity (en&zh) 身份验证测试数据 英文 & 中文
Stanford Alpaca (en) 原始英文 Alpaca 数据 英文
Stanford Alpaca (zh) 中文 Alpaca 数据 中文
Alpaca GPT4 (en&zh) GPT-4 生成的指令数据 英文 & 中文
Glaive Function Calling V2 (en&zh) 英文和中文函数调用指令数据 英文 & 中文
LIMA (en) 高质量简洁对话数据 英文
Guanaco Dataset (multilingual) 多语言多轮问答数据 多语言
BELLE 2M (zh) 大规模中文指令数据集 中文
BELLE 1M (zh) 大规模中文指令数据集 中文
BELLE 0.5M (zh) 大规模中文指令数据集 中文
BELLE Dialogue 0.4M (zh) 中文多轮对话数据 中文
BELLE School Math 0.25M (zh) 中文学校数学指令数据 中文
BELLE Multiturn Chat 0.8M (zh) 中文多轮聊天数据 中文
UltraChat (en) 复杂多轮对话数据 英文
OpenPlatypus (en) 开源英文指令任务集 英文
CodeAlpaca 20k (en) 代码任务指令数据 英文
Alpaca CoT (multilingual) 含推理链的指令数据 多语言
OpenOrca (en) Orca 英文指令数据集 英文
SlimOrca (en) Orca 精简版英文指令数据 英文
MathInstruct (en) 数学任务指令数据 英文
Firefly 1.1M (zh) 中文通用对话数据 中文
Wiki QA (en) 维基百科问答 英文
Web QA (zh) 网页问答 中文
WebNovel (zh) 中文小说生成数据 中文
Nectar (en) 通用任务指令集 英文
deepctrl (en&zh) 可控生成数据 英文 & 中文
Advertise Generating (zh) 广告生成训练集 中文
ShareGPT Hyperfiltered (en) 大规模人类对话数据 英文
ShareGPT4 (en&zh) 大规模人类对话数据 英文 & 中文
UltraChat 200k (en) 大规模复杂对话数据 英文
AgentInstruct (en) 代理任务指令数据 英文
LMSYS Chat 1M (en) 大规模聊天数据 英文
Evol Instruct V2 (en) 进化指令数据 英文
Cosmopedia (en) 知识百科问答数据 英文
STEM (zh) 科学教育指令数据 中文
Ruozhiba (zh) 中文高质量指令数据 中文
Neo-sft (zh) 中文微调指令数据 中文
Magpie-Pro-300K-Filtered (en) 高质量英文指令数据 英文
Magpie-ultra-v0.1 (en) 高质量英文指令数据 英文
WebInstructSub (en) 英文网页指令子集 英文
OpenO1-SFT (en&zh) 英文及中文混合微调数据 英文 & 中文
Open-Thoughts (en) 英文思想交流数据 英文
Open-R1-Math (en) 英文数学指令数据 英文
Chinese-DeepSeek-R1-Distill (zh) 中文深度搜索蒸馏数据 中文
LLaVA mixed (en&zh) 英文及中文多模态指令数据 英文 & 中文
Pokemon-gpt4o-captions (en&zh) 英文及中文动漫图像字幕指令数据 英文 & 中文
Open Assistant (de) 德语开源助手数据 德语
Dolly 15k (de) 德语 Dolly 指令数据 德语
Alpaca GPT4 (de) 德语 GPT4 指令数据 德语
OpenSchnabeltier (de) 德语指令数据 德语
Evol Instruct (de) 德语进化指令数据 德语
Dolphin (de) 德语对话指令数据 德语
Booksum (de) 德语书籍摘要数据 德语
Airoboros (de) 德语多轮对话指令数据 德语
Ultrachat (de) 德语复杂对话数据 德语

🧠 偏好数据集(偏好学习阶段, DPO / RLHF)

数据集名称 说明 语言/领域
DPO mixed (en&zh) 中英文偏好对齐数据 英文 & 中文
UltraFeedback (en) 大规模用户反馈数据 英文
COIG-P (zh) 中文偏好对比数据 中文
RLHF-V (en) 奖励模型训练数据 英文
VLFeedback (en) 多模态反馈数据 多模态
RLAIF-V (en) 强化学习带人类反馈数据 英文
Orca DPO Pairs (en) Orca 偏好对比数据 英文
HH-RLHF (en) Anthropic 人类反馈数据 英文
Nectar (en) 奖励模型训练数据 英文
Orca DPO (de) 德语 Orca 偏好对比数据 德语
KTO mixed (en) 英文混合偏好对齐数据 英文
3.1.2.2 构建数据集

可以使用如下工具构建用于微调的合成数据:

3.1.3 学习率

在这里插入图片描述
AdamW 优化器在训练开始时使用的初始步长(step size),它决定了每次参数更新的幅度:

  • 太大 → 损失震荡甚至发散;
  • 太小 → 收敛极慢,浪费算力;
  • 合适 → 快速且稳定地降低 loss。

默认值 5 × 10⁻⁵(即 0.00005),是 LLaMA / Baichuan / ChatGLM 等 7B~13B 模型做 SFT 时的社区常用起点。

调整技巧:

场景 推荐范围 调整思路
7B/13B 全参 SFT 1e-5 ~ 5e-5 先用 5e-5,观察 loss 曲线再微调
LoRA / QLoRA 1e-4 ~ 2e-4 可训练参数少,学习率通常放大 2-10 倍
继续预训练(Pre-Training) 2e-5 ~ 5e-5 数据量大,用较小 lr 防止灾难性遗忘
Reward Modeling 1e-5 ~ 3e-5 与 SFT 相近即可
PPO / DPO / KTO 1e-6 ~ 5e-6 RLHF 阶段通常再降一个量级

总结“默认 5e-5 先跑,LoRA 可放大到 1e-4,RLHF 再降 10 倍,看 loss 曲线随时改。”

3.1.4 训练轮数

在这里插入图片描述
设置 LaMa-Factory 完整地把整个数据集扫几遍 才结束训练,每完整扫一次数据集算 1 个 epoch(轮), 默认3 轮,适用于 7B-13B 模型在常见指令微调(SFT)数据集上的经验值。

设置技巧:

场景 推荐轮数 思路
小数据集(<1 万条) 3-10 轮 样本少,多扫几遍防止欠拟合
中等数据集(1-10 万条) 2-3 轮 默认 3 轮即可
大数据集(>50 万条) 1-2 轮 扫 1 轮已足够,避免过拟合与耗时
继续预训练(Pre-Training) 1 轮 数据量巨大,通常 1 轮即可
PPO/DPO/KTO 强化学习 1-2 轮 强化阶段数据集小,且需防止过度优化

总结“样本少多扫几轮,样本大扫 1 轮,默认 3 轮先跑,看 loss / eval 再减。”

3.1.5 最大梯度范数

在这里插入图片描述
最大梯度范数(max_grad_norm) 是一个用于 梯度裁剪(Gradient Clipping) 的超参数,当梯度的 L2 范数超过设定值时,自动将其缩放到该最大值以内,从而确保模型训练的稳定性。简单来说,它是一个“刹车机制”,避免模型在训练初期或数据波动较大时“失控”。

设置技巧(通常为 1.0,适用于大多数 Transformer 模型的训练场景):

场景 推荐值 思路
一般监督微调(SFT) 1.0 默认即可,适用于大多数情况
LoRA / QLoRA 微调 1.0 ~ 2.0 可训练参数少,梯度裁剪可以适当宽松
继续预训练(Pre-Training) 1.0 数据量大,保持默认稳定训练
PPO / DPO / KTO 强化学习 0.5 ~ 1.0 强化学习阶段梯度波动大,适当收紧
数据噪声大或模型复杂 0.5 若发现梯度爆炸,可尝试调小

总结默认 1.0 就够用,LoRA 可放宽到 2.0,强化学习或噪声大就调到 0.5。

3.1.6 最大样本数

在这里插入图片描述

最大样本数指的是每一个数据集(dataset 列表中的每一项)设置 “最多只读取多少条样本”。

3.1.7 计算类型

决定在训练/推理时,把模型权重、激活值、梯度放在哪种浮点精度里计算。

  • 精度越低 → 显存越小、速度越快;精度越高 → 数值越稳、误差越小

LaMa-Factory 下拉框给出 4 个选项:

选项 全称 位数 显存节省 数值误差 何时用
fp32 单精度 float32 32 bit 0 % 最小 研究/小模型,对精度要求极高
fp16 半精度 float16 16 bit ≈ 50 % 中等 老显卡 (Pascal/Volta) 不支持 bf16
bf16 bfloat16 16 bit ≈ 50 % Ampere/A100/H100 等现代卡,默认推荐
pure_bf16 纯 bf16(权重+优化器状态) 16 bit ≈ 75 % 显存极紧时;需框架/优化器支持(AdamW-bf16)

总结老卡 fp16,新卡 bf16,显存爆炸 pure_bf16,极致稳妥 fp32。

3.1.8 截断长度

在这里插入图片描述
把每个样本 分词(tokenize)后的最大 token 数 限制在这条线上,超长部分直接截断或丢弃,防止 OOM,也统一批次尺寸, 默认值 2048(即 2K tokens),与大多数 7B-13B 基座模型的原始训练长度对齐。设置技巧如下:

场景 推荐值 思路
原始短对话(单轮 < 512 token) 1024-2048 默认即可,浪费少
长文档/代码仓库 4096-8192 先确认 GPU 显存,再逐步上调
超长论文/书籍 16384-32768 需配合 RoPE 插值(如 dynamic、yarn)+ 量化,显存 ≥ 40 GB
继续预训练 与基座模型一致 如 Llama-2 原始 4096,可直接设 4096

注意事项 :

  1. 截断策略:默认「右侧截断」,可用 truncation_side=left 改变。
  2. 多轮对话:模板会把历史拼在一起,再整体截断;因此 cutoff_len 需 ≥ 最长完整对话长度。
  3. 若开启 packing(样本拼接),cutoff_len 仍是单条拼接后的最大长度,而非单条样本。

总结“cutoff_len 就是‘一条样本最多吃多少个 token’,短文本 2K 够用,长文本先卡显存再往上加。”

3.1.9 批处理大小

在这里插入图片描述
批处理大小指的是每个GPU处理的样本数量。在 每张 GPU 上,每一次前向-反向传播 要喂多少条样本(注意是“样本条数”,不是 token 数),默认值为2(保守值,7B 模型单卡 24 GB 也能起步)。设置技巧如下:

  1. 先看显存:
    batch_size ↑ → 显存 ↑ 近似线性。
  2. 再配梯度累积:
    全局有效 batch = per_device_train_batch_size × gradient_accumulation_steps × GPU 数。
  3. 常见组合举例(7B 模型,fp16/bf16,cutoff_len=2048):
GPU 显存 per_device_train_batch_size gradient_accumulation_steps 全局有效 batch
24 GB × 1 2 8 16
40 GB × 1 4 4 16
8×A100 80 GB 8 1 64
  1. 出现 OOM 时:
    先减 per_device_train_batch_size,再把 gradient_accumulation_steps 相应提高,保持全局 batch 不变。
  2. 推理/评估阶段:
    对应的参数叫 per_device_eval_batch_size,可比训练再大 2-4 倍,因为无需保存梯度和优化器状态。

总结“per_device_train_batch_size 是单卡一次吃几条;显存不够就改小它,靠梯度累积把总批量补回来。”

3.1.10 梯度累积

在这里插入图片描述
梯度累积指的是在显存有限、又想保持大全局批量的场景下,把一次完整梯度的计算拆成多步:

  1. 每步用较小的 per_device_train_batch_size 正常前向+反向,算出的梯度先累加(不立即更新权重)。
  2. 累加到指定步数后,再一次性做权重更新 & 优化器步进。
  3. 因此「虚拟全局批量」= per_device_train_batch_size × gradient_accumulation_steps × GPU 数

默认值为8(官方脚本常用折中值,单卡 24 GB 也能跑 7B 模型)。

快速调参公式 :

期望全局批量 = 32
GPU 数 = 1
per_device_train_batch_size = 2  →  gradient_accumulation_steps = 32 / (2 × 1) = 16

常见组合示例

场景 batch_size 梯度累积 全局批量
单卡 24 GB 2 8 16
单卡 40 GB 4 4 16
8×A100 8 1 64

总结“显存不够就把梯度累积调大,用时间换空间,保证总批量不变。”

3.1.11 验证集比例

在这里插入图片描述
在启动训练时,把所有样本按给定比例随机切出一部分作为验证集(dev set),用于

  • 每个 epoch 结束后计算验证损失 / 指标
  • 早停(early stopping)
  • 超参筛选(learning rate、LoRA rank 等)

填写技巧:

  • 0 → 不保留验证集,全程只跑训练集(适合一次性训练或已单独准备了验证文件)。
  • 0.05 → 5 % 数据做验证(常见做法:万条样本量级)。
  • 0.1 → 10 % 数据做验证(千条样本量级)。
  • 1 ~ 100 之间的整数会被自动当成百分比换算(写 5 与 0.05 效果相同)。

示例

总样本 验证集比例 验证集条数 说明
50 k 0.05 2.5 k 微调阶段常用,兼顾速度与评估
1 M 0.01 10 k 预训练时 1 % 已足够
500 0.2 100 数据极少时,可适当放大比例

注意事项

  • validation_split 参数互斥:若已手动指定验证文件,请把 eval_ratio 设为 0,否则会二次切分。
  • 随机种子固定后,切分结果可复现。
  • 开启 streaming 时,eval_ratio 会先把总量截断再切分(不影响训练流式读取)。

总结 “验证集比例就是‘抽几成数据当考试卷’;不考试就填 0,想早停就填 0.05~0.1。”

3.1.12 学习率调节器

在这里插入图片描述
学习率调节器控制训练过程中学习率随步数(或 epoch)如何变化的“调度器”。不同任务、不同阶段的收敛速度差异很大,合理选调度器能显著缩短训练时间、提高最终指标。LaMa-Factory 下拉框给出 11 种常用策略:

选项 中文简称 典型曲线 适用场景一句话
linear 线性衰减 从初始值线性降到 0 通用默认,尤其 SFT
cosine 余弦退火 先慢→快→慢,平滑降到 0 需要平滑收敛,视觉/NLP 都常用
cosine_with_restart 余弦+重启 余弦降到 0 后立刻回到初始值再循环 多轮重启,避免陷入局部极小
polynomial 多项式衰减 按 (1-当前步/总步)^power 下降 想自己控制下降曲率
constant 常数 全程不变 小数据快速调试或冻结层
constant_with_warmup 常数+预热 先线性升到初值,再保持常数 冷启动大 batch,防止震荡
inverse_sqrt 逆平方根 ∝ 1/√step Transformer 原始论文,适合预训练
reduce_lr_on_plateau plateau 自动降 监控验证指标,不提升就降 lr 训练-验证同步调优
cosine_with_min_lr 余弦到最小值 余弦降到指定最小值而非 0 防止过度衰减
warmup_stable_decay 三段式 预热→恒定→指数衰减 大模型继续预训练常用

总结“默认 linear 最稳;想更平滑用 cosine;大模型预训练先试 inverse_sqrt;验证早停 plateau。”

3.2 其它参数设置

3.2.1 日志间隔

在这里插入图片描述
控制在训练过程中,在终端/TensorBoard/WandB 等日志里输出一次损失、学习率、耗时等关键指标。默认值为5,表示每 5 个更新步打印一次日志。

设置技巧:

场景 推荐值 思路
小样本、调试阶段 1 ~ 5 日志密集,方便快速定位问题
中等规模训练 10 ~ 50 兼顾可读性与磁盘/网络 IO
大规模多机训练 100 ~ 500 减少日志刷屏,提高训练效率
远程日志(WandB) 50 ~ 100 避免频繁网络请求造成延迟

总结“日志间隔就是‘隔几步报一次数’;调试写小一点,正式训练写大一点。”

3.2.2 保存间隔

在这里插入图片描述
训练过程中,每经过多少个「参数更新步」就把当前模型权重、优化器状态、学习率调度器状态等打包成一个**检查点(checkpoint)**保存到磁盘。
默认值:100(即每 100 个更新步存一次)。

设置技巧:

场景 推荐值 理由
单卡 7B 快速实验 50 ~ 100 训练时间短,磁盘占用可控
多机多卡大模型 200 ~ 500 减少 I/O 竞争,节省磁盘
长时间任务(>1 天) 1000 防止因 I/O 频繁拖慢训练
云端训练(带宽计费) 1000 ~ 2000 降低存储/流量费用
调试阶段 20 ~ 50 方便回滚定位问题

提示

  • save_total_limit 连用可自动删除旧 checkpoint,只保留最近 N 个。
  • 若同时开启 save_strategy=epochsave_steps 会被忽略,改为按 epoch 保存。
  • 保存间隔 ≠ step 间隔;若 gradient_accumulation_steps=8,则每 100 个更新步 ≈ 800 个前向-反向小步。

总结“save_steps 就是‘隔几步存一次盘’;调试写 50,久跑写 1000,别忘了配合自动清理旧 checkpoint。”

3.2.3 预热步数

在这里插入图片描述
在训练刚开始的若干步内,把学习率从一个极小值(或 0)线性增长到设定的初始学习率,避免因初始梯度爆炸导致训练不稳定。 默认值为0,表示 不预热,直接使用恒定学习率。

设置技巧

场景 推荐预热步数 思路
全参数 SFT(7B/13B) 0 ~ 100 数据集小或学习率≤5e-5 时可不开
大批量训练(global batch ≥ 512) 100 ~ 500 大 batch 梯度方差大,预热稳
继续预训练(Pre-Training) 总步数的 1 %~3 % 例:100 k 步总步数 → 1 k~3 k 步
LoRA / QLoRA 50 ~ 200 可训练参数少,但学习率较大,预热更安全
RLHF(PPO/DPO/KTO) 100 ~ 300 强化阶段数据噪声高,预热可降低初期震荡

换算公式

  • 预热步数 ≈ 全局 batch_size × 1~3 epoch 的 1 %~5 %(经验值)。
  • 若填 warmup_ratio=0.1,则自动按总训练步数 10 % 计算,无需手动换算。

总结“预热步数就是‘先慢慢踩油门’;小任务写 0,大 batch 或预训练写几百到几千步。”

3.2.4 NEFTune 噪声参数

在这里插入图片描述
在训练阶段给**输入 token 的嵌入向量(embedding)**额外叠加一层均匀分布噪声,起到「数据增强」与「正则化」的效果,可轻微提升模型鲁棒性与泛化能力。
值为 0:完全关闭 NEFTune。
值 > 0:噪声强度 = neftune_noise_alpha,典型区间 5~15。数值越大,扰动越强。

如何设置

场景 推荐值 说明
默认/首次实验 0 关闭,先复现基线
通用 SFT(7B/13B) 5~10 小幅度增强即可
小数据集(<1 万条) 10~15 数据不足时提高鲁棒性
继续预训练 0~5 大规模文本通常不需要额外噪声
实验对比 0 vs 5 vs 10 看验证集指标差异再拍板

总结: “NEFTune 噪声就是给 token embedding 撒点胡椒面;0 为关,5-10 增稳,15 以上可能糊味。”

3.2.5 额外参数

在这里插入图片描述
通过一段 JSON 字符串,把任何官方 Trainer / Accelerate / DeepSpeed 支持、但 WebUI 没有显式露出的小众超参数,一次性塞进训练器,避免改源码。 默认值:

{"optim": "adamw_torch"}

常见可填字段示例 :

场景 示例 JSON 说明
换优化器 {"optim": "adamw_8bit"} 使用 bitsandbytes 的 8-bit AdamW,省显存
开 DeepSpeed ZeRO-3 {"deepspeed": "./ds_config_zero3.json"} 指定 DeepSpeed 配置文件路径
梯度裁剪阈值 {"max_grad_norm": 1.0} 若 WebUI 没暴露,可在此覆盖
关闭 tqdm 进度条 {"disable_tqdm": true} 日志更干净
多卡 NCCL 超时 {"dataloader_timeout": 1800} 避免慢节点导致训练挂起
混合精度开关 {"fp16": false, "bf16": true} 强制 bf16 而不用 fp16

使用规则

  1. 必须是合法 JSON,键值对用双引号。
  2. 与 WebUI 已提供的参数同名时,extra_args 优先级更高(覆盖)。
  3. 支持嵌套:
   {
     "optim": "adamw_torch",
     "lr_scheduler_kwargs": {"num_cycles": 2},
     "report_to": ["wandb", "tensorboard"]
   }
  1. 若 JSON 格式非法,训练器会直接报错退出。

总结“extra_args 就是给训练器开小灶:写合法 JSON,想塞啥就塞啥,优先级最高。”

3.2.6 序列打包

在这里插入图片描述
把多条 较短的样本 按顺序拼接成一条条「等长序列」,直到塞满 cutoff_len,从而

  • 减少 Pad token,提高 GPU 利用率;
  • 隐式地把「全局 batch 大小」放大,训练更快;
  • 对显存占用几乎没有额外开销(因为是连续内存)。

开关方式:

  • 勾选(true):启用打包,训练器会按 cutoff_len 自动把样本粘成长条。
  • 不勾选(false):传统做法——每条样本独立 pad 到 cutoff_len,会产生大量无效填充。

注意:

  1. 仅支持 无监督或 causal-LM 任务(Pre-Training、SFT 都可); 对于需要「样本边界」的任务(分类、NER 等)不要开启。
  2. 若样本本身很长(> cutoff_len),打包逻辑会自动跳过超长样本。
  3. group_by_length 互斥:后者按长度分组减少 pad,而 packing 直接拼接,两者只能二选一。
  4. 开启后日志里会显示 Packed samples: X → Y,可直观看到利用率提升。

总结“序列打包就是‘把短句拼成长句’,省 pad 提速,因果 LM 全开,边界敏感任务别开。”

3.2.7 无污染打包

在这里插入图片描述

在启用序列打包(packing)的基础上,进一步优化打包逻辑,避免因打包导致的交叉注意力污染。 在传统的打包中,多条短样本拼接后,模型可能会对不同样本之间的内容产生不合理的注意力(例如,把前一条样本的结尾与后一条样本的开头错误关联)。 而「无污染打包」通过特殊的处理方式(例如在样本之间插入特殊的分隔符或调整注意力掩码),确保每个样本的注意力仅限于其原始内容,不会被其他样本干扰。

开关方式

  • 勾选(true):启用无污染打包,训练器在打包时会自动处理交叉注意力问题。
  • 不勾选(false):使用普通的打包逻辑,可能会有交叉注意力污染。

注意:

  1. 仅在启用 序列打包(packing) 时才生效。
  2. 适用于所有支持打包的任务(如 Pre-Training、SFT)。
  3. 会略微增加打包的计算开销,但通常对性能影响不大。
  4. 若样本本身很长(> cutoff_len),无污染打包依然会跳过超长样本。

总结“无污染打包就是在拼长句时‘隔开不同样本’,避免交叉注意力,打包时必开。”

3.2.8 学习提示词

在这里插入图片描述
在监督微调(SFT)阶段,决定是否对提示词(prompt)部分计算损失

  • 不勾选(默认 false)
    对整个序列(提示词 + 回答)都计算交叉熵损失,提示词也被迫“学习”如何复制自己,浪费算力并可能轻微降低回答质量。
  • 勾选(true)
    仅在 回答(response) 的 token 上计算损失;提示词部分被掩码(mask)掉,不参与梯度回传,训练更快、效果更聚焦。

使用条件

  1. SFT 阶段 生效,Pre-Training / RM / RLHF 等阶段无意义。
  2. 需要数据集字段结构清晰:至少包含 instruction / input / output(或 prompt / response),框架才能自动区分提示词与回答。
  3. packing/padding 兼容:掩码会在打包或对齐后自动应用到对应 token。

总结“SFT 时勾选 ‘学习提示词’=给 prompt 加遮罩,只让模型学回答,不学废话。”

3.2.8 不学习历史对话

在这里插入图片描述
在监督微调(SFT)阶段,仅对多轮对话中的最后一轮计算损失;前面所有历史轮次(包括用户和助手的对话)都被当成「纯 prompt」而被掩码,不贡献梯度。

  • 勾选(true):只让模型“学习”如何生成最后一轮的回复,历史对话全部忽略。
  • 不勾选(false,默认):对整个多轮序列都计算损失,历史轮也参与训练。

使用场景 :

场景 建议 原因
多轮 ShareGPT 类数据 可勾选 减少“自我模仿”带来的冗余训练,聚焦最新回复
单轮指令数据 无影响 数据本身只有一轮
需要保持对话一致性 不勾选 让模型学会维持上下文连贯

注意事项 :

  1. 仅在 SFT 阶段 生效,且需数据集含 conversations 字段或 history+output 结构。
  2. mask_prompt 同时勾选时,先按 only_last_turn 截断,再对剩余 prompt 部分加掩码,双重节省计算。
  3. 若开启 packing,框架会在拼接后自动为每条样本定位最后一轮并加掩码,不会破坏边界。

总结“不学习历史对话”就是告诉模型:前面的聊天都算背景,只练最后一句话。

3.2.9 更改词表大小

在这里插入图片描述
当需要扩充(或缩减)模型词表时,一次性把

    1. 分词器(tokenizer)的词汇表
    1. 模型嵌入层(lm_head + embedding)
      调整为新的词表大小,并随机初始化新增/删除的 token 权重,确保训练能正常进行。

常见场景

  • 新增中文/多语言 token:原 Llama 词表 32 k → 扩到 50 k 以提升中文压缩率。
  • 添加特殊符号:如 <|im_start|><|plugin|> 等 prompt 占位符。
  • 删除冗余 token:缩减词表以减少显存/计算(极少用)。

如何操作

  1. WebUI 文本框直接填目标词表大小,例如
50000
  1. 需要先把扩展后的 tokenizer 文件(vocab.json / tokenizer.model / added_tokens.json 等)放到模型目录或指定路径;LaMa-Factory 会在启动时读取并校验。
  2. 训练脚本会自动调用 model.resize_token_embeddings(new_size) 完成嵌入层尺寸调整;新增 token 的权重默认随机初始化,需在后续训练中继续学习。

注意事项

  • 只能增大或减小,不能重复 resize 到同一尺寸。
  • 扩词表后,embedding 参数量线性增加,显存占用也相应增加;可配合 LoRA 或量化抵消。
  • 如果仅添加少量特殊 token,推荐用 add_tokens 而非直接改词表大小;WebUI 另有「添加特殊 token」字段,优先级更高。

总结“resize_vocab 就是一次性把字典和对应权重拉长或剪短;扩中文词表到 50 k 前,先把新 tokenizer 文件准备好。”

3.2.10 使用 LLaMA Pro

在这里插入图片描述
开启后,模型会把原始权重完全冻结,只让**“块扩展(block expansion)”**新增的那部分参数参与训练。

  • 本质上是 “参数高效微调” 的另一种实现:
      • 在现有 Transformer 每层之间插入若干全新的 FFN / Attention Block(通常 2–8 个)。
      • 旧参数不动,新增参数量仅占总量的 5 %–20 %,显存占用接近 LoRA,但表达能力更强。
  • 适用于:
      • 大模型(30 B↑)全参数微调显存不够,又希望比 LoRA 获得更好的下游性能。
      • 需要保留旧知识、同时注入新领域知识的场景(继续预训练或任务特化)。

如何启用

  1. 先准备好 LLaMA-Pro 结构配置文件config.json 里含 num_additional_blocks 等字段)或官方提供的扩展权重。
  2. WebUI 勾选 “使用 LLaMA Pro”;框架会自动:
      • 冻结原始层参数(requires_grad=False);
      • 仅把新增 Block 的权重设为可训练;
      • 学习率、优化器、调度器与 LoRA 相同即可。

注意事项 :

  • lorafreeze 互斥:三者只能选其一。
  • 扩展块默认随机初始化,需足够训练步数才能收敛。
  • 若后续想合并回原模型,官方脚本会把新增 Block 权重与旧权重 concat,生成完整 checkpoint。

总结“勾上 LLaMA Pro = 把模型原地加宽,只练新砖不动老墙,大模型高效微调的折中方案。”

3.2.11 启用思考模式

在这里插入图片描述
推理/对话阶段,让模型先输出一段「思考过程」(Chain-of-Thought),然后再给出正式回答。

  • 勾选(true):
    系统会在用户 prompt 后自动拼接“Let’s think step by step.”等触发语,并把模型生成的思考内容一并返回,前端可做隐藏/展开。
  • 不勾选(false,默认):
    直接输出最终答案,不暴露中间思考。

典型效果 :

  • 勾选后,模型在数学推理、逻辑题、代码纠错等任务上准确率通常↑;
  • 响应长度↑,首 token 延迟↑;
  • 前端若支持折叠,可保持用户体验一致。

总结 “启用思考模式就是让模型先‘自言自语’再答问题,逻辑更稳,字也更多。”

3.2.12 启用外部记录面板

在这里插入图片描述

指定把训练过程中的标量指标(loss、learning_rate、eval_accuracy…)和媒体(模型图、样本预测)实时上传到哪个外部可视化平台,方便远程监控、对比实验。LaMa-Factory 下拉框提供 6 个选项:

选项 平台名称 一句话特点
none 不启用 本地终端/日志文件即可,不连外网
wandb Weights & Biases 社区最流行,支持曲线、表格、模型版本管理
mlflow MLflow 与 Spark / sklearn 生态无缝,本地部署简单
neptune Neptune.ai 大模型友好,支持海量实验并行展示
tensorboard TensorBoard 无需注册,本地浏览器即可查看
all 全开 同时向已配置的所有平台推送

使用步骤

  1. 选好平台 → 安装对应库:
pip install wandb   # 或 mlflow / neptune-client / tensorboard
  1. 首次使用按提示登录(wandb login / mlflow ui / neptune init)。
  2. 训练启动后,指标将自动上传;在 WebUI 的「Run Name」里可自定义实验名。
  3. 若想关闭,可随时把下拉框切回 none 并重启训练。

总结“想让实验曲线飞云端,选 wandb;想本地看图,选 tensorboard;都不想就连 none。”

2.2 部分参数微调设置

在这里插入图片描述

2.2.1 可训练层数

在这里插入图片描述
Freeze 微调 模式下,只放开模型最末端或最前端的若干层进行训练,其余权重全部冻结。

  • 正数 +N:从最后一层往前数,解冻 N 层(默认 +2 即最后 2 层)。
  • 负数 -N:从第一层往后数,解冻 N 层(-2 即最前 2 层)。
  • 0:完全冻结,仅用于推理或特征提取。

典型用法

场景 设置示例 说明
想轻量微调大模型 +2 仅训练最后 2 层,显存占用接近 LoRA
研究早期特征 -3 只训练最前 3 层,观察低层表征变化
全冻结做评估 0 不更新任何权重,纯粹跑验证

总结“正数从末尾解冻,负数从开头解冻;填 0 全冻,填 2 只练最后两层。”

2.2.2 可训练模块

在这里插入图片描述
在「Freeze」或「LoRA」微调模式下,进一步 精确指定 哪些模块(由网络层名称匹配) 参与训练,其余权重全部冻结。

  • 填写内容是 PyTorch 模块名正则表达式,多个名称用英文逗号隔开。
  • 匹配到的层及其内部全部参数都会被设为可训练,未匹配到的全部冻结。

常见填写示例

场景 示例填写 解释
只训练 Llama 的 MLP 部分 mlp 匹配所有含 mlp 的层(如 model.layers.*.mlp
LoRA 仅训练 Attention 与 MLP q_proj,v_proj,k_proj,o_proj,gate_proj,up_proj,down_proj 典型 7B Llama LoRA 层
ChatGLM 只训练 query_key_value query_key_value,dense 匹配对应模块
正则同时匹配多层 .*\.attention\.dense,.*\.mlp\.up_proj 用正则一次匹配多条

使用步骤:

  1. 先用 python -c "from transformers import AutoModel; m=AutoModel.from_pretrained('xxx'); [print(n) for n, _ in m.named_modules()]" 打印模型结构,找到想要解冻的模块名。
  2. 把名称或正则抄进 WebUI 输入框,逗号分隔即可。
  3. 若与 trainable_layers 同时给出,以 trainable_modules 为准(更细粒度)。

总结“trainable_modules 就是‘点名’:只让名字匹配的层当学生,其它层全部挂科。”

2.2.3 额外模块

在这里插入图片描述
trainable_layerstrainable_modules 之外,再补充一批“零散但重要”的权重,使它们也参与训练。

  • 典型目标:LayerNorm、embed_tokens、lm_head、位置编码、bias 项、router 等不属于 Transformer 隐藏层的模块。
  • 填写格式:用英文逗号分隔模块名称正则表达式,与前面两项规则一致。
  • 可空:不填时等价于“无额外模块”。

常见示例 :

目的 填写示例 解释
解冻词嵌入 embed_tokens 让 tokenizer 新增 token 的权重可训练
解冻输出头 lm_head 配合词表扩展或 LoRA 输出层
解冻 LayerNorm norm,layer_norm 恢复分布偏移,微调更稳
解冻全部 bias .*bias 极小参数量,可与 LoRA 并用
MoE 模型解冻 router gate 让专家路由权重参与更新

总结“额外模块就是给隐藏层以外的‘小零件’开绿灯;不填没事,想动 embedding、lm_head 或 bias 就写进来。”

2.3 LoRA 参数设置

在这里插入图片描述

2.3.1 LoRA秩

在这里插入图片描述
决定 LoRA 低秩分解中两个矩阵(A、B)的“中间维度”。

  • rank↑:表达力↑,但参数量与显存↑,训练速度↓。
  • rank↓:更轻量,可能欠拟合。

默认值:8(7B/13B 模型做通用 SFT 的社区常用起点)。

场景 推荐 rank 备注
7B/13B 通用 SFT 8–16 默认 8 先跑,效果不够再加大
30B/70B 大模型 32–64 大模型容量大,rank 太小易欠拟合
中文领域特化 16–32 需要更多自由度学新词、新句式
极小显存(6 GB) 4–8 先保收敛,再考虑提升 rank
继续预训练 64–128 任务复杂,需更大表达空间

总结“LoRA 秩就是低秩矩阵的‘宽度’:8 通用,16 提效,32 大模型,64 以上继续预训练。”

2.3.2 LoRA 缩放系数

在这里插入图片描述控制 LoRA 低秩适配器输出在加回原权重前的“放大倍数”。

公式:ΔW = (lora_alpha / lora_rank) ⋅ BA

  • 值越大,LoRA 的影响越强;
  • 值越小,LoRA 的影响越弱。

默认值:16(与 rank=8 配合时实际放大 2 倍)。

经验值速查:

lora_rank 常用 lora_alpha 实际放大倍数 说明
4 16 小 rank 需高 alpha 补强度
8 16 默认组合,平衡
16 16 线性缩放,稳定
32 32 大 rank 同步放大
64 64 继续预训练常用

总结“alpha 与 rank 同量级最稳;显存紧就降 rank、保持 alpha 不变或略降,防止过拟合。”

2.3.3 LoRA 随机丢弃

在这里插入图片描述
在 LoRA 微调阶段,对低秩矩阵 A 和 B 的乘积结果应用 Dropout,防止过拟合。

  • 值为 0:不丢弃(默认)。
  • 值 > 0:按给定概率随机将 LoRA 增量置零,仅影响训练,不影响推理。

经验值

场景 推荐值 说明
数据量小 / 易过拟合 0.05 – 0.1 轻微正则化
数据量中等 0.0 – 0.05 默认 0 即可
数据量极大 0.0 无需额外正则

总结“LoRA dropout 就是给低秩增量随机‘失忆’,防过拟合;默认 0,数据少可调到 0.1。”

2.3.4 LoRA+ 学习率比例

在这里插入图片描述
在 LoRA+ 微调时,为矩阵 B 额外乘上一个学习率放大倍数,使得

lr(B) = lr(A) × loraplus_lr_ratio

从而让 B 用更高学习率更新,而 A 保持原学习率。

  • 根据 LoRA+ 论文 ,这种非对称更新可带来 最多 2× 收敛加速1–2 % 计算增益

默认值:16(社区实践常用起点 )。

设置建议

场景 推荐比例 说明
首次尝试 16 论文与社区经验值
保守调参 4–8 稳定性优先,效果略慢但风险低
激进大模型 32 70 B+ 模型可再放大,需监控 loss 爆炸
搭配其他优化器 0 使用 D-Adaptation、Prodigy 等自适应优化器时需设为 0(互斥)

总结“LoRA+ 比例就是给矩阵 B 的学习率加‘油门’,默认 16,想稳就 4–8,大模型可 32。”

2.3.5 新建适配器

在这里插入图片描述在已有 LoRA 适配器(checkpoint)之上,再叠加一个全新、随机初始化的 LoRA 适配器,实现“适配器套娃”或“任务增量”:

  • 旧适配器权重保持冻结,继续为新任务训练新适配器;
  • 避免覆盖原任务知识,适合多任务/多领域持续学习;
  • 推理时可通过切换 adapter_name 快速在不同适配器间热插拔。

使用方式

步骤 说明
1 在 WebUI 勾选「新建适配器」。
2 在「适配器路径」里填写旧适配器目录(含 adapter_config.json / adapter_model.bin)。
3 框架自动把旧 adapter 设为只读,并新建同名目录下带 _new 后缀的新 adapter,内部随机初始化。
4 训练结束后,通过 --adapter_name_or_path old_adapter,new_adapter 可在推理时组合或单独调用。

总结“勾上新建适配器,就是在老 LoRA 上再盖一层‘新被子’,旧的不动,只练新的。”

2.3.6 使用 rslora

在这里插入图片描述
勾选后,框架会采用 秩稳定 LoRA(rsLoRA) 的缩放策略,把传统 LoRA 的

ΔW = (lora_alpha / lora_rank) · B·A

改为

ΔW = (lora_alpha / sqrt(lora_rank)) · B·A

优势 :

  • lora_rank 较大时,梯度不再因分母过大而消失,训练更稳定;
  • 允许使用更高的 rank(32、64 甚至 128)而不崩溃,实验显示在 rank ≥ 16 时仍能带来额外性能提升 。

使用方式 :

  1. WebUI 勾选 “使用 rslora”
  2. 无需改代码,框架自动替换缩放因子;
  3. 建议同步把 lora_alpha 设得与 lora_rank 同量级(例如 rank=32 ⇒ alpha=32),再按需要微调学习率即可 。

总结“勾上 rslora,就能把缩放因子从 ‘除 rank’ 换成 ‘除 √rank’,高秩也稳!”

2.3.7 使用 DoRA

在这里插入图片描述
勾选后,LoRA 不再直接学习「ΔW」,而是把原始权重矩阵 W 先分解为 幅度向量 m方向矩阵 V,再对方向部分加 LoRA 低秩扰动:

W = m ⊙ V  
ΔW = ΔV (LoRA)  

优势:

  1. 训练稳定性更高,尤其在大 rank、长序列或强化学习任务中。
  2. 推理阶段可把幅度向量与方向矩阵融合回原始权重,零额外延迟
  3. 与量化、梯度累积、DeepSpeed ZeRO 完全兼容。

使用方式 :

  1. WebUI 勾选 “使用 DoRA”
  2. 保持原有 lora_rank / lora_alpha 即可,无需额外超参;
  3. 若想关闭,只需取消勾选,权重即回退到普通 LoRA。

总结“DoRA 把权重拆成‘方向+大小’,只练方向,更稳更快,勾上即用,无推理成本。”

2.3.8 使用 PiSSA

在这里插入图片描述
把预训练权重矩阵 W 做奇异值分解(SVD),只保留前 r 个主奇异值/向量作为 初始化 的 LoRA A、B 矩阵,其余信息冻结。

效果

  • 相比随机初始化的 LoRA,收敛更快(步数↓30 %–50 %)
  • 同样秩下,下游指标↑0.5–2 %(尤其 rank ≤ 16)

代价: 首次启动需额外一次 SVD 计算(可在 CPU 上完成,耗时几分钟~十几分钟)。

使用方式 :

  1. WebUI 勾选 “使用 PiSSA”
  2. 保持 lora_rank 不变即可;框架自动:
    • 对指定层做 SVD → 取前 r 奇异值 → 初始化 A、B
    • 冻结剩余奇异向量
  3. 后续训练与普通 LoRA 完全一致;推理时可合并权重。

总结“PiSSA = 把预训练权重的主成分直接拿来当 LoRA 初值,起跑更快,效果更稳,勾上即可。”

2.3.9 LoRA 作用模块

在这里插入图片描述
告诉框架“把 LoRA 插到哪些层里”,只有匹配到的模块才会被替换成 LoRA 形式;其余权重保持冻结或原始形式。

填写格式:

  • 模块的 注册名正则表达式,多个名称用英文逗号隔开,不含空格
  • 留空表示使用当前模型的默认列表(不同模型默认不同)。

常见模型的默认/推荐填写

模型系列 推荐填写示例 说明
Llama-2 / CodeLlama q_proj,v_proj,k_proj,o_proj,gate_proj,up_proj,down_proj 覆盖全部 Attention & MLP
Baichuan-2 W_pack,o_proj,gate_proj,up_proj,down_proj Baichuan 把 qkv 打包成 W_pack
ChatGLM-3 query_key_value,dense,dense_h_to_4h,dense_4h_to_h GLM 的命名风格
Qwen-7B c_attn,c_proj,w1,w2 Qwen 内部命名
Bloom query_key_value,dense,dense_h_to_4h,dense_4h_to_h 与 GLM 类似
只想做 qkv 实验 q_proj,v_proj,k_proj 最小集合,显存最省

如何查看自己模型的可用名

from transformers import AutoModel
model = AutoModel.from_pretrained("your-model")
for name, _ in model.named_modules():
    print(name)

把想要加 LoRA 的层名复制进来即可。

总结“LoRA 作用模块就是‘点名’:把要插低秩 Adapter 的层名写进来,逗号隔开,不写就按模型默认。”

2.3.10 附加模块

在这里插入图片描述
在已经指定了 LoRA 作用模块(lora_target)之外,再额外放开一些层或组件参与训练,它们将不采用 LoRA 低秩分解,而是全参数更新

  • 填写的仍是模块名称或正则表达式,多个用英文逗号分隔。
  • 这些模块与 LoRA 层同时生效:前者全量可训,后者保持低秩,可看作“LoRA + 少量全参”的混合微调。

常见填写示例:

目的 示例填写 解释
让 LayerNorm 也一起更新 norm,layer_norm 低秩之外顺带调分布
让输出头(lm_head)全参 lm_head 词表扩充后一起训练
让嵌入层全参 embed_tokens 新 token 直接更新,不经过 LoRA
让 bias 全部可训 .*bias 几乎不占显存,又能微调细节
MoE 模型更新 router gate 专家路由不插 LoRA,直接全参

总结“附加模块就是给 LoRA 之外的少数关键层开‘全参绿灯’,写名字即可,与低秩层井水不犯河水。”

2.4 RLHF 参数设置

在这里插入图片描述

2.4.1 Beta 参数

在这里插入图片描述
DPO(Direct Preference Optimization)KTO(Kahneman-Tversky Optimization) 等偏好对齐损失函数中,控制对「偏好差异」的惩罚强度。

  • 数值越大:模型对“chosen vs rejected”差异越敏感,训练更保守,但可能过拟合;
  • 数值越小:差异惩罚更宽松,训练更激进,可能生成更多样但风险更高的回答。

默认值

  • DPO:0.1
  • KTO:0.1

经验区间:

任务 推荐 β 说明
通用对话 DPO 0.1–0.5 默认 0.1 已足够
安全对齐 0.5–1.0 更强惩罚,减少有害输出
创意写作 0.01–0.1 允许更大差异,鼓励多样性
KTO 0.1–0.2 与 DPO 类似,视正负样本比例微调

总结“β 就是 DPO/KTO 的‘紧箍咒’:0.1 通用,想更保守就 0.5,要放开就 0.01。”

2.4.2 Ftx gamma

在这里插入图片描述
RLHF(PPO、DPO、KTO 等) 或某些混合损失函数里,给 SFT(监督微调)损失 项分配一个权重系数,用于平衡「偏好对齐」与「原始指令遵循」这两股信号。

  • 公式示例(DPO 混合损失):
      Loss = β · DPO_loss + γ · SFT_loss
      其中 γ 即 Ftx gamma。
  • 值越大,模型更偏向保持原有指令遵循能力;值越小,侧重偏好对齐。

默认值 0(即不额外引入 SFT 损失,仅用偏好损失)。

经验值 :

场景 推荐 γ 说明
纯 DPO / KTO 0 默认即可
混合损失(避免对齐后指令能力下降) 0.1–1.0 逐步增大,监控指令评测集指标
强化学习阶段继续 SFT 0.5–2.0 在 reward 信号噪声大时,用 SFT 损失做正则
继续预训练 + RLHF 1.0–5.0 防止大规模偏好数据淹没通用知识

总结“Ftx gamma 就是给 SFT 损失‘加秤’:0 只对齐,1 左右保指令,5 以上防灾难遗忘。”

2.4.3 损失类型

在这里插入图片描述
指定在 DPO / KTO / ORPO / SimPO 等偏好对齐阶段 实际采用的 损失函数公式,直接影响模型如何比较「chosen」与「rejected」样本的优劣。

选项 全称 / 核心思想 场景一句话
sigmoid DPO-sigmoid(标准) 最常用,默认即可
hinge DPO-hinge(合页损失) 想更严格地拉开 chosen-rejected 差距
ipo IPO(Identity-Preserved Optimization) 防止过拟合,收敛更稳
kto_pair KTO-pair(Kahneman-Tversky) 正负样本成对出现时用
orpo Odds-Ratio Preference Optimization 无需参考模型,单模型即可对齐
simpo SimPO(Simple Preference Optimization) 简化的无参考模型损失,训练更快

使用提示

  • 只有训练阶段为 DPO / KTO / ORPO / SimPO 时该参数才生效。
  • 选错损失类型通常不会报错,但可能导致指标下降或训练不收敛。
  • 若不确定,优先 sigmoid;想实验无参考模型可试 orposimpo

总结“损失类型就是‘比较优劣的尺子’:DPO 用 sigmoid,无参考模型用 orpo/simpo,想稳一点用 ipo。”

2.4.4 奖励模型

在这里插入图片描述
PPO 强化学习阶段,告诉训练器去 哪里加载为当前任务专门训练好的奖励模型

  • 它必须是一个 LoRA 适配器目录(含 adapter_config.jsonadapter_model.bin),而不是完整权重。
  • 路径可以是
    本地绝对/相对路径
    ./saves/qwen-7b-rm-lora
    
    Hugging Face Hub 上的 adapter 仓库
    trl-lib/llama-7b-hh-rm-adapter
    

使用注意

  1. 奖励模型必须与 策略模型(Actor)同架构(同 tokenizer、同隐藏层尺寸)。
  2. 若路径留空,PPO 训练会报错或退回到虚拟奖励(仅用于冒烟测试)。
  3. 如果奖励模型是 完整权重(非 LoRA),需先用 peft.get_peft_model 再保存为 adapter 后才能填在此处。

总结“奖励模型就是填 LoRA 奖励适配器的地址,本地或 Hub 都行,PPO 用它来打分。”

2.4.5 归一化分数

在这里插入图片描述
在 PPO 的每一次 rollout 后,把奖励模型给出的原始奖励分数均值-方差标准化(减去 batch 均值再除以 batch 标准差),使奖励分布近似 N(0,1)。

  • 勾选(true)
    • 奖励尺度统一,避免不同 batch 间量级差异导致策略更新震荡;
    • 默认推荐,尤其当奖励模型输出范围不稳定时。
  • 不勾选(false)
    • 使用原始奖励数值,要求奖励模型已校准到合理范围;
    • 若奖励绝对值过大/过小,可能导致梯度爆炸或训练无进展。

总结“归一化分数就是给奖励打 z-score,true 保稳,false 省事但要求奖励模型已校准。”

2.4.6 白化奖励

在这里插入图片描述
在 PPO 训练中,把奖励模型给出的原始奖励进一步做 白化处理(Whiten):

  • 先减去当前 batch 的均值;
  • 再除以 batch 标准差;
  • 可选地加入极小 ε 防止除零。

结果使奖励分布近似 N(0,1),消除不同 prompt 或 batch 间尺度差异,提升梯度稳定性。

开关方式:

  • 勾选(true):启用白化,推荐在奖励幅度差异大或 prompt 长度分布广的场景。
  • 不勾选(false):保留原始奖励尺度,适合已校准的奖励模型或与 normalize_reward 二选一。

总结“白化奖励就是‘标准化 z-score’,开 true 让奖励更稳,关 false 用原始尺度。”

2.5 多模态参数设置

在这里插入图片描述

2.5.1 冻结视觉编码器

在这里插入图片描述在多模态模型(如 LLaVA、Qwen-VL、MiniGPT-4 等)里,锁定视觉编码器(Vision Encoder / CLIP-ViT)的全部权重,使其在训练过程中不接收梯度、不更新参数

  • 勾选(true):
    ‑ 视觉编码器完全冻结,仅训练语言模型或新增的投影层/LoRA,大幅节省显存与计算。
    ‑ 适用于 图文对齐已充分、只需微调语言侧的场景。
  • 不勾选(false,默认):
    ‑ 视觉编码器随语言模型一起训练,可学习更细粒度的图文特征,但显存与耗时显著增加。

总结“冻结视觉编码器就是把图像侧‘锁死’,只让文本侧继续上课,省显存、提速度。”

2.5.2 冻结多模态投影器

在这里插入图片描述在多模态模型(如 LLaVA、Qwen-VL 等)里,锁定“视觉 → 语言”映射层(通常是一个或若干线性/MLP 投影器)的参数,使其在训练过程中 不更新

  • 勾选(true):
    – 投影器保持预训练权重,只训练语言模型或 LoRA,显存占用更小;
    – 适合 图文对齐已较好、仅需调整语言侧的场景。
  • 不勾选(false,默认):
    – 投影器随语言模型一起训练,可进一步优化视觉特征与文本空间的匹配,代价是显存和时间增加。

总结“冻结投影器就是把‘图像转文字’的桥梁锁死,只让文本端继续微调,省显存、提速度。”

2.5.3 冻结语言模型

在这里插入图片描述
在多模态模型(如 LLaVA、Qwen-VL 等)中,锁定语言模型(LLM 主干)的全部权重,使其在训练过程中不接收梯度、不更新参数

  • 勾选(true):
    – 仅训练视觉编码器、投影器或新增适配器,用于视觉端微调图文对齐校准
    – 显存需求大幅下降,训练速度极快。
  • 不勾选(false,默认):
    – 语言模型继续参与训练,可学习更细粒度的图文融合特征,但显存与耗时显著增加。

总结“冻结语言模型就是把文本主干‘锁死’,只让图像端或投影器继续上课,省显存、提速度。”

2.5.4 图像最大像素

在这里插入图片描述
限制单张输入图像的 总像素数(宽 × 高)
• 超出限定的图像会被等比例缩放到该像素以下,防止显存爆炸。
• 单位为 像素(pixels),不是 MB 或 token 数。

场景 推荐值 说明
短视频帧 / 小图 50 000–100 000 默认即可
高分辨率文档 OCR 200 000–400 000 需显卡 ≥ 24 GB
4K 图 800 000+ 需显卡 ≥ 40 GB + 梯度累积
显存紧张 ≤ 50 000 先跑通流程

总结“图像最大像素就是‘一张图最多多少点’,显存够就调大,不够就缩小。”

2.5.5 图像最小像素

在这里插入图片描述
过滤掉总像素(宽 × 高)小于该阈值的图像,防止模型在训练/推理阶段处理过小的低质量图片而浪费显存或引入噪声。
• 单位为 像素(pixels)
• 低于阈值的样本会被自动丢弃,不参与后续处理。

场景 推荐值 说明
通用微调 0 或留空 不丢弃任何图像
高质量数据集 10 000(≈100×100) 剔除缩略图、图标
文档 OCR 50 000(≈224×224) 保证文字清晰
极端过滤 100 000(≈320×320) 仅保留高分辨率图

总结“图像最小像素就是‘低于多少点的图直接扔掉’;默认 0 不扔,想筛低清图就调大。”

2.5.6 视频最大像素

在这里插入图片描述
限制 单段输入视频任意一帧中的最大像素数(宽 × 高)。

  • 超过此阈值的帧会被 等比例缩放 至该像素以下,防止显存爆炸。
  • 单位为 像素(pixels),与图像的 max_image_pixels 逻辑一致。
  • 仅对 逐帧采样 的视频输入生效;若模型采用时空池化或其他降采样策略,仍需先满足该上限。
场景 推荐值 说明
短视频/低清 100 000–200 000 默认够用
高清 1080p 400 000–500 000 需单卡 ≥ 24 GB
4K 视频 800 000+ 需多卡或帧间降采样
显存紧张 ≤ 100 000 先跑通流程再放大

总结“视频最大像素就是‘每帧最多多少点’,显存够就调大,不够就压小。”

2.5.7 视频最小像素

在这里插入图片描述
过滤掉任何一帧像素数(宽 × 高)小于该阈值的视频片段,避免模型在训练或推理阶段处理分辨率过低、质量过差的视频帧而浪费显存或引入噪声。

  • 单位为 像素(pixels)
  • 低于阈值的视频会被整段丢弃,不进行后续处理。

总结“视频最小像素就是‘每帧低于多少点直接整段扔掉’;默认 0 不扔,想过滤低清视频就调大。”

2.6 GaLore 参数设置

在这里插入图片描述

2.6.1 使用 GaLore

在这里插入图片描述
勾选后,LaMa-Factory 会把 GaLore 优化器(Gradient Low-Rank Projection,梯度低秩投影)注入训练流程,实现全参数微调级别的性能却只消耗 LoRA 级显存

  • 核心思想:在 优化器状态 层面做 梯度低秩投影,而不是像 LoRA 那样改模型权重。
  • 适配器无关:可同时搭配 LoRA、DoRA、PiSSA 等,也可单独使用。
  • 支持 AdamW、8-bit AdamW、Adafactor 等常用优化器,只需在额外参数里指定 galore_optim
  • 官方测试:7B 模型在 24 GB 单卡即可全参训练,显存节省 ≈ 50 %–70 %

如何启用:

  1. WebUI 勾选「使用 GaLore」。
  2. 在「额外参数」填:
{
  "optim": "galore_adamw",
  "galore_rank": 1024,
  "galore_scale": 0.25,
  "update_proj_gap": 200
}

galore_rank:投影秩大小,常用 512–1024;
galore_scale:缩放系数,0.25 为经验值;
update_proj_gap:每多少步更新一次投影矩阵。

总结 “勾上 GaLore,就能在 24 GB 单卡‘全参’训练 7B,显存省一半,效果不打折。”

2.6.2 GaLore 秩

在这里插入图片描述
作用:指定 GaLore 优化器在做梯度低秩投影时的秩大小

  • 数值越大 → 梯度近似越精确,训练更稳,但显存节省幅度减小。
  • 数值越小 → 显存压缩更明显,可能损失精度。

总结“GaLore 秩就是压缩梯度的‘宽度’:7B 用 1024,大模型再放大,省显存但别太省。”

2.6.3 更新间隔

在这里插入图片描述
在 GaLore 优化器里,每隔多少步重新计算一次梯度低秩投影矩阵(U、V)。

  • 步数越小 → 投影矩阵更新越频繁,近似更精确,但额外计算开销增高;
  • 步数越大 → 计算量减少,显存更省,但长时间不更新可能积累误差。

经验区间

场景 推荐值 说明
7B/13B 通用微调 200–500 稳定且高效
大模型 30B+ 500–1000 计算开销敏感
超大规模继续预训练 1000–2000 重计算代价高
快速实验/调试 50–100 验证收敛即可

总结“更新间隔就是‘多少步重算一次投影’,默认 200,大模型可 1000,调试可 50。”

2.6.4 GaLore 缩放系数

在这里插入图片描述
控制 GaLore 优化器在每次更新时对低秩梯度投影结果的 整体放大/缩小倍数,相当于对梯度更新量进行 全局缩放

  • 值越大 → 每次更新步长越大,收敛可能更快,但也更容易震荡。
  • 值越小 → 更新更保守,训练更稳,但可能收敛变慢。

总结“GaLore 缩放系数就是给梯度更新量‘加音量’:默认 0.25,稳;想快可 0.5,怕震就 0.1。”

2.6.5 GaLore 作用模块

在这里插入图片描述
指定 哪些网络模块 的梯度需要被 GaLore 低秩投影 处理;其余模块仍按常规全梯度更新。
• 填写方式:模块的 注册名正则表达式,多个用英文逗号分隔,留空则使用框架默认列表。
• 仅对 GaLore 优化器 生效;与普通 LoRA 的 lora_target_modules 独立。

常见填写示例

模型系列 推荐填写 说明
Llama-2/3 q_proj,v_proj,k_proj,o_proj,gate_proj,up_proj,down_proj 对 Attention & MLP 全做低秩梯度投影
Baichuan-2 W_pack,o_proj,gate_proj,up_proj,down_proj Baichuan 把 qkv 打包成 W_pack
ChatGLM-3 query_key_value,dense,dense_h_to_4h,dense_4h_to_h 对应 GLM 命名
仅投影 FFN gate_proj,up_proj,down_proj 显存再省一点
正则写法 .*\.attention.*,.*\.mlp.* 一次匹配所有 Attention 和 MLP

总结“GaLore 作用模块就是‘点名’:告诉 GaLore 该把低秩投影插到哪些层里,逗号隔开即可。”

2.7 APOLLO参数设置

在这里插入图片描述

2.7.1 使用APPOLO

使用APPOLO:使用 APOLLO 优化器,https://github.com/zhuhanqing/APOLLO
在这里插入图片描述
在 LLaMA-Factory 中勾选后,框架会把 APOLLO 优化器(Approximated Gradient Scaling for Memory-Efficient LLM Optimization)注入训练流程,实现 SGD 级别的显存占用 却保持 AdamW 级别的收敛效果,适用于 全参数预训练 / 微调

关键超参(在「额外参数」中以 JSON 填写)

参数 类型 默认值 说明
optim string "apollo_adamw" 优化器名称(已集成到 HF Trainer)
apollo_rank int 256(APOLLO) / 1(APOLLO-Mini) 梯度低秩子空间秩大小
apollo_scale_type string "channel" channel(APOLLO) 或 tensor(APOLLO-Mini)
apollo_scale int 1(channel) / 128(tensor) 缩放因子,补偿低秩近似误差
update_proj_gap int 200 重新计算投影矩阵的步数间隔
scale_front bool false 是否在缩放前应用 Norm-Growth Limiter

典型用法(7B 单卡 24 GB 微调示例)

{
  "optim": "apollo_adamw",
  "apollo_rank": 1024,
  "apollo_scale_type": "channel",
  "apollo_scale": 1,
  "update_proj_gap": 200,
  "scale_front": false
}

总结“勾上‘使用 APOLLO’,再配 4 个超参,就能在 24 GB 单卡全参训 7B:显存省到 SGD 级,效果仍是 AdamW 级。”

2.7.2 APOLLO 秩

APOLLO 秩:APOLLO 梯度的秩大小。
在这里插入图片描述
指定 APOLLO 优化器在做“梯度低秩投影”时所使用的 秩大小(rank of the auxiliary sub-space)。
• 数值越大 → 近似精度越高,收敛更稳,但显存节省幅度减小。
• 数值越小 → 显存压缩更极致,可能带来精度损失。

官方默认值

  • APOLLO(channel-wise):256
  • APOLLO-Mini(tensor-wise):1

经验值速查

模型规模 推荐秩 说明
60 M–1 B 64–128 小模型秩可低
7 B 256–1024 单卡 24 GB 常用 1024
13 B 512–2048 秩过小易失真
30 B+ 1024–4096 大模型需更高秩保精度

总结“APOLLO 秩就是梯度投影的‘宽度’:7B 常用 1024,越大越稳,越小越省。”

2.7.3 更新间隔

更新间隔:相邻两次投影更新的步数。
在这里插入图片描述
在 APOLLO 优化器中,每隔多少步重新计算一次梯度低秩投影矩阵(即更新辅助子空间)。

  • 间隔越小 → 投影矩阵紧跟梯度变化,近似更准确,但计算开销增大;
  • 间隔越大 → 计算量减少,显存更省,但长时间不更新可能累积误差。

默认值 :200 步(官方脚本与社区实践的折中值)。

经验区间

场景 推荐值 说明
7B/13B 通用微调 200–500 稳定且高效
大模型 30B+ 500–1000 减少额外计算
超长序列/高分辨率 100–200 梯度变化快,频繁更新更稳
快速调试 50–100 验证收敛即可

总结“更新间隔就是隔多少步重算一次投影:默认 200,大模型可 1000,调试可 50。”

2.7.4 APOLLO 缩放系数

APOLLO 缩放系数:APOLLO 缩放系数大小。
在这里插入图片描述
在 APOLLO 优化器内部,用于 补偿低秩近似带来的梯度幅度误差

  • 数值越大 → 梯度更新步子更大,收敛更快,但过大可能震荡;
  • 数值越小 → 步子更稳,但收敛变慢。

官方默认值

  • APOLLO(channel-wise) apollo_scale = 1.0
  • APOLLO-Mini(tensor-wise) apollo_scale = 128.0

经验设置

场景 推荐值 说明
7B 模型微调 1.0–2.0 与官方脚本一致
13B 模型 1.0–4.0 略放大补偿
APOLLO-Mini 128.0–256.0 默认 128,可线性放大
长序列/高分辨率 1–4(channel)/ 128–512(tensor) 视显存与梯度幅度再调

总结“APOLLO 缩放系数就是给梯度‘音量旋钮’:channel 模式默认 1,tensor 模式默认 128,显存紧就下调,震荡就上调。”

2.7.5 APOLLO 作用模块

APOLLO 作用模块:应用 APOLLO 的模块名称。使用英文逗号分隔多个名称。
在这里插入图片描述
告诉 APOLLO 优化器 “对哪些网络层/模块做梯度低秩投影”

  • 填写方式:模块的 注册名正则表达式,多个名称用英文逗号隔开。
  • 未列出的模块将保持常规全梯度更新;留空则使用官方默认列表(通常覆盖 Attention 与 MLP)。

常见填写示例

模型 推荐填写 说明
Llama-2/3 q_proj,v_proj,k_proj,o_proj,gate_proj,up_proj,down_proj 对全部 Attention & MLP 使用 APOLLO
Baichuan-2 W_pack,o_proj,gate_proj,up_proj,down_proj Baichuan qkv 打包为 W_pack
ChatGLM-3 query_key_value,dense,dense_h_to_4h,dense_4h_to_h GLM 命名风格
只投影 FFN gate_proj,up_proj,down_proj 显存再省一点
正则写法 .*\.attention.*,.*\.mlp.* 一次性匹配所有 Attention 和 MLP

总结“APOLLO 作用模块就是‘点名’:告诉优化器该对哪些层做梯度低秩投影,逗号隔开即可。”

2.8 BAdam 参数设置

在这里插入图片描述

2.8.1 使用 BAdam

使用 BAdam:使用 BAdam 优化器,https://github.com/Ledzy/BAdam
在这里插入图片描述
勾选后,LaMa-Factory 会把 BAdam 优化器(Block-coordinate Adam)接入训练流程,实现 “逐块 Adam” 更新:

  • 每次只对 一个 Transformer 层(或自定义块) 做完整 Adam 更新,其余参数冻结;
  • 循环遍历所有块,内存峰值 ≈ 2 GB + 16 GB / D(Llama-7B 约 22 GB);
  • 单卡 24 GB 即可全参微调 7B/8B,且效果优于 LoRA。

如何启用

  1. WebUI 勾选「使用 BAdam」。
  2. 在「额外参数」填写:
{
  "optim": "badam",
  "switch_block_every": 100,
  "switch_mode": "random"
}

switch_block_every:每训练多少步后切换到下一块(默认 100)。
switch_mode:切换顺序,random / ascending / descending

总结“勾上 BAdam,再设 switch_block_every,就能 24 GB 单卡全参训 7B:一块一块地跑 Adam,省显存还比 LoRA 好用。”

2.8.2 BAdam 模式

BAdam 模式:使用 layer-wise 或 ratio-wise BAdam 优化器。(layer、ratio)
在这里插入图片描述
决定 BAdam 优化器把模型切成“层块(layer-wise)”还是“比例块(ratio-wise)”来逐块训练。

  • layer(默认)
    按 Transformer 层划分,每层为一个块;块数 = 层数,更新顺序清晰,BP 时间最省。
  • ratio
    每层只取固定 比例参数 组成跨层混合块(例如 10 % 参数/块),块数更多,显存再降,但 BP 开销略高。

总结“选 layer 按层切块,简单高效;选 ratio 按比例跨层切,更省显存但稍慢。”

2.8.3 切换策略

切换策略:Layer-wise BAdam 优化器的块切换策略(ascending、descending、random、fixed)。
在这里插入图片描述

2.8.4 切换频率

切换频率:Layer-wise BAdam 优化器的块切换频率。
在这里插入图片描述
决定 Layer-wise BAdam 在逐层更新时,按什么顺序依次切换各层(块)。

  • ascending 从输入层 → 输出层(第 0 层 → 最后一层)顺序更新。
  • descending 从输出层 → 输入层逆向更新。
  • random (默认)每次随机打乱层序,打散相关性,收敛更稳。
  • fixed 按预设固定顺序循环,通常用于调试或复现实验。

总结“顺序升 ascending,逆序 descending,随机 random(推荐),固定 fixed 调试用。”

2.8.5 Block 更新比例

Block 更新比例:Ratio-wise BAdam 优化器的更新比例
在这里插入图片描述
仅在 BAdam 模式 = ratio 时生效。
指定“每一次活跃块”占 每层参数总量的百分比(0–1 之间的小数)。
• 值越大 → 每块包含的参数越多,显存需求↑,但训练步数↓;
• 值越小 → 每块更稀疏,显存峰值↓,训练步数↑。

经验值

场景 推荐比例 说明
单卡 24 GB 微调 7B 0.1–0.2 显存与速度平衡
显存极度紧张 0.05–0.1 再省显存,但需更多步
多卡大 batch 0.2–0.4 充分利用并行带宽

总结“Block 更新比例就是‘每块抠多少参数’:显存紧写 0.1,宽裕写 0.2,越小越省越大越快。”

2.9 SwanLab 参数设置

在这里插入图片描述

2.9.1 使用 SwanLab

使用 SwanLab:启用 SwanLab 进行实验跟踪和可视化,https://swanlab.cn/
在这里插入图片描述

2.9.2 SwanLab 项目名

SwanLab 项目名:
在这里插入图片描述
一键把 LLaMA-Factory 的训练日志、超参、指标、硬件信息实时同步到 SwanLab 云端,提供 可视化仪表盘实验对比多人协作离线缓存 功能。

如何启用

  1. WebUI 勾选「使用 SwanLab」。
  2. 首次运行会提示输入 API Key:
swanlab login

或在「额外参数」里直接写:

{
  "report_to": "swanlab",
  "swanlab_project": "llama-factory-exp",
  "swanlab_experiment_name": "sft-7b-lora"
}
  1. 训练启动后,终端会给出实验链接,点击即可在浏览器查看实时曲线、GPU 使用率、生成样本等。

总结“勾上 SwanLab,扫码登录,训练指标实时上云,链接一甩,同事直接看结果。”

2.9.3 SwanLab 实验名

SwanLab 实验名(非必填):
在这里插入图片描述
为本次训练在 SwanLab 云端创建一条独立的实验记录,方便后续在仪表盘里快速定位、对比或分享。

  • 留空 → 系统自动生成一串时间戳 + 随机字符(可读性差)。
  • 填写 → 支持中英文、数字、下划线、连字符,如 llama2-7b-lora-sft-v1

示例

qwen3-8b-dpo-beta0.1
baichuan-13b-pretrain-stage1

总结“想给 SwanLab 里的实验起个好听的名字,就填;不填系统自动乱码。”

2.9.4 SwanLab 工作区

SwanLab 工作区(非必填):SwanLab 的工作区,默认在个人工作区下。
在这里插入图片描述
指定本次实验在 SwanLab 云端归属的 工作区 / 组织空间

  • 留空(默认)→ 实验落在 个人工作区
  • 填写组织名(如 nlp-labcompany-ai)→ 实验自动归入对应组织,方便 团队共享、权限管理与统一计费
  • 组织名需先在 SwanLab 后台创建,且当前账号具备写入权限。

示例

nlp-lab
company-ai

总结“想把自己跑的实验放进团队公共目录,就把组织名填进来;不填就留在个人空间。”

2.9.5 SwanLab API 密钥

SwanLab API 密钥(非必填):用于在编程环境登录 SwanLab,已登录则无需填写。
在这里插入图片描述

2.9.6 SwanLab 模式

SwanLab 模式:使用云端版或离线版 SwanLab。(分为 cloud和local)
在这里插入图片描述
非浏览器环境(如远程服务器、离线脚本、CI/CD)登录 SwanLab 时,用这把密钥完成身份验证,实现自动上传日志与指标。

  • 已在本机执行过 swanlab login 或已配置环境变量 SWANLAB_API_KEY → 可留空。
  • 未登录 → 需填写 32 位字符串密钥,可从 SwanLab 控制台「个人设置 → API Key」复制。

填写示例 :

sl_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

总结“服务器上跑实验时,把 SwanLab 的 API Key 粘进来,就能免浏览器一键上传。”

2.10 其它

在这里插入图片描述

2.10.1 输出目录

输出目录:保存结果的路径。
在这里插入图片描述
指定训练或推理完成后,所有结果文件(模型权重、配置、日志、检查点、可视化图表等)的保存根目录

  • 支持绝对路径相对路径;若目录不存在,框架会自动创建。
  • 留空时,默认使用 ./outputs/<timestamp>,防止覆盖旧实验。

常见示例

场景 示例路径 说明
本地快速实验 ./runs/exp-07-13 相对路径,易备份
多实验并行 ./outputs/llama2-7b-lora-sft-001 按实验命名
云端挂载盘 /mnt/data/models/baichuan-13b-dpo 绝对路径,持久化
团队共享 /shared/llama-factory/outputs/qwen3-8b-pretrain 统一目录,方便协作

总结“输出目录就是‘所有训练成果打包放哪’,写清路径,方便下次找模型。”

2.10.2 配置路径

配置路径:保存训练参数的配置文件路径。
在这里插入图片描述
告诉 LaMa-Factory 去哪里读取一份完整的 YAML 或 JSON 训练配置,把 WebUI 里没展示或难以一次性填写的超参数一次性加载进来。

  • 文件可以是本地绝对/相对路径,也可以是 Hugging Face Hub 上的配置文件。
  • 如果同时填写了 WebUI 字段,文件里的值优先级更高,可用来快速复现实验或在集群脚本中调用。

常见示例

# 本地文件
./configs/llama2-7b-lora-sft.yaml

# 相对路径
configs/qwen3-8b-dpo.json

# Hub 上的公共配置
hza/llama-factory-configs/llama3-8b-pretrain.yaml

总结“配置路径就是‘一键导入超参’:把写好的 YAML/JSON 指给它,WebUI 没填的也能生效。”

2.10.3 设备数量

设备数量:当前可用的运算设备数。
在这里插入图片描述
告诉 LaMa-Factory 当前可用于训练/推理的 GPU(或 NPU/CPU)总数

  • 自动检测:通常为 torch.cuda.device_count() 的结果;在 WebUI 留空或填 auto 即可让框架自动识别。
  • 手动指定:当使用 CPU 训练、容器限额、或手工切分 时,可强制写成具体数字(如 4)。
  • 影响逻辑:决定 DataParallel / DeepSpeed ZeRO / FSDP 的并行规模;若与真实卡数不符会报错或 OOM。

总结“设备数量就是‘手上有几张卡’;默认 auto,让系统自己数,特殊环境再手写。”

2.10.4 DeepSpeed stage

DeepSpeed stage:多卡训练的 DeepSpeed stage。
在这里插入图片描述
指定 多卡训练 时 DeepSpeed 的并行策略(ZeRO stage),决定 模型、梯度、优化器状态 在 GPU 之间的切分粒度。

  • 数字越大 → 显存越省,通信量越高;需与 device_count、batch_size、显存容量 匹配。

可选值

stage 全称 切分内容 显存节省 适用场景
0 ZeRO-0 不切分,普通 DDP 0 % 小模型/调试
1 ZeRO-1 仅优化器状态切分 中等 中等模型
2 ZeRO-2 优化器 + 梯度切分 7B–13B 常见
3 ZeRO-3 模型 + 梯度 + 优化器 最高 30B+ / 长序列

总结“DeepSpeed stage 就是‘显存救命档位’:7B 用 2,30B 用 3,调试用 0。”

2.10.5 使用 offload

使用 offload:使用 DeepSpeed offload(会减慢速度)。
在这里插入图片描述
优化器状态 和/或 模型参数 从显存 卸载到 CPU 内存或 NVMe,进一步降低 GPU 显存需求。

  • 勾选(true)
    – 显存可再省 30 %–70 %,单卡即可跑超大模型/超长序列;
    – 训练速度会明显下降(CPU ↔ GPU 拷贝)。
  • 不勾选(false,默认)
    – 所有状态保留在显存,速度最快,但需足够显存。

总结“显存爆了就开 offload:参数搬 CPU,省显存但慢;速度优先就关掉。”

3. 评估与预测(Evaluate&Predict)

在这里插入图片描述

3.1 数据路径

在这里插入图片描述
告诉 LaMa-Factory 去哪个本地或云端目录读取用于 评估(evaluate)或预测(predict) 的样本文件。

  • 支持绝对路径、相对路径或 Hugging Face Hub 数据集标识符。
  • 目录内需包含符合模板的数据文件(如 jsonl / txt / csv)以及可选的 dataset_info.yaml 描述字段映射。

示例

./data/eval/alpaca_eval  
./data/benchmarks/mmlu  
/ceph/user/eval_sets/safety_zh

总结“评估与预测数据路径就是‘放测试题的地方’;指到目录,模型才知道去哪拿题打分。”

3.2 数据集

在这里插入图片描述
指定在 评估(evaluate)或预测(predict)阶段 使用的 数据集名称,框架会自动从 数据路径 下的 dataset_info.yaml 文件里读取对应数据集的字段映射与格式。

  • 可以是本地定义的自定义数据集,也可以是 Hugging Face Hub 上的公共数据集。
  • 若数据集路径下有多个数据集,需明确指定其中一个。

示例

alpaca_eval  
mmlu  
safety_zh

总结“评估与预测数据集就是‘告诉程序用哪套题’;路径是放题的地方,数据集是题的名称。”

3.3 截断长度

截断长度:输入序列分词后的最大长度。
在这里插入图片描述
评估(evaluate)或预测(predict)阶段,把每个输入样本分词后的最大 token 数限制在这个值以下。

  • 若样本超长,会从尾部截断多余部分,防止 OOM(显存溢出)。
  • 若样本不足该长度,会正常填充(pad)到该长度。
  • 默认值通常与训练阶段的 cutoff_len 一致,但可根据评估数据调整。

总结“截断长度就是‘评估时每条样本最多吃多少 token’;超长截尾,不足补零。”

3.4 最大样本数

最大样本数:每个数据集的最大样本数。
在这里插入图片描述
评估(evaluate)或预测(predict)阶段,对每个指定的数据集设置“最多只处理多少条样本”。

  • 填 0 或留空 → 处理全部样本。
  • 填正整数 N → 只随机/顺序截取前 N 条,用于快速实验、调试或消融

总结“最大样本数就是‘每个评估集最多测几条’;填 0 全测,填 1000 就测 1000 条。”

3.5 批处理大小

批处理大小:每个 GPU 处理的样本数量。
在这里插入图片描述
评估(evaluate)或预测(predict)阶段,指定 每张 GPU 上,每一次前向传播 要喂多少条样本。

  • 与训练阶段的 per_device_train_batch_size 类似,但通常可以更大(因为无需反向传播)。
  • 显存允许的情况下,增大该值可以加速评估过程。

总结“评估时的批处理大小就是‘每张卡一次喂几条’;显存够就放大,加速测指标。”

3.6 最大生成长度

最大生成长度:
在这里插入图片描述
推理(predict)阶段,限制模型生成的新 token 数量,从而控制输出文本的最大长度

  • 填写正整数 N → 模型在已有输入基础上最多再生成 N 个 token;
  • 若输入长度为 L,最终输出长度 = L + N。
  • 默认值通常为 200 左右,但可根据任务调整。

总结“最大生成长度就是‘模型最多再写几个字’;填 200 就是最多再写 200 个 token。”

3.7 Top-p 采样值

Top-p 采样值:
在这里插入图片描述
推理(predict)阶段,控制生成文本时的 随机性与多样性

  • 值越小(如 0.1)→ 生成越保守,倾向于高频词汇,重复率高;
  • 值越大(如 0.9)→ 生成越多样,包含更多低频词汇,可能更离谱;
  • 默认值 0.95 是社区通用平衡点。

总结“Top-p 采样值就是‘生成时冒点险的概率’:0.1 很保守,0.95 比较大胆。”

3.8 温度系数

在这里插入图片描述
推理(predict)阶段,控制生成文本的 随机性强度

  • 数值越小(如 0.1)→ 生成越确定,倾向于选择最高概率的 token,重复率高;
  • 数值越大(如 1.5)→ 生成越随机,包含更多低概率词汇,可能更离谱;
  • 默认值 1.0 表示按照原始概率分布采样。

总结“温度系数就是‘生成时的随机强度’:0.1 很稳定,1.5 很随机。”

3.9 输出目录

输出目录:保存结果的路径
在这里插入图片描述
评估(evaluate)或预测(predict)阶段,指定将结果文件(如评估指标、生成的文本、日志等)保存到本地或云端的哪个路径

  • 支持绝对路径、相对路径或云存储路径。
  • 若目录不存在,LaMa-Factory 会自动创建。

常见示例

场景 示例路径 说明
本地快速保存 ./results/eval-07-13 相对路径,方便本地查看
云端持久化 /mnt/ceph/results/predict-llama2-7b 绝对路径,适合团队共享
按任务分类 ./outputs/eval-llama2-7b-lora-sft 按模型/任务命名,便于区分

总结“输出目录就是‘把评估或预测结果存哪’;写清路径,方便后续找文件。”

4. 对话(Chat)

在这里插入图片描述

4.1 推理引擎

推理引擎:huggingface、vLLM、sglang
在这里插入图片描述
在 LaMa-Factory 的对话推理场景中,可以选择以下三种推理引擎:

HuggingFace 推理引擎

  • 特点

    • 提供统一接口调用各类模型,支持 HuggingFace Hub 上的所有模型(如 BERT、T5、GPT2、ChatGLM、LLaMA 等)。
    • 适合教育科研、原型开发、多任务处理。
    • 推理速度相对较慢,显存占用较高,但支持多平台(CPU/GPU)。
  • 适用场景

    • 教育科研、小规模推理、多任务处理。

2. vLLM 推理引擎

  • 特点

    • 基于 PagedAttention 机制,显著优化 KV Cache 的内存利用率,显存占用低,吞吐量高。
    • 支持动态批处理、多 GPU 并行推理、量化(INT8、AWQ 等)、流式输出。
    • 推理速度比 HuggingFace 快 2–4 倍,适合高并发、低延迟需求。
  • 适用场景

    • 高并发对话系统、在线客服、内容生成、API 服务。

3. SGLang 推理引擎

  • 特点

    • 支持结构化输出(如 JSON、XML),适合复杂逻辑的 AI 助理和 Agent 场景。
    • 采用 Radix Tree 缓存,吞吐性能高,适合多轮对话。
    • 支持 GPU/CPU,社区活跃度较高。
  • 适用场景

    • 高并发多轮对话、搜索引擎、金融领域。

总结如果需要 快速原型开发和 多任务处理,且对推理速度要求不高,可以选择 HuggingFace 推理引擎。 如果需要 高并发处理和低延迟响应,且主要使用 LLaMA、GPT 等模型,推荐 vLLM 推理引擎。 如果需要 复杂逻辑处理 和 结构化输出,适合选择 SGLang 推理引擎。

4.2 推理数据类型

推理数据类型:auto、float16、bflot16、float32
在这里插入图片描述
指定在 推理(predict)阶段,模型权重、输入数据和计算过程使用的浮点精度
不同的精度类型会影响推理速度、显存占用和计算精度。

可选值及特点

选项 全称 位数 显存节省 推理速度 适用场景
auto 自动检测 - - - 让框架自动选择最优精度(通常为 float16 或 bfloat16)。
float16 半精度浮点 16 bit ≈ 50 % 现代 GPU(如 A100、H100)支持,适合推理速度优先场景。
bfloat16 脑浮点 16 bit ≈ 50 % 现代 GPU(如 A100、H100)支持,精度略高于 float16。
float32 单精度浮点 32 bit 0 % 适用于对精度要求极高、显存充足场景。

总结“推理数据类型选 float16 最快,bfloat16 稍稳,float32 最准,auto 让系统自己挑。”

4.3 额外参数

额外参数:以json格式传递给训练器的额外参数
在这里插入图片描述
在 LaMa-Factory 的 训练(train)推理(predict) 阶段,通过一段 JSON 字符串,把任何官方 Trainer / Accelerate / DeepSpeed 支持、但 WebUI 没有显式露出的小众超参数,一次性塞进训练器或推理器,避免改源码。

总结“extra_args 就是给训练器或推理器开小灶:写合法 JSON,想塞啥就塞啥,优先级最高。”

4.4 角色

角色:user、oberservation
在这里插入图片描述
在对话系统或推理任务中,角色(role)通常用来定义不同参与者的身份和行为模式。在 LaMa-Factory 的上下文中,角色可能用于指定对话中的不同实体,例如用户(user)和观察者(observation)。以下是对这两个角色的详细解释:

1. 用户(user)

  • 用户 是与系统直接交互的主体,通常是人类用户。
  • 在对话系统中,用户提出问题或发起对话,系统根据用户的输入生成回答。

示例

{
  "role": "user",
  "content": "你好,我想了解一下今天的天气。"
}

2. 观察者(observation)

  • 观察者 是一个特殊的角色,通常用于记录或分析对话过程中的某些信息。
  • 在某些场景中,观察者可以记录对话的上下文、用户的反馈、系统的回答等,用于后续的分析或优化。
  • 观察者也可以用于多轮对话中的中间状态记录,帮助系统更好地理解对话的进展。

示例

{
  "role": "observation",
  "content": "用户询问了今天的天气,系统已生成回答。"
}

在单轮对话中,通常只有用户和系统之间的交互:

[
  {
    "role": "user",
    "content": "你好,我想了解一下今天的天气。"
  },
  {
    "role": "system",
    "content": "今天天气晴朗,最高温度 30 度。"
  }
]

在多轮对话中,观察者可以记录每轮对话的状态:

[
  {
    "role": "user",
    "content": "你好,我想了解一下今天的天气。"
  },
  {
    "role": "system",
    "content": "今天天气晴朗,最高温度 30 度。"
  },
  {
    "role": "observation",
    "content": "用户询问了今天的天气,系统已生成回答。"
  },
  {
    "role": "user",
    "content": "明天呢?"
  },
  {
    "role": "system",
    "content": "明天多云,最高温度 28 度。"
  },
  {
    "role": "observation",
    "content": "用户询问了明天的天气,系统已生成回答。"
  }
]

总结: 用户(user)与系统直接交互,提出问题或发起对话。 观察者(observation)记录对话过程中的信息,用于分析或优化。

4.5 系统提示词

在这里插入图片描述
在对话系统中,系统提示词 是一段预设的文本,用于为模型提供上下文信息或引导模型的生成方向。它通常在对话开始时插入到用户输入之前,帮助模型更好地理解任务目标、风格或约束条件。

作用与重要性

  • 提供上下文:帮助模型理解对话的背景或主题。
  • 引导生成:指定生成文本的风格、格式或内容范围。
  • 约束输出:限制模型的生成,避免生成无关或不适当的内容。

示例 1. 提供上下文

{
  "role": "system",
  "content": "你是一位专业的天气预报员,擅长提供准确的天气信息。"
}

用户输入:

{
  "role": "user",
  "content": "今天天气怎么样?"
}

模型生成:

{
  "role": "system",
  "content": "今天天气晴朗,最高温度 30 度,适合户外活动。"
}

示例2. 引导生成

{
  "role": "system",
  "content": "请用简洁的语言回答用户的问题。"
}

用户输入:

{
  "role": "user",
  "content": "今天天气怎么样?"
}

模型生成:

{
  "role": "system",
  "content": "今天晴,30 度。"
}

示例3. 约束输出

{
  "role": "system",
  "content": "请避免生成任何敏感或不适当的内容。"
}

用户输入:

{
  "role": "user",
  "content": "告诉我一个笑话。"
}

模型生成:

{
  "role": "system",
  "content": "为什么电脑生病了?因为它得了病毒!"
}

使用场景

  • 多轮对话:在多轮对话中,系统提示词可以持续引导模型的生成方向。
  • 特定任务:在特定任务(如写作、翻译、问答)中,系统提示词可以明确任务要求。
  • 风格控制:通过系统提示词指定生成文本的风格(如正式、幽默、简洁)。

总结“系统提示词就是‘给模型的悄悄话’:告诉它怎么回答、什么风格、什么不能说。”

4.6 工具列表

在这里插入图片描述
在对话系统或推理任务中,工具列表 是一个数组,用于定义模型在回答问题时可以调用的外部工具或 API。这些工具可以帮助模型获取额外信息、执行复杂计算或调用第三方服务,从而生成更准确、更有用的回答。

作用与重要性:

  • 扩展能力:让模型能够调用外部资源,提升回答的准确性和实用性。
  • 动态交互:根据用户需求动态调用工具,增强系统的灵活性。
  • 多模态支持:支持调用图像识别、语音识别等工具,实现多模态交互。

假设你正在构建一个智能助手,用户可以询问天气、新闻或进行数学计算。工具列表可以定义如下:

[
  {
    "name": "weather_api",
    "description": "获取指定城市的天气信息",
    "parameters": {
      "city": "string"
    }
  },
  {
    "name": "news_api",
    "description": "获取最新新闻",
    "parameters": {
      "category": "string"
    }
  },
  {
    "name": "calculator",
    "description": "执行数学计算",
    "parameters": {
      "expression": "string"
    }
  }
]

使用场景 1:查询天气
用户输入:

{
  "role": "user",
  "content": "今天北京的天气怎么样?"
}

模型调用工具:

{
  "role": "system",
  "content": "调用 weather_api,参数:{ 'city': '北京' }"
}

工具返回:

{
  "role": "tool",
  "content": "今天北京天气晴朗,最高温度 30 度。"
}

模型生成:

{
  "role": "system",
  "content": "今天北京天气晴朗,最高温度 30 度。"
}

使用场景 2:查询新闻

用户输入:

{
  "role": "user",
  "content": "给我看看今天的科技新闻。"
}

模型调用工具:

{
  "role": "system",
  "content": "调用 news_api,参数:{ 'category': '科技' }"
}

工具返回:

{
  "role": "tool",
  "content": "今天科技新闻:苹果公司发布新款 iPhone。"
}

模型生成:

{
  "role": "system",
  "content": "今天科技新闻:苹果公司发布新款 iPhone。"
}

使用场景 3:数学计算
用户输入:

{
  "role": "user",
  "content": "计算 2 + 3 * 4"
}

模型调用工具:

{
  "role": "system",
  "content": "调用 calculator,参数:{ 'expression': '2 + 3 * 4' }"
}

工具返回:

{
  "role": "tool",
  "content": "计算结果是 14"
}

模型生成:

{
  "role": "system",
  "content": "2 + 3 * 4 的结果是 14。"
}

总结“工具列表就是‘模型的外挂清单’:告诉它能用哪些工具,按需调用,让回答更强大。”

4.7 最大生成长度

在这里插入图片描述
推理(predict)阶段,限制模型生成的新 token 数量,从而控制输出文本的最大长度

  • 若输入长度为 L,最终输出长度 = L + max_new_tokens。
  • 该参数用于避免模型生成过长的文本,节省计算资源并提高响应速度。

假设输入文本为:

"今天天气真好,"

分词后长度为 5(L = 5)。 若设置 max_new_tokens = 10,模型最多再生成 10 个 token,最终输出长度为 15。

使用场景 :

  • 短文本生成:如生成标题、摘要,可设置较小值(如 50)。
  • 长文本生成:如生成故事、文章,可设置较大值(如 500)。
  • 实时交互:如聊天机器人,需快速响应,可设置较小值(如 100)。

总结“最大生成长度就是‘模型最多再写几个字’;填 200 就是最多再写 200 个 token。”

4.8 Top-P采样值

Top-P采样值:
在这里插入图片描述
推理(predict)阶段,控制生成文本时的 随机性与多样性

  • Top-P 采样 是一种基于概率的采样方法,模型会从所有可能的下一个 token 中选择累积概率达到指定阈值(top_p)的那些 token。
  • 值越小 → 生成越保守,倾向于高频词汇,重复率高;
  • 值越大 → 生成越多样,包含更多低频词汇,可能更离谱;
  • 默认值 0.95 是社区通用平衡点。

假设模型预测下一个 token 的概率分布如下:

token1: 0.4
token2: 0.3
token3: 0.2
token4: 0.1

若设置 top_p = 0.7,模型会从累积概率达到 0.7 的 token 中采样,即从 token1token2 中选择。

使用场景:

  • 保守生成:如写作辅助、知识问答,希望生成稳定、准确的内容,可设置较小值(如 0.1–0.5)。
  • 创意生成:如故事创作、诗歌生成,希望生成多样、新颖的内容,可设置较大值(如 0.9–1.0)。
  • 调试阶段:可尝试不同值,观察生成效果,找到最优平衡点。

总结“Top-P 采样值就是‘生成时冒点险的概率’:0.1 很保守,0.95 比较大胆。”

4.9 温度系数

在这里插入图片描述
推理(predict)阶段,控制生成文本的 随机性强度

  • 温度系数 是一个控制生成多样性的参数,它会影响模型选择下一个 token 的概率分布。
  • 数值越小(如 0.1)→ 生成越确定,倾向于选择最高概率的 token,重复率高;
  • 数值越大(如 1.5)→ 生成越随机,包含更多低概率词汇,可能更离谱;
  • 默认值 1.0 表示按照原始概率分布采样。

假设模型预测下一个 token 的概率分布如下:

token1: 0.4
token2: 0.3
token3: 0.2
token4: 0.1

若设置 temperature = 0.5,模型会将概率分布调整为:

token1: 0.5
token2: 0.3
token3: 0.15
token4: 0.05

生成结果会更倾向于高频词汇。

若设置 temperature = 1.5,模型会将概率分布调整为:

token1: 0.3
token2: 0.25
token3: 0.2
token4: 0.25

生成结果会更随机。

使用场景:

  • 确定性生成:如知识问答、翻译,希望生成稳定、准确的内容,可设置较小值(如 0.1–0.5)。
  • 创意生成:如故事创作、诗歌生成,希望生成多样、新颖的内容,可设置较大值(如 1.5–2.0)。
  • 调试阶段:可尝试不同值,观察生成效果,找到最优平衡点。

总结“温度系数就是‘生成时的随机强度’:0.1 很稳定,1.5 很随机。”

4.10 跳过特殊token

在这里插入图片描述
推理(predict)阶段,决定是否在生成的文本中跳过特殊 token
特殊 token 通常是指模型用于内部处理的标记,如 [CLS][SEP]<s></s> 等,这些 token 在生成文本时通常没有实际意义,甚至可能干扰最终输出。

假设模型生成的 token 序列如下:

<s> 今天天气真好 </s> [CLS] [SEP]
  • 跳过特殊 token(true):最终输出的文本会去掉这些特殊 token,只保留实际内容:
今天天气真好
  • 不跳过特殊 token(false):最终输出的文本会包含所有 token,包括特殊 token:
<s> 今天天气真好 </s> [CLS] [SEP]

默认值

通常默认值为 true,即跳过特殊 token,以生成更干净的文本。

使用场景:

  • 文本生成:如写作辅助、对话系统,通常希望生成的文本干净、无干扰,建议设置为 true
  • 调试模型:在调试阶段,可能希望保留特殊 token 以观察模型的内部行为,可设置为 false

总结“跳过特殊 token 就是‘去掉没意义的标记’:默认 true,生成干净文本;false 保留所有标记。”

4.11 转义HTML标签

在这里插入图片描述
推理(predict)阶段,决定是否将生成的文本中的 HTML 标签进行转义处理
HTML 标签(如 <div><p><a> 等)在某些场景下可能会被浏览器解析为格式化指令,而不是普通文本。转义处理可以将这些标签转换为纯文本形式,避免被浏览器错误解析。

假设模型生成的文本如下:

<p>今天天气真好</p>
<a href="http://example.com">点击这里</a>
  • 转义 HTML 标签(true):最终输出的文本会将 HTML 标签转换为纯文本形式:
&lt;p&gt;今天天气真好&lt;/p&gt;
&lt;a href=&quot;http://example.com&quot;&gt;点击这里&lt;/a&gt;
  • 不转义 HTML 标签(false):最终输出的文本会保留原始 HTML 标签:
<p>今天天气真好</p>
<a href="http://example.com">点击这里</a>

使用场景:

  • 网页内容生成:如果生成的内容将直接插入到 HTML 页面中,且希望保留 HTML 格式,应设置为 false
  • 纯文本输出:如果生成的内容将用于非 HTML 环境(如日志、纯文本文件),建议设置为 true,以避免 HTML 标签干扰。

总结“转义 HTML 标签就是‘把尖括号换成纯文本’:true 避免浏览器解析,false 保留原始格式。”

4.12 启用思考模式

在这里插入图片描述
推理(predict)阶段,让模型在生成最终回答之前,先输出一段思考过程(Chain-of-Thought)。

  • 思考过程 是模型在生成回答时的中间步骤,通常包含逻辑推理、计算过程或决策路径。
  • 启用思考模式可以帮助用户更好地理解模型的决策过程,提高透明度和可解释性。

假设用户输入:

"今天天气怎么样?"

启用思考模式后,模型可能会输出:

思考:查询今天的天气信息,需要调用天气 API,获取当前城市的天气数据。
回答:今天天气晴朗,最高温度 30 度。

使用场景:

  • 教育用途:帮助学生理解模型的推理过程,提高学习效果。
  • 复杂任务:如数学计算、逻辑推理,思考模式可以展示中间步骤,便于用户验证。
  • 调试阶段:在开发或优化模型时,启用思考模式可以帮助开发者理解模型的行为。

总结“启用思考模式就是让模型‘先说说怎么想的’,再给出答案,提高透明度。”

5. 导出(Export)

在这里插入图片描述

5.1 最大分块大小

最大分块大小:单个模型文件的最大大小
在这里插入图片描述
最大分块大小(Max Chunk Size):指定导出模型时,每个分块文件的最大大小。

  • 如果模型过大,可通过分块方式导出,防止单个文件过大导致加载或存储问题。
  • 单位通常为 MB 或 GB。

使用场景:

  • 大模型导出:避免单个文件过大而无法上传或加载。
  • 分布式加载:不同设备可并行加载不同分块,提高效率。

总结“控制模型导出文件大小,解决大模型存储和加载问题。”

5.2 导出量化等级

导出量化等级:量化导出模型(none、2、3、4、8)
在这里插入图片描述
导出量化等级(Quantization Level):模型导出时使用的量化精度,可选值如 none2348

  • none:不量化,保持原始精度。
  • 2/3/4/8:降低模型权重精度,减少存储空间和推理计算量,但可能略有精度损失。

使用场景:

  • 推理部署:量化可减少内存占用和计算成本。
  • 原始训练权重保存:不量化保留精度,便于继续训练。

总结“选择量化等级,是在模型精度和存储效率之间做权衡。”

5.3 导出量化数据集

导出量化数据集:量化过程中使用的校准数据集
在这里插入图片描述

导出量化数据集(Quantization Dataset):量化时使用的校准数据集,用于计算权重缩放和偏置。

  • 量化结果依赖于校准数据集的分布。
  • 可指定特定数据集进行量化,以保证推理精度。

使用场景:

  • 量化训练:提高量化模型的准确性。
  • 自定义校准:使用和目标推理任务分布一致的数据集。

总结“量化数据集决定了量化模型的精度表现。”

5.4 导出设备

导出设备:导出模型使用的设备类型(cpu、auto)
在这里插入图片描述

导出设备(Export Device):指定导出模型使用的硬件设备类型,如 cpuauto

  • cpu:在 CPU 上执行导出。
  • auto:根据环境自动选择 GPU 或 CPU。

使用场景:

  • 资源限制:在无 GPU 环境下可选择 CPU 导出。
  • 加速导出:有 GPU 时可自动使用,提升导出速度。

总结“选择导出设备,是为了兼顾导出速度和硬件资源。”

5.5 导出旧格式

导出旧格式:不适用safetensors格式保存模型
在这里插入图片描述
导出旧格式(Export Legacy Format):是否使用非 safetensors 格式保存模型。

  • 开启:使用传统格式(如 .pt.bin),兼容老版本工具。
  • 关闭:使用 safetensors,安全且防止权重被篡改。

使用场景:

  • 兼容旧工具:老版本推理或训练工具可能不支持 safetensors。
  • 安全性需求:推荐使用 safetensors 防止模型被修改。

总结“决定保存模型的文件格式,是兼容性和安全性的权衡。”

5.6 导出目录

导出目录:保存导出模型的文件夹路径
在这里插入图片描述
导出目录(Export Directory):保存导出模型的文件夹路径。

  • 可以指定绝对路径或相对路径。
  • 文件夹中会生成模型权重、配置文件及可选分块文件。

使用场景:

  • 集中管理:统一存放导出模型便于部署和备份。
  • 多版本管理:为不同版本或量化等级指定不同目录。

总结“导出目录就是模型文件最终落脚的位置。”

5.7 HF Hub ID

HF Hub ID(非必填):用于将模型上传至Hugging Face Hub的仓库ID
在这里插入图片描述
HF Hub ID(Hugging Face Hub Repository ID,可选):将模型上传至 Hugging Face Hub 时使用的仓库 ID。

  • 如果填写,则导出后可直接上传至指定仓库。
  • 不填写则仅在本地保存。

使用场景:

  • 模型共享:上传 Hugging Face Hub 便于团队或社区使用。
  • 版本控制:通过 Hub 管理模型版本和更新。

总结“HF Hub ID 是模型上传到 Hugging Face 仓库的唯一标识。”

5.8 额外参数

在这里插入图片描述
额外参数(Extra Parameters):以 JSON 格式传递给训练器的额外参数,用于控制导出行为。

  • 可设置一些高级选项,如自定义权重处理、特殊优化等。
  • 格式示例:
{
  "use_fp16": true,
  "optimize_for_inference": true
}

使用场景:

  • 高级自定义:满足特殊导出需求。
  • 调试与优化:控制导出过程中模型的行为或格式。

总结“额外参数让导出更灵活,支持个性化需求。”

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐