Skip to main content
目录版本为 4.5.3,两个后端。Hugging Face Trainer 后端八个方法:sft,以及 swift rlhf 背后的 dpo / kto / cpo / orpo / rm / grpo / gkd。Megatron 后端另有三个:megatron-sftmegatron-grpomegatron-gkd。配置是扁平的命令行参数 —— 只有一层,没有点号路径 —— 适配器把训练 入口放在 torchrun 下启动。
ms-swift 没有发布同时带 vLLM、Ray 和 DeepSpeed 的 GPU 镜像,而且它自己声明的依赖是区间而不是 固定版本。管理员需要用 deploy/docker/Dockerfile.msswift 构建一张并设置 TUNEPLANE_IMAGE_MS_SWIFT,或者登记 ms-swift-4.5.3 这个 runtime id,之后才能提交作业。它不能和 TRL 共用镜像:ms-swift 要求 trl<1.0,而 TRL runtime 是 trl==1.10.0

参数绑到哪些字段

和 verl、TRL 不同,这里验证集文件是可选的。改设 split_dataset_ratio,ms-swift 会从训练集里切一份 出来;显式传了 --validation-data 就用显式的那份,比例参数被忽略。 训练数据是本地的 jsonl / json / csv / parquet 文件,经 datasets 读取,所以扩展名决定用哪个 loader。列名遵循 ms-swift 自己的 schema(messages,或 query/response)—— 平台不做重映射。

LoRA 是一个参数,不是另一个方法

八个方法都认 tuner_typefull 训练全部参数,lora 只训练适配器。学习率跟着它走 —— LoRA 大约要 全参的 10~100 倍,ms-swift 自己的默认值分别是 1e-51e-4 其余一切不变,导出也一样。平台读的是这一趟实际写出来的东西:全参 checkpoint 直接登记,适配器 目录用 swift export --merge_lora 合回底座模型。没有 -lora 方法要挑,也没有格式会选错。

实验配置是逃生口

实验里的 config.yaml 承载这个方法没有暴露成参数的 ms-swift 标志,扁平书写:
如果某个标志本身就是这个方法的参数,或者是平台自己设定的(modeldatasetval_datasetoutput_dirlogging_diradd_versionreport_to),会被拒绝而不是被忽略 —— 请去设那个参数, 这样控制台显示的才是真正生效的值。

一个 GRPO trainer,多个已发表方法

importance_sampling_level=sequence 就是 GSPO。epsilon_high 设得比 epsilon 大就是 DAPO 的 clip-higher。advantage_estimator 能切到 RLOO 和 REINFORCE++。scale_rewards=none 是 Dr. GRPO 的 无偏形式。这些都不需要换一个方法。 偏好这一族也一样:ms-swift/cpoloss_type=simpo 就是 SimPO,而 CPO 和 ORPO 都完全不加载参考 模型 —— 同样模型规模下显存大约是 DPO 的一半。 rollout 引擎 vLLM 跑在训练卡上(vllm_mode=colocate),所以 vllm_gpu_memory_utilization 要和训练 状态共享同一张卡的显存,OOM 时先动它 —— 在动 batch size 之前。

Megatron 后端

用张量/流水线/上下文/专家并行代替 ZeRO 切分 —— 这正是大规模 MoE 能训得起来的原因。它是单独一张镜像 (Dockerfile.msswift-megatron)和单独一个设置(TUNEPLANE_IMAGE_MS_SWIFT_MEGATRON),因为 Megatron-core 与 TransformerEngine 不在另一张里。模型在 Hugging Face 后端放得下就用那个:模型覆盖 一样,栈更简单。 megatron-grpomegatron-gkd 走 ms-swift 自己的 Ray 流水线,这是 ms-swift 唯一用到 Ray 的地方。 placement 由平台编译 —— 每个 worker 组拿几张卡、横跨几台机器、哪些组共卡 —— 来自 profile 与角色到 资源池的映射。config.yaml 里不需要也不允许写卡的事,写了会被拒绝。把 rollout(或 teacher)角色 映射到独立资源池就能给它独立的卡;映射到同一个池,这些组会被声明为共卡。 Megatron-core 自己的参数(save_intervaleval_intervallog_interval)放在实验的 config.yaml 里,而不是作为超参 —— 它们属于上游 Megatron 的参数面,不是 ms-swift 的,目录不会装作拥有它们。

确认成功

tp job logs 会先打出数据预处理,然后是第一个优化步。Charts 页开始出现 train/losstrain/token_accuracy(GRPO 则是 train/rewardtrain/reward_zero_std_frac)。盯住最后这个: 一组回复全部得分相同,优势就是 0,也就没有梯度,而 loss 曲线看上去照样在动。 ms-swift 的运行不上报验证样本 —— 它在 trainer 见到数据之前就完成了编码,共用的样本观察器拿不到文本。 指标序列不受影响。

下一步

方法目录 · 自定义镜像讲部署方怎么发布一个 · 流水线