【免费下载链接】verl-omni
Multimodal RL training framework for diffusion & omni models
VeRL-Omni 是面向 diffusion 与 omni 多模态生成模型的强化学习训练框架,内置的ModelMerger工具可以把 FSDP 分布式检查点直接导出为可部署的 Diffusers pipeline 或独立 transformer,同时支持 LoRA 适配器导出与权重融合,覆盖 Qwen-Image、Flux、SD3.5、Wan2.2、LTX2、MiniMax-H3 等 8 种架构,全程自动校验、开箱即用。
为什么 FSDP 检查点无法直接部署
多卡训练时,FSDP2 会把模型权重按 rank 切片存成多个文件:
actor/ fsdp_config.json model_world_size_2_rank_0.pt model_world_size_2_rank_1.pt huggingface/config.json这类分片权重既不能被from_pretrained()直接加载,也不能上传给推理服务——你必须先把所有 rank 的 DTensor 分片精确重组回完整权重,再打包成标准模型目录。ModelMerger 自动完成了这三件事:
- 自动识别架构:读取
model_index.json/config.json中的_class_name,失败即报错,绝不做模糊猜测; - 重建并回验:逐个重组 DTensor 分片,并与原始分片做往返比对,确保一个数值都不差;
- 审计式发布:输出 SHA256 清单
merge_manifest.json,Linux 上通过原子 rename 发布,不会覆盖已有目录。
一步导出:merge 命令快速上手
准备好三个互不重叠的本地目录:训练保存的 actor 检查点、与训练时同源的 base 模型、一个尚不存在的输出目录。然后执行:
python -m verl_omni.model_merger merge \ --backend fsdp \ --local_dir "$ACTOR_CHECKPOINT" \ --target_dir "$OUTPUT" \ --base_model "$BASE_PIPELINE" \ --trust-checkpoint命令成功后会打印 JSON,包含输出目录与 manifest 路径。常用选项:
| 参数 | 作用 |
|---|---|
--output_format pipeline(默认) | 导出完整 pipeline:只替换训练过的 transformer,其余 base 组件原样保留 |
--output_format transformer | 只导出独立 transformer 组件,用对应类的from_pretrained()加载 |
--dtype float16 | 导出时转换精度(默认preserve保持原样) |
--max_shard_size | 输出 safetensors 分片大小预算(字节,默认 2 GiB) |
--hf_upload_path ORG/REPO | 发布并校验通过后自动上传,可加--private |
也可以直接调用 Python API(入口定义在 model_merger/init.py):
from verl_omni.model_merger import ModelMergerConfig, merge_model result = merge_model(ModelMergerConfig( operation="merge", backend="fsdp", local_dir=checkpoint_dir, target_dir=output_dir, base_model=base_pipeline_dir, trust_checkpoint=True, ))支持哪些架构:8 种模型全覆盖
导出器与训练算法无关——FlowGRPO、DiffusionNFT、DPO 只要保存的是完整的 transformer,就用同一个发布器。当前注册的架构见 architectures.py:
| 架构 | 规范 transformer | pipeline 导出 |
|---|---|---|
| Qwen-Image / Qwen-Image-Edit | QwenImageTransformer2DModel | ✅ 含 processor |
| SD3 / SD3.5 | SD3Transformer2DModel | ✅ 含三组 text encoder/tokenizer |
| Flux | FluxTransformer2DModel | ✅ |
| Wan / Wan2.2 | WanTransformer3DModel | ✅ 保留可选的transformer_2 |
| LTX-2 | LTX2VideoTransformer3DModel | ✅ 含音频 VAE 与 vocoder |
| MiniMax H3 | MiniMaxH3Transformer3DModel | ✅ 自动转换为原生 H3 包 |
| Boogu-Image | BooguImageTransformer2DModel | ✅ |
值得一提的是 MiniMax H3:导出 pipeline 时,ModelMerger 会自动完成 Diffusers 命名到原生MiniMaxH3DiTModel的 QKV/GEGLU 布局转换,并合成校验rope.inv_freq(转换逻辑见 fsdp_model_merger.py)。
LoRA 检查点:导出适配器还是融合成完整模型
LoRA 训练产物有两条导出路径:
- 默认:自动检测 LoRA 权重。LoRA-only 检查点只导出
lora_adapter/(adapter_config.json+adapter_model.safetensors),无需本地 base 模型;完整检查点则按选定 layout 导出全模型,并额外附上适配器目录。 - 加
--fuse-lora:把选定适配器按W + (lora_alpha / r) * B @ A融合进完整权重(fp32 计算后回写原精度),导出即部署,推理端不需要 PEFT 支持。
python -m verl_omni.model_merger merge \ --backend fsdp \ --local_dir "$LORA_ACTOR_CHECKPOINT" \ --target_dir "$OUTPUT" \ --base_model "$BASE_PIPELINE" \ --adapter-name default \ --fuse-lora \ --trust-checkpoint融合计划会写入 manifest 的lora_fusion字段,记录适配器名、rank、alpha、缩放系数和被排除的其他适配器;计划校验逻辑在 lora.py。注意:pissa、olora等会改写 base 权重的初始化方式,必须使用完整 state 布局的检查点,LoRA-only 布局会被明确拒绝。
导出后如何验证:test 命令与 merge_manifest.json
发布前,导出器会完成四层校验:pipeline 组件与配置比对、DTensor 分片往返校验、逐 safetensors 分片重开核对值/形状/精度、输入不变性与输出索引核对。结果记录在merge_manifest.json中。
发布完成后,随时可用独立命令复核产物,无需重新加载源检查点(校验实现见 output_validation.py):
python -m verl_omni.model_merger test \ --backend fsdp \ --test_hf_dir "$OUTPUT"手动做加载级检查也很简单:
from diffusers import QwenImagePipeline pipeline = QwenImagePipeline.from_pretrained(output_dir, local_files_only=True)常见问题速查
- 报错
Pickled rank checkpoints require explicit trust_checkpoint=True:FSDP 检查点是 pickle 格式,必须显式加--trust-checkpoint确认你信任该文件。它不是沙箱,请只对可信产物开启。 - 只想要 transformer 组件:加
--output_format transformer,此时--base_model指向 standalone transformer 目录即可。 - 目标目录已存在:导出采用原子 no-replace 发布,直接失败以保护已有产物,先移走旧输出再执行。
- 基础模型含 Python 代码(如原生 MiniMax H3、部分 Boogu 版本):需追加
--trust-remote-code才能复制这些本地资产。 - 显存/内存:rank 文件以 mmap 方式逐个重建张量,不需要驻留完整模型,但也不是硬性 RSS 上限,超大模型请预留余量。
相关文件索引 📚
| 文件 | 说明 |
|---|---|
| verl_omni/model_merger/ | ModelMerger 模块目录 |
| base_model_merger.py | 配置、CLI 参数与生命周期 |
| fsdp_model_merger.py | 张量重建与架构打包核心 |
| lora.py | LoRA 融合计划与权重计算 |
| output_validation.py | 发布产物校验 |
| docs/start/model_merger.md | 官方使用文档 |
| tests/model_merger/ | 全架构回归测试 |
VeRL-Omni ModelMerger 把"FSDP 分布式检查点 → 可部署模型"收敛成了一条命令:自动识别架构、精确重建权重、多层校验加审计清单,让训练成果真正落地部署变得简单、快速、可靠。
【免费下载链接】verl-omni
Multimodal RL training framework for diffusion & omni models
相关推荐
如何用 Ultralytics 统一导出工具把任意 PyTorch 模型导出为 ONNX
如何用 Ultralytics 统一导出工具把任意 PyTorch 模型导出为 ONNX 如果你手里有一个普通的 PyTorch 模型(timm 分类模型、to
人工智能深度学习计算机视觉预训练大麦自动抢票工具实战教程:4步把抢票流程完全自动化
大麦自动抢票工具实战教程:4步把抢票流程完全自动化 开票3秒就灰是什么体验?ticket purchase 这个自动抢票工具把选城市、挑票价、勾观演人、提交订单
GUI 自动化RPA突破性能瓶颈:手把手教你为verl添加FSDP自定义模型
突破性能瓶颈:手把手教你为verl添加FSDP自定义模型 在大语言模型(LLM)训练领域,高效利用计算资源是提升性能的关键。verl(Volcano Engin
人工智能大模型强化学习RLHF分布式训练微调
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考