Chapter 05

命令行参数地图

📌 commit b58b1bdswift sft 的 200+ 参数按 8 组归类

swift sft --help 输出能滚屏好几页。本章按功能归类,让你知道每组在干什么。

5.1八大参数组

典型字段来源文件
Modelmodel / model_type / template / torch_dtypeswift/llm/argument/base_args/model_args.py
Datadataset / split_dataset_ratio / dataset_num_proc / max_lengthdata_args.py
Quantquant_method / quant_bits / bnb_4bit_*quant_args.py
Tunertrain_type / lora_rank / lora_alpha / target_modulestuner_args.py
Trainnum_train_epochs / batch_size / lr / warmup / deepspeedtrain_args.py
RLHFrlhf_type / beta / loss_type / num_generationsrlhf_args.py
Megatrontensor_model_parallel_size / pipeline_model_parallel_sizemegatron_args.py
Infer / Exportadapters / merge_lora / quant_n_samples / output_dirinfer_args.py / export_args.py

5.2Model 组高频字段

字段说明
--model必填,模型 ID 或本地路径
--model_type不填时根据 model 自动识别
--template不填时跟随 model_type
--torch_dtypebfloat16 / float16 / float32
--attn_impl"flash_attn" / "sdpa" / "eager"
--rope_scaling长上下文扩展(linear / dynamic / yarn)

5.3Data 组

字段说明
--dataset可以多个,用空格分隔;#N 取前 N 条
--val_dataset显式 valid 集
--split_dataset_ratio从 train 切出 valid 的比例,0.01 推荐
--dataset_num_proctokenize 并行进程数
--max_length截断长度
--packing开 packing,节省 padding
--streaming大数据集流式加载
--loss_scale"default" / "all" / "agent" / 自定义

5.4Train 组

字段建议
--num_train_epochs1-3
--per_device_train_batch_size视显存
--gradient_accumulation_steps有效 batch / GPU 数 / per_device 计算
--learning_rate1e-4(LoRA)/ 2e-5(full)
--warmup_ratio0.03
--lr_scheduler_typecosine
--gradient_checkpointing显存紧时 true
--deepspeeddefault-zero2 / zero3
--save_steps200
--save_total_limit2-3 避免占盘
--logging_steps10

5.5Tuner 组

字段说明
--train_typefull / lora / dora / longlora / galore / lisa / liger / boft
--lora_rank8-64
--lora_alpha常 = 2× rank
--target_modules"all-linear" 起步
--lora_dropout0.05
--use_doratrue 开 DoRA
--use_rsloratrue 开 rsLoRA
--init_lora_weightstrue / pissa / loftq / olora

5.6Quant 组

字段说明
--quant_methodbnb / hqq / eetq / awq / gptq
--quant_bits4 / 8
--bnb_4bit_compute_dtypebfloat16
--bnb_4bit_quant_typenf4
--bnb_4bit_use_double_quanttrue

5.7Megatron 组

字段说明
--megatron切到 Megatron 后端(详见 ch09)
--tensor_model_parallel_sizeTP
--pipeline_model_parallel_sizePP
--sequence_parallelSP(配合 TP)
--fp8开 FP8(H100/H200)

5.8Infer 组(推理)

字段说明
--adaptersLoRA adapter 路径
--merge_loratrue 合并 LoRA 再推理
--infer_backendpt / vllm / lmdeploy
--stream流式输出
--max_new_tokens256
--temperature / top_p采样

5.9Arguments 真实继承图

v4 之后所有 dataclass 在 swift/arguments/ 下。继承关系比看起来复杂:

SftArguments               # swift/arguments/sft_args.py:217
    └─ inherits:
        ├─ TrainingArguments      # trainers/arguments.py
        │     └─ TrainArgumentsMixin + Seq2SeqTrainingArguments  # 继承 HF
        ├─ TunerArguments         # arguments/tuner_args.py
        └─ BaseArguments          # arguments/base_args/

RLHFArguments              # swift/arguments/rlhf_args.py:170
    └─ = TeacherModelArguments + GRPOArguments + PPOArguments
       + RewardModelArguments + SftArguments

含义:

5.10TrainArgumentsMixin 关键字段

trainers/arguments.py:17–80TrainArgumentsMixin 提供 swift 在 HF Trainer 之外加的字段。最常用:

字段含义
tuner_backend "peft" / "unsloth",决定 LoRA 实现走哪个库
vit_gradient_checkpointingVLM 时单独控制 vision tower 的 grad ckpt
router_aux_loss_coef MoE 路由辅助 loss 权重
optimizer 插件名(optimizers_map 自动 lookup),优先级高于 HF 的 optim 字段
loss_type "ce" / "dft" / "nll" 等,走 swift/loss/loss_map.py
metric 评测插件名
acc_strategy "token" / "seq" 选择 accuracy 计算粒度
ds3_gather_for_generation DeepSpeed ZeRO-3 时 generation 前是否 all-gather

5.11RLHFArguments 9 个 rlhf_type + 多 loss

rlhf_args.py:169–250 的关键字段:

字段取值 / 含义
rlhf_type dpo / orpo / simpo / kto / cpo / rm / ppo / grpo / gkd 九选一
beta KL 强度,每种算法有不同默认值(DPO 0.1,GRPO 0.001 等)
loss_type 同一算法内的 loss 变种(如 DPO 下走 ipo / sigmoid / hinge)
loss_weights 多损失加权(MPO 模式)
reward_funcs / reward_weightsGRPO 时多 reward function 列表 + 权重
max_completion_length GRPO / PPO 生成长度上限
teacher_model_server GKD 时教师模型走 API 而不是本地加载

5.12YAML / CLI 合并优先级

swift/cli/main.py:38–71

  1. 先解析第一个位置参数(如果是 .yaml/.json 就 load);
  2. YAML 里支持 env 段,自动 export 到环境变量(line 53–59);
  3. YAML 字段 → CLI args(line 61–70);
  4. 剩下的命令行 args 再 override YAML。

所以 swift sft my.yaml --learning_rate 5e-5 一定能让 CLI 学习率覆盖 YAML 的。

5.13这章你需要带走的