总览#
本文档面向使用 LoongForge框架进行具身模型训练的用户,聚焦框架级通用能力,说明框架各模块支持的功能、配置入口及使用方式。具体模型的专用训练方案、数据预处理脚本、性能优化项目请参阅对应的 快速入门 文档。
1. 使用入口与配置约定#
本章说明 embodied 的目录结构与启动脚本约定,并介绍 TrainingArgs / ModelConfig / DataConfig 三类配置对象及其覆盖优先级。
1.1 目录说明#
路径 |
说明 |
|---|---|
|
模型级启动脚本目录,可通过脚本末尾的透传参数覆盖默认配置 |
|
模型默认 YAML 配置目录,包含 |
|
训练入口,负责解析配置、构建 Trainer 并启动训练 |
|
通用训练参数定义文件,负责生成 shell CLI |
|
模型配置路由表,将 |
|
模型组网、模型注册 |
|
数据处理相关功能 |
训练链路如下:
examples/embodied/<model>/run_*.sh
↓
loongforge/embodied/train.py
↓
parse_train_args()
↓
build_model_trainer()
↓
trainer.train()
1.2 启动脚本约定#
启动脚本通常负责设置环境变量、路径、分布式参数与模型默认训练参数,并在命令末尾保留 "$@",用于透传用户追加的 shell flag 或 YAML dotlist 覆盖项:
PYTHONPATH=$LOONGFORGE_PATH:${PYTHONPATH:-} \
torchrun "${DISTRIBUTED_ARGS[@]}" \
"$LOONGFORGE_PATH/loongforge/embodied/train.py" \
"${MODEL_CONFIG_ARGS[@]}" \
"${DATA_ARGS[@]}" \
"${TRAINING_ARGS[@]}" \
"${DISTRIBUTED_TRAINING_ARGS[@]}" \
"${LOGGING_ARGS[@]}" \
"$@"
示例:
bash examples/embodied/pi05/run_pi05_ddp_finetune.sh \
--train-iters 10000 \
--per-device-batch-size 8 \
model.action_horizon=64 \
data.image_size=256
1.3 配置分层#
将配置分为三类对象:
配置对象 |
配置入口 |
作用域 |
示例 |
|---|---|---|---|
|
Shell flag |
训练流程参数 |
|
|
YAML 或 |
模型结构与训练策略参数 |
|
|
YAML 或 |
数据加载与预处理参数 |
|
配置优先级为:
dataclass 默认值 < YAML 配置 < shell flag / dotlist 覆盖
2. 数据处理#
数据处理模块负责:将数据集样本转换为模型可直接消费的 PreparedBatch,用户通过 TrainingArgs 指定数据集格式与 DataLoader 行为,通过 DataConfig 配置模型相关的数据处理逻辑。
数据处理链路:
Dataset
↓
sample-level transform
↓
preprocessor / collate_fn
↓
PreparedBatch
↓
batch.to(device)
↓
model.forward(batch)
2.1 数据集格式#
通过 --dataset-format 选择数据读取格式,支持 LeRobot、HDF5 和 dummy 三种格式。dummy_datasets 可在无真实数据时生成随机样本,用于调试验证。
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
数据格式 |
|
|
|
选择数据集格式 |
数据路径 |
|
|
本地路径或数据集 id |
训练数据路径 |
数据 split |
|
|
字符串 |
数据集切分 |
dummy 样本数 |
|
|
正整数 |
|
2.2 LeRobot 数据策略#
使用 LeRobot 格式时,可通过以下参数进一步控制数据加载行为:指定数据集格式版本(v2.0 / v2.1 / v3.0)、选择针对不同机器人或任务的构建策略、配置视频解码后端,以及指定 Robot型号以匹配 embodiment 的 action-state 布局。
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
LeRobotdataset 版本 |
|
|
|
解析不同 LeRobot 磁盘格式 |
数据策略 |
|
|
|
选择 LeRobot 构建策略 |
视频后端 |
|
|
|
视频解码实现 |
robot 类型 |
|
|
字符串 |
选择 embodiment / action-state layout |
注意:
--video-backend用于指定--lerobotdataset-versionv2.x 系列及其变体的数据读取后端;v3.0 系列默认支持torchcodec、pyav两种后端。
2.3 DataLoader 行为#
本节配置项控制 DataLoader 的 worker 并行度、多进程启动方式、分布式 index 切分与流式读取模式,覆盖从数据预取到超大规模数据集加载的常见需求。
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
worker 数 |
|
|
非负整数 |
每个 rank 的 DataLoader worker 数 |
worker seed |
|
|
布尔开关 |
是否基于 |
多进程上下文 |
|
|
|
DataLoader worker 启动方式 |
分布式采样方式 |
|
|
|
分布式 sampler 的 index 切分方式(可扩展) |
流式读取 |
|
|
布尔开关 |
使用 streaming / iterable dataset |
3. 训练配置#
训练配置模块负责解析 shell 参数和 YAML 文件,并生成 TrainingArgs、ModelConfig、DataConfig 三个类型化配置对象。通用训练能力均通过 TrainingArgs 暴露为 shell flag。
3.1 模型配置选择#
支持以下能力:
通过
--model-name选择预注册模型,自动绑定 YAML、ModelConfig与DataConfig通过
--config-file指定默认 YAML,使用自定义配置文件通过
--tokenizer-path指定 tokenizer 路径(本地路径或 HF repo id)
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
选择模型 |
|
|
|
选择模型 schema、默认 YAML、 |
指定 YAML |
|
|
YAML 文件路径 |
覆盖 |
指定 tokenizer |
|
|
本地路径或 HF repo id |
设置 tokenizer 路径,并同步到 |
注意: 即使使用
--config-file,仍需提供--model-name,用于选择结构化配置类。
3.2 训练基础参数#
本节配置项控制训练规模(迭代步数与 batch 大小)、可复现性(随机种子)与产物输出目录,通过梯度累积在不增加单卡显存的前提下弹性扩大全局 batch。
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
训练总步数 |
|
|
正整数 |
optimizer update 步数 |
每设备 batch |
|
|
正整数 |
单个 rank forward时的micro-batch |
梯度累积 |
|
|
正整数 |
每次 optimizer step 前累积的 micro-batch 数 |
随机种子 |
|
|
整数 |
用于训练初始化与数据随机性控制 |
输出目录 |
|
|
路径 |
保存日志、checkpoint 与运行产物 |
全局 batch 计算方式:
global_batch_size = per_device_batch_size * world_size * gradient_accumulation_steps
3.3 学习率与优化器#
学习率与优化器相关能力较多,本节按「基础调度 → 优化器实现 → 分组学习率」的顺序展开。
支持以下能力:
基础学习率与分模块独立学习率
10 种学习率调度策略,涵盖线性、cosine、polynomial、恒定及带 warmup / min_lr 变体
6 种优化器实现,包含标准 AdamW 及多种 CUDA 融合加速变体
梯度裁剪与权重衰减,支持对 bias / norm 参数单独分组
3.3.1 基础学习率与调度#
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
基础学习率 |
|
|
float |
默认参数组学习率 |
学习率策略 |
|
|
见下表 |
scheduler 类型 |
warmup 步数 |
|
|
非负整数 |
线性 warmup 步数 |
decay 步数 |
|
|
正整数或不传 |
不传时使用 |
最小学习率 |
|
|
float |
decay 下限 |
梯度裁剪 |
|
|
float, |
最大梯度范数 |
权重衰减 |
|
|
float |
decoupled weight decay 系数 |
权重衰减分组 |
|
|
|
是否对 bias / norm 参数禁用 weight decay |
--lr-decay-style 支持 10 种调度策略,涵盖linear、cosine、polynomial等。
取值 |
说明 |
|---|---|
|
warmup 后线性衰减 |
|
warmup 后 cosine 衰减 |
|
cosine 衰减并带 hard restart |
|
polynomial decay |
|
恒定学习率 |
|
warmup 后保持恒定 |
|
inverse sqrt decay |
|
cosine 衰减到 |
|
带最小 LR 的 cosine warmup |
|
框架自定义 cycle linear scheduler |
3.3.2 优化器实现#
通过 --optimizer 指定优化器实现,支持标准 AdamW、多种融合加速实现(PyTorch / TransformerEngine / Apex)及 Adam、SGD:
取值 |
说明 |
|---|---|
|
标准 AdamW |
|
PyTorch fused AdamW |
|
TransformerEngine FusedAdam |
|
Apex FusedAdam |
|
torch Adam |
|
torch SGD |
Fused Adam 加速实现说明:
TEFusedAdamW:将参数更新融合为单次 CUDA kernel,显著降低显存带宽压力,依赖
Transformer-engineApexFusedAdamW:多参数组融合更新,在大模型场景下优化器步骤耗时更低,依赖
apex
3.3.3 模块级分组学习率#
通过 --lr-group 为不同模块配置独立学习率,常用于微调时对 backbone 使用较小学习率、对动作头使用较大学习率,未匹配的参数使用 --lr-base。
配置项:
--lr-group默认值:
None(不启用,所有参数统一使用--lr-base)格式:
module.path=lr,module.path=lr
示例:
bash examples/embodied/pi05/run_pi05_ddp_finetune.sh \
--lr-base 1.0e-4 \
--lr-group "model.backbone=1.0e-5,model.action_head=1.0e-4"
配置规则:
路径匹配顺序敏感,子模块路径应位于父模块路径之前
未匹配参数使用
--lr-base模块路径以模型实现中的实际属性路径为准
3.4 Checkpoint#
Checkpoint 模块提供以下能力:
权重保存:支持 safetensors、pt、dcp 三种格式,其中 DCP 可启用异步保存
训练状态保存:持久化 optimizer、scheduler、RNG 与 DataLoader 状态,用于断点续训
预训练加载:可指定外部 checkpoint 初始化模型参数
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
加载预训练权重 |
|
|
checkpoint 路径 |
用于初始化模型参数 |
续训 |
|
|
布尔开关 |
从 |
保存间隔 |
|
|
非负整数, |
每 N 个 update step 保存一次 checkpoint |
保存格式 |
|
|
|
checkpoint 文件格式 |
保存训练状态 |
|
|
布尔开关 |
保存 optimizer、scheduler、RNG 与 DataLoader 状态 |
异步保存 |
|
|
布尔开关 |
DCP 格式下可启用异步保存 |
续训示例:
bash examples/embodied/pi05/run_pi05_ddp_finetune.sh \
--output-dir /path/to/previous_run \
--resume
3.5 日志与监控#
支持以下监控方式:
控制台 metrics 日志,可配置记录间隔与阶段计时详细程度
W&B 集成,支持 online / offline / disabled 三种模式
TensorBoard 集成,指定目录即可启用
可按 rank 粒度控制 loss 聚合与输出来源
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
日志间隔 |
|
|
正整数 |
每 N 步记录 metrics |
详细计时间隔 |
|
|
非负整数 |
每 N 步记录阶段耗时 |
计时日志级别 |
|
|
|
阶段耗时日志详细程度 |
W&B 项目 |
|
|
字符串 |
W&B project 名称 |
W&B 模式 |
|
|
|
W&B 启用模式 |
TensorBoard 目录 |
|
|
路径 |
不传表示关闭 TensorBoard |
loss 日志 rank |
|
|
rank 列表, |
控制 loss 聚合与输出来源 |
3.6 冻结训练#
通过 --freeze-modules 冻结指定模块参数,常用于微调时固定视觉编码器或语言模型主干,仅更新动作头等目标模块。模块路径以模型实现中的 named_modules() 为准,具体模型的常用冻结路径在对应 Quick Start 中说明。
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
冻结模块 |
|
空字符串(不冻结任何模块) |
逗号分隔模块路径 |
将匹配模块参数设置为 |
4. 分布式 Trainer#
Trainer 模块负责训练生命周期编排,包括分布式上下文初始化、模型构建、权重加载、模型包装、优化器与 scheduler 构建、DataLoader 构建、训练循环、日志、checkpoint 与资源清理。
4.1 Trainer 选择#
通过 --trainer-type 选择训练器,可选值为 trainer_builder.py 中注册的 Trainer 类名。默认的 FinetuneTrainer 适用于标准单数据流的监督微调;若涉及多数据流、特殊 loss 组合或非标准 step 调度,可在 trainer_builder.py 中注册自定义 Trainer 类。
4.2 分布式策略#
支持两种分布式并行策略:
DDP:标准数据并行,适用于模型与 optimizer state 均可放入单卡的场景;可叠加 ZeRO-1 分片 optimizer state 以节省显存
FSDP:全参数分片,适用于模型、梯度或 optimizer state 超出单卡显存的场景;支持 HSDP(二维 mesh 分片)
训练精度支持 bfloat16(默认)、float16、float32。
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
分布式策略 |
|
|
|
选择 DDP 或 FSDP |
训练精度 |
|
|
|
模型训练 dtype |
DDP ZeRO-1 |
|
|
布尔开关 |
DDP 下分片 optimizer state |
HSDP shard size |
|
|
正整数 |
FSDP 下启用 HSDP |
DDP 示例:
bash examples/embodied/pi05/run_pi05_ddp_finetune.sh \
--distributed-strategy ddp \
--dtype bfloat16
FSDP 示例:
bash examples/embodied/pi05/run_pi05_fsdp_finetune.sh \
--distributed-strategy fsdp \
--dtype bfloat16
DDP + ZeRO-1 示例:
bash examples/embodied/pi05/run_pi05_ddp_finetune.sh \
--distributed-strategy ddp \
--zero-optimizer
策略选择建议:
场景 |
建议 |
|---|---|
模型参数与 optimizer state 可完整放入单卡 |
DDP |
模型可放入单卡,但 optimizer state 显存占用较高 |
DDP + ZeRO-1 |
模型、梯度或 optimizer state 难以放入单卡 |
FSDP |
多节点训练,希望参数分片限制在 shard group 内、减少跨节点 FSDP 通信 |
FSDP + HSDP |
4.2.1 DDP / ZeRO 通用参数#
以下参数提供对 DDP 策略的通信行为和 ZeRO-1 的精细控制,仅在 --distributed-strategy ddp 时生效:
DDP 行为:可调节未使用参数检测、静态图优化、bucket 大小与 bucket view,用于减少通信开销或节省内存
ZeRO-1:开启后分片 optimizer state,可进一步配置 bucket view 和 fp32 master 参数维护
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
未使用参数检测 |
|
|
布尔开关 |
模型存在条件分支时通常需要保持开启 |
静态图优化 |
|
|
布尔开关 |
计算图每步稳定时可开启 |
bucket view 梯度 |
|
|
布尔开关 |
复用 DDP bucket 内存 |
DDP bucket 大小 |
|
|
整数 MB |
控制 DDP all-reduce bucket 大小 |
ZeRO-1 |
|
|
布尔开关 |
分片 optimizer state |
ZeRO bucket view |
|
|
布尔开关 |
ZeRO 下复用 bucket 内存 |
ZeRO master 参数 |
|
|
|
是否维护 fp32 master 参数 |
示例:
bash examples/embodied/pi05/run_pi05_ddp_finetune.sh \
--distributed-strategy ddp \
--no-ddp-find-unused-parameters \
--ddp-static-graph
4.2.2 FSDP 通用参数#
以下参数提供对 FSDP 分片、wrap 策略和 dtype 的精细控制,仅在 --distributed-strategy fsdp 时生效:
分片与 reshard:控制 forward 后是否立即 reshard,可针对 root group 单独配置
wrap 策略:可手动指定或排除 FSDP unit 类,也可按参数量阈值自动包装
dtype 控制:分片前参数 dtype、all-gather 后 dtype 与梯度 reduce dtype 均可独立配置
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
HSDP |
|
|
正整数 |
启用二维 mesh 的 shard 维度 |
默认 reshard 策略 |
|
|
|
控制 forward 后参数 reshard |
root reshard 策略 |
|
|
|
root FSDP group 的 reshard 策略 |
指定 wrap 类 |
|
|
逗号分隔模块类名 |
指定 FSDP unit |
排除 wrap 类 |
|
|
逗号分隔模块类名 |
排除指定模块类 |
自动 wrap 阈值 |
|
|
非负整数 |
自动包装重复层的参数阈值 |
leftover wrap 阈值 |
|
|
非负整数 |
自动包装剩余模块的参数阈值 |
原始参数 dtype |
|
|
|
FSDP 分片前参数 dtype |
unsharded 参数 dtype |
|
|
|
all-gather 后前向/反向 dtype |
reduce dtype |
|
|
|
梯度 reduce dtype |
cast forward inputs |
|
|
布尔开关 |
是否将输入 cast 到参数 dtype |
4.3 稳定性与运行时控制#
训练过程中如遇 loss 异常波动、数值不稳定或显存 OOM,可通过以下手段介入:
loss spike 防护与 NaN/Inf 检查,保障训练健壮性
确定性模式与 TF32 禁用,用于结果复现对齐
手动 GC 模式,减少 GC 引入的步间抖动
功能 |
配置项 |
默认值 |
取值 / 类型 |
说明 |
|---|---|---|---|---|
loss spike 防护 |
|
|
float |
loss 超过阈值或为 NaN/Inf 时,该次 loss 贡献置零 |
NaN / Inf 检查 |
|
|
布尔开关 |
检查 loss 与 gradient 中的异常值 |
确定性模式 |
|
|
布尔开关 |
启用确定性算法 |
禁用 TF32 |
|
|
布尔开关 |
禁用 CUDA TF32 |
手动 GC |
|
|
布尔开关 |
关闭自动 GC 并改为显式触发 |
手动 GC 间隔 |
|
|
非负整数 |
|