LlamaFactory:PPO 的六个参数与四个参考/奖励模型字段

2026-08-09

本文所有事实以 hiyouga/LlamaFactory 官方仓库 2026-08-09 的内容为准,参数默认值全部来自 src/llamafactory/hparams/ 下源码的 field(default=...),仓库身份数字来自同日的 GitHub 仓库信息。我们没有安装、训练或部署过任何模型,也没有读过 PPO 的实现代码,因此本文只谈字段名与默认值,不谈算法。

很多人翻 LlamaFactory 的 PPO 相关资料,翻到的都是”PPO 是什么”,而真正卡住动手的那一步往往更土:配置文件里到底该写哪几个键、不写会是什么值、奖励模型是从哪个字段进来的。 这篇只回答后面这类问题。

先把边界说死:我们读的是 src/llamafactory/hparams/finetuning_args.pymodel_args.py 里的参数定义,不是 PPO 的训练实现。所以下文出现的每一个数字都可以逐字核对,但你不会在这里看到任何”这个值调大会怎样”的说法——那需要读实现、需要跑训练,两件事我们都没做。

先把”六个”怎么数说清楚

ppo_ 为前缀的字段一共五个:

参数默认值
ppo_buffer_size1
ppo_epochs4
ppo_score_normFalse
ppo_target6.0
ppo_whiten_rewardsFalse

第六个不带这个前缀,但它决定你这次训练走的是哪条线——就是 stagestage 的源码默认值是 "sft",同一处的 finetuning_type 默认是 "lora"。也就是说,一份什么都不写的配置,跑的是 LoRA 的 SFT,跟 PPO 没有任何关系;要走 PPO 这条线,stage 必须显式改掉。

这五个 ppo_ 字段本身能读出来的信息其实很有限,但都是硬事实:两个布尔字段 ppo_score_normppo_whiten_rewards 默认都是 False,即默认不开;ppo_target 是这一组里唯一的浮点数,默认 6.0ppo_buffer_size 默认 1ppo_epochs 默认 4 是整数。

我知道你想问这两个布尔开关打开之后有什么区别。老实说:我们没有读过实现,说不了。 该设成什么,取决于你的数据和硬件,官方也没有给出通用值。这类问题唯一靠谱的做法是回 llamafactory-cli train -h 看当前版本对这些字段的说明,而不是听任何人(包括这篇文章)转述。

参考模型与奖励模型:七个字段,六个默认 None

这是 PPO 这条线上真正需要你填东西的地方。同样在 finetuning_args.py 里,一共七个字段:

参数默认值
ref_modelNone
ref_model_adaptersNone
ref_model_quantization_bitNone
reward_modelNone
reward_model_adaptersNone
reward_model_quantization_bitNone
reward_model_type"lora"

这张表的结构一眼就能看出来:参考模型侧三个、奖励模型侧四个,前三个是完全对称的命名——*_model 指路径或名称,*_model_adapters 指适配器,*_model_quantization_bit 指量化位数。奖励模型侧多出来的那一个是 reward_model_type,也是这七个里唯一一个默认值不是 None 的字段,默认 "lora"

标题里说的”四个”指的就是奖励模型侧这四个;参考模型侧另有对称的三个,加起来是七个。写配置时把这两侧分开记,比记一个”七”要省事。

值得单独强调的是那六个 None。它的字面含义只有一条:你不写,它就是 None,不是”框架会替你挑一个”。至于代码拿到 None 之后做什么,我们没有读那段逻辑,不做推断。

这不是我在故意留白。同一个文件里就有一个现成的例子:lora_alpha 的默认值也是 None,而不是某个具体数字——意味着不显式设置时由代码另行决定。这段逻辑我们同样没读过,所以也不会告诉你它”其实等于多少”。把 None 当成”未指定”来理解,比当成”某个隐藏默认值”要安全。

量化字段为什么在两个文件里各有一套

这是配置分层上最容易踩的一处:同一件事——量化——在 LlamaFactory 里有不止一套字段名,分属不同文件。

finetuning_args.py 这边,参考模型和奖励模型各自带一个自己的量化位数字段:ref_model_quantization_bitreward_model_quantization_bit,两个都默认 None

而主模型的量化字段在 model_args.py

参数默认值
quantization_methodQuantizationMethod.BNB
quantization_bitNone
quantization_type"nf4"
double_quantizationTrue
quantization_device_mapNone

从命名上看,这是三套独立的字段:主模型一套、参考模型一套、奖励模型一套。它们各自具体怎么被加载逻辑消费,我们没有读,不推断。但仅就”配置该写在哪”这件事而言,结论已经够用了——**quantization_bitreward_model_quantization_bit 是两个不同的键、住在两个不同的文件里,写配置时要分别落笔。**至于写了一个之后另一个会不会被牵动,属于加载逻辑,我们没读,不推断。

顺带记一个已经被官方文档印证过的对照:double_quantization 的源码默认值是 True,而 README 在 Ascend NPU 那一节让用户显式设 double_quantization: false。默认是开着的,所以那条提示才有必要存在。这个前后对照本身就说明了一件事:源码默认值和示例配置/文档提示里的值不总是一回事,动手前两边都要看一眼。

reward_model_typefinetuning_type 的默认值撞在一起

一个从默认值表里直接读得出来的对照:reward_model_type 默认 "lora"finetuning_type 也默认 "lora"

这只是两处默认值恰好相同这一客观事实,我不会替源码解释它们之间有没有约束关系——那需要读校验逻辑。对写配置的人来说有用的是:这两个键管的是不同的东西(一个说奖励模型怎么来,一个说你这次微调怎么做),改其中一个不等于改了另一个,检查配置时要分别核对。

顺手定位一下 PPO 在参数表里的邻居

ppo_ 那五个字段并不是孤立的,同一个文件里还住着偏好对齐那一族,比如 pref_beta 默认 0.1pref_loss 默认 "sigmoid"pref_ftxpref_bco_weight 都默认 0.0simpo_gamma 默认 0.5dpo_label_smoothing 默认 0.0kto_chosen_weightkto_rejected_weight 都默认 1.0,另有一个 ld_alpha 默认 None

之所以把这些一并列出来,是因为它们和 ppo_* 挤在同一份参数定义里,肉眼扫配置时很容易串行——尤其是 pref_betappo_target 这种都带”目标/系数”意味的名字。真正区分它们的不是含义猜测,而是前缀:ppo_ 开头的归 PPO,pref_ / dpo_ / kto_ / simpo_ 开头的归偏好损失那一族。

这里有一个结构性的观察值得记住:train/ 目录下并没有独立的 orpo / simpo 目录,而参数这边却有 pref_losssimpo_gamma 这类字段。也就是说,这类方法是通过偏好损失参数表达的,不是独立的训练阶段目录。这个结论来自目录结构与参数命名的交叉对照,再往下的算法细节我们不写。关于这一点我们另有一篇专门讲,这里只是帮你在参数表里定位——PPO 的五个字段和这一族是同层的兄弟,不是包含关系。

想自己核对时,去哪个文件查

src/llamafactory/hparams/ 目录实读下来一共 8 个文件:data_args.pyevaluation_args.pyfinetuning_args.pygenerating_args.pymegatron_bridge_args.pymodel_args.pyparser.pytraining_args.py,外加一个 __init__.py。仓库把超参按数据、模型、微调、生成、评测、训练、Megatron 桥接分成了这几个文件。

本文涉及的字段全部来自其中两个:ppo_*stagefinetuning_type、参考/奖励模型七件套在 finetuning_args.py,量化那一组在 model_args.pymegatron_bridge_args.pyparser.pytraining_args.py 里的字段我们没有抽取,不做任何描述。

最后补一句身份信息,方便你对上版本:截至 2026-08-09,hiyouga/LlamaFactory 的 star 是 73947、fork 9049、open issues 1109,许可标注 Apache-2.0。star 数只说明被收藏过多少次,跟这些参数默认值稳不稳定没有关系。另外仓库内部新旧写法并存,LLaMA-Factory(带连字符)和 LlamaFactory 都能见到,搜 issue 时两种拼法都试一遍。

参数会随版本变。 这篇里的每个默认值都标了出处,但真正说了算的是你本地那个版本的 llamafactory-cli train -h。把这张表当成”知道该找哪些键”的索引,而不是当成可以照抄的配置。


本文依据 LlamaFactory 官方仓库(github.com/hiyouga/LlamaFactory)的 README、data/README.mdexamples/ 下的配置与 src/llamafactory/hparams/ 的参数定义整理,核对日 2026-08-09。本文内容为仓库源码与文档口径,我们没有安装、训练或部署过任何模型,文中显存数字均为官方标注的估算值(README 原文标 * estimated)而非实测占用。参数与默认值随版本变动,请以 llamafactory-cli train -h 的实际输出为准。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。