ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【大模型基础|微调实战03】—— ms-swift-3.12-Megatron-SWIFT命令行参数(训练、推理、对齐、量化、部署全参数)

【大模型基础|微调实战03】—— ms-swift-3.12-Megatron-SWIFT命令行参数(训练、推理、对齐、量化、部署全参数) ms-swift 3.12 命令行参数全解训练、推理、对齐、量化、部署ms-swift 的参数文档有几百条全看一遍不现实随手抄一份别人博客里的命令又容易踩版本坑——同一个参数在 3.12 和 4.x 里可能根本不是一回事。这篇文章解决一件事把 3.12 真正会用到的参数按用途分类讲清楚默认值以官方文档为准。覆盖参数的四层结构、传参格式、六大模块的核心参数、Megatron-SWIFT 专有参数以及高频报错。一、先厘清参数的四层结构官方把命令行参数分成四类层级说明你要不要管基本参数Base通用能力如train_type、seed✅ 常用原子参数Atomic训练器底层细项⚠️ 少数场景才动集成参数Integrated继承上面两类命令行最终生效的就是它✅ 主力特定模型参数Model-specific按模型定制走--model_kwargs⚠️ 多模态/特殊模型才用 重点命令行实际生效的是「集成参数」它是基本参数和原子参数的并集。所以查参数时以集成参数文档为准看别处的旧文档容易对不上。另外记住标记规则带 的是官方标注的重要参数新手优先掌握这些。二、传参格式三种传参风格弄混了就会报解析错误。# list空格分隔多数据集、多路径--datasetdata1 data2 data3# dictJSON 字符串模型额外配置--model_kwargs{fps_max_frames: 12}# bool小写 true / false--gradient_checkpointingtrue⚠️ 注意布尔值必须写小写true/false写成True/False会解析失败。JSON 字符串要用单引号把整个字典包起来里面用双引号。三、核心参数速查下面每张表的「默认值」栏均以 ms-swift 3.12 官方文档为准。默认值这东西最容易以讹传讹照抄前先核对。3.1 基本参数参数说明3.12 默认值train_type微调类型loratuner_backend微调后端peft可选peft/unslothadaptersadapter 权重路径列表[]model模型 ID 或本地路径必填model_type模型类型None按--model与 config.json 自动推断use_hf用 HuggingFace 还是 ModelScopeFalse即默认 ModelScopeseed全局随机种子42external_plugins外置插件.py列表[]model_kwargs模型特定参数JSONNone⚠️ 注意3.12 用的是train_type不是tuner_type。tuner_type是 4.x 分支的参数名在 3.12 的参数表里不存在我核查过官方 3.12 文档全文检索tuner_type零命中。这两个版本哪个用哪个很容易记反。tuner_backend的可选值只有peft和unsloth两个。3.2 模型参数参数说明3.12 默认值torch_dtype权重数据类型None读 config.json可选float16/bfloat16/float32device_map设备分配None按可用设备与分布式配置自动决定attn_impl注意力实现None读 config.json可选sdpa/eager/flash_attn/flash_attention_2/flash_attention_3max_model_len模型最大长度Nonerope_scaling长度外推策略None可传linear/dynamic/yarn或直接传 JSONrope_scaling的用法值得单独说传字符串如yarn时Swift 会结合max_model_len自动算出缩放因子传 JSON如{factor: 2.0, type: yarn}时直接替换 config.json 里的rope_scaling。3.3 数据参数参数说明3.12 默认值dataset训练数据[]val_dataset验证数据[]custom_dataset_info外接数据集注册文件[]columns字段映射Nonesplit_dataset_ratio从训练集切验证集的比例0.不切分dataset_num_proc预处理进程数1strict遇到坏样本是否报错False静默丢弃packing样本打包Falsepadding_free免 paddingFalse⚠️ 注意参数名是--custom_dataset_info不是--dataset_info。 重点split_dataset_ratio默认是0.也就是默认不切分验证集。很多人以为它会自动按 5% 切结果训练日志里根本没有验证指标。要验证集要么显式设置这个比例要么用--val_dataset指定。3.4 模板参数参数说明3.12 默认值template对话模板None按模型自动选择system系统提示词字符串或 .txt 路径None用模板的default_systemmax_length单样本最大 token 数None取模型最大支持长度truncation_strategy超长处理delete可选delete/left/right/splitloss_scale损失计算范围defaultloss_scale的可选值比想象中多基础策略有default、last_round、all另有ignore_empty_think和 Agent 相关的react/hermes/qwen等且支持组合例如defaultignore_empty_think。⚠️ 注意数据内的 system 字段优先级高于命令行--system。命令行传了却没生效先看看数据里是不是已经写了 system。3.5 训练参数参数说明3.12 默认值output_dir输出目录—— 建议显式指定num_train_epochs训练轮数3per_device_train_batch_size单卡 batch1gradient_accumulation_steps梯度累积——learning_rate学习率全参1e-5LoRA 等 tuner 为1e-4warmup_ratio预热比例0gradient_checkpointing梯度检查点True默认已开启save_steps保存间隔500eval_steps评估间隔None有验证集时跟随save_stepssave_total_limit最多保留 checkpoint 数None全部保留这几个默认值值得划重点它们和很多教程里写的都不一样learning_rate按微调方式分档全参1e-5、LoRA1e-4不是统一值。warmup_ratio默认是0不是常见的 0.05。gradient_checkpointing默认True省显存但会拖慢训练。想换速度可以显式设false。save_total_limit默认不限制长时间训练会把磁盘塞满建议显式设成 2~3。3.6 LoRA 参数参数说明3.12 默认值lora_rank低秩矩阵的秩8lora_alpha缩放系数32lora_dropoutdropout0.05target_modules目标模块[all-linear]use_dora是否启用 DoRAFalse⚠️ 注意默认lora_rank8、lora_alpha32两者比值是 4不是 2。网上流传的「alpha 必须是 rank 的两倍」是经验说法而非框架约定真正起作用的是alpha/rank这个比值。target_regex优先级高于target_modules——传了正则target_modules会被忽略。3.7 量化参数参数说明3.12 默认值quant_method量化方法None可选bnb/hqq/eetq/quanto/fp8quant_bits量化位数Nonebnb_4bit_quant_type4bit 量化类型nf4可选fp4/nf4bnb_4bit_use_double_quant双量化True⚠️ 注意3.12 没有--load_in_4bit/--load_in_8bit这两个参数。想做 QLoRA正确写法是--quant_methodbnb--quant_bits4如果用的是已经 AWQ/GPTQ 量化好的模型官方明确说明不需要再设quant_method等量化参数。3.8 RLHF 对齐参数参数说明3.12 默认值rlhf_type对齐算法dpo可选dpo/orpo/simpo/kto/cpo/rm/ppo/grpo/gkdbeta与参考模型的偏离程度按算法而异见下ref_model参考模型None取--modelref_adapters参考模型的 adapter[]rpo_alphaDPO 中 SFT 损失的权重None默认不含 SFT 损失desirable_weightKTO 正样本权重1.0undesirable_weightKTO 负样本权重1.0beta的默认值不是统一值官方文档给的分档是算法beta 默认值SimPO2.0GRPO0.04GKD0.5其他DPO / KTO / ORPO 等0.1 重点beta越大表示与参考模型偏离越小越保守。照抄别人的--beta 0.1到 SimPO 上就完全错了。ref_adapters是实用参数SFT 用的 LoRA想让它的权重同时当参考模型可以用--adapters sft_ckpt --ref_adapters sft_ckpt需 ms-swift 3.8。3.9 推理与部署参数参数说明3.12 默认值infer_backend推理后端pt可选pt/vllm/sglang/lmdeploymax_new_tokens最大生成长度None不限stream流式输出None交互式为 True批量推理为 Falsemerge_lora合并 LoRA 权重Falsevllm_max_model_lenvLLM 最大序列长度None读 config.jsonhost部署监听地址0.0.0.0port部署端口8000⚠️ 注意infer_backend默认是ptPyTorch 原生不是 vLLM。想加速必须显式指定--infer_backend vllm。3.10 导出参数参数说明3.12 默认值merge_lora合并 LoRAFalsepush_to_hub推送模型库Falsehub_model_id目标模型 IDNonehub_token访问令牌Nonequant_method导出量化方法None可选gptq/awq/bnb/fp8quant_n_samplesGPTQ/AWQ 校准样本数256quant_batch_size量化 batch1group_size分组大小128导出阶段的quant_method可选项与训练阶段不同训练是bnb/hqq/eetq/quanto/fp8导出是gptq/awq/bnb/fp8。同一个参数名在不同子命令下取值不一样这是很容易踩的坑。四、Megatron-SWIFT 专有参数Megatron-SWIFT 是走 Megatron 并行体系的训练入口参数与上面的通用参数部分不通用。核心差异train_type在 Megatron 下默认是full不是lora。batch size 拆成两层micro_batch_size单卡和global_batch_size全局。显存控制靠激活重计算而非梯度检查点。参数说明3.12 默认值micro_batch_size单设备 batch1global_batch_size全局 batch micro × DP × 梯度累积16recompute_granularity激活重计算粒度selective可选full/selective/nonerecompute_modules重计算的模块[core_attn]attention_backend注意力后端flash可选flash/fused/unfused/local/autotrain_iters总训练迭代数Nonemax_epochs训练轮数Nonetensor_model_parallel_sizeTP 并行度1pipeline_model_parallel_sizePP 并行度1几个要点重计算粒度推荐selective只重算核心注意力部分比full整层重算省时间显存收益却接近。none需要 ms-swift 3.12.3。recompute_modules配 MoE 模型很好用--recompute_granularity selective --recompute_modules core_attn moe能进一步压显存。global_batch_size的算法是micro_batch_size × DP × 梯度累积其中DP 总卡数 / (TP × PP × CP)。调参时按下式反推别瞎试。部分模型不支持 flash attention如 Llama4、GPT-OSS需改成--attention_backend unfused --padding_free false。优化器状态吃显存时可以用--optimizer_cpu_offload true把优化器状态卸到 CPU。五、实战命令5.1 SFT 训练LoRA QLoRACUDA_VISIBLE_DEVICES0swift sft\--modelQwen/Qwen2.5-1.8B-Instruct\--train_typelora\--custom_dataset_infodataset_info.json\--datasetmed_disc med_self_cog\--torch_dtypebfloat16\--quant_methodbnb\--quant_bits4\--num_train_epochs2\--per_device_train_batch_size4\--gradient_accumulation_steps2\--learning_rate1e-4\--lora_rank16\--lora_alpha32\--target_modulesall-linear\--max_length2048\--split_dataset_ratio0.05\--save_total_limit3\--system你是专业医疗助手提供严谨安全的健康咨询不替代医嘱\--output_dir./output_sft注意这里显式设置了--split_dataset_ratio 0.05因为它默认是0.不切分。5.2 偏好对齐DPOCUDA_VISIBLE_DEVICES0swift rlhf\--rlhf_typedpo\--modelQwen/Qwen2.5-1.8B-Instruct\--train_typelora\--adapters./output_sft/checkpoint-xxx\--ref_adapters./output_sft/checkpoint-xxx\--dataset偏好数据集\--beta0.1\--num_train_epochs1\--per_device_train_batch_size2\--learning_rate1e-5\--output_dir./output_dpo5.3 合并 量化 推送CUDA_VISIBLE_DEVICES0swiftexport\--adapters./output_dpo/checkpoint-xxx\--merge_loratrue\--quant_methodawq\--push_to_hubtrue\--hub_model_id你的用户名/qwen2.5-med-1.8b\--hub_token你的 ModelScope 令牌\--use_hffalse5.4 部署为 API 服务CUDA_VISIBLE_DEVICES0swift deploy\--adapters./output_sft/checkpoint-xxx\--infer_backendvllm\--vllm_max_model_len4096\--host0.0.0.0\--port8000六、高频报错排查6.1 用了tuner_type报未知参数原因tuner_type是 4.x 的参数名3.12 已改名。解决换成--train_type。验证swift sft --help | grep -E train_type|tuner_type。6.2 用了--load_in_4bit报未知参数原因3.12 没有这个开关。解决改用--quant_method bnb --quant_bits 4。6.3 布尔值解析失败原因写成了True/False。解决改成小写true/false。6.4 训练日志没有验证指标原因split_dataset_ratio默认是0.压根没切验证集。解决显式设--split_dataset_ratio 0.05或用--val_dataset。6.5beta设了没效果 / 效果异常原因beta默认值随算法而异照抄别的算法的值。解决对照第 3.8 节的分档表确认。6.6 磁盘被 checkpoint 撑爆原因save_total_limit默认None会保留所有 checkpoint。解决显式设--save_total_limit 2或3。七、总结你真正需要记住的 N 件事3.12 用train_type4.x 用tuner_type——反了就报未知参数。命令行最终生效的是「集成参数」查文档以它为准。默认值别照抄博客num_train_epochs3、per_device_train_batch_size1、warmup_ratio0、gradient_checkpointingTrue、split_dataset_ratio0.这些和很多教程写的不一样。learning_rate按方式分档全参1e-5、LoRA1e-4。LoRA 默认r8, alpha32比值是 4起作用的是比值不是「alpha 必须等于 2r」。QLoRA 用--quant_method bnb --quant_bits 43.12 没有load_in_4bit。beta的默认值按算法区分SimPO 是 2.0DPO/KTO 是 0.1。quant_method在训练和导出阶段取值不同别拿训练的可选值去导出。验证清单swift sft --help | grep train_type能查到参数LoRA 命令里用的是--train_type且位数与--quant_bits配对布尔参数一律小写需要验证集时已显式设置--split_dataset_ratio或--val_dataset已设--save_total_limit防止磁盘写满对齐任务的beta与该算法的官方默认分档核对过导出任务的quant_method用的是导出阶段的可选值参考资源ms-swift 命令行参数通用https://swift.readthedocs.io/en/v3.12/Instruction/Command-line-parameters.htmlms-swift Megatron-SWIFT 命令行参数https://swift.readthedocs.io/en/v3.12/Megatron-SWIFT/Command-line-parameters.htmlms-swift 自定义数据集https://swift.readthedocs.io/en/v3.12/Customization/Custom-dataset.htmlvLLM 引擎参数vllm_*前缀参数的含义见此https://docs.vllm.ai/en/latest/serving/engine_args.html标签#ms-swift #命令行参数 #大模型微调 #LoRA #Megatron #模型部署 #ModelScope
返回列表