YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
LingBot-VA 官方 SFT / Post-training Smoke 工程验证 README
适用仓库建议名:
lingbot-va-official-sft-smoke
当前项目目录:/root/autodl-tmp/projects/lingbot-va_official_sft
当前验收状态:project_smoke_status = PASS
最终口径:1-step SFT smoke = PASS,checkpoint transformer-only reload continuation = PASS,full trainer-state resume = NOT_SUPPORTED_BY_CURRENT_OFFICIAL_CHECKPOINT
0. 先看结论
这个项目不是完整训练收敛项目,也不是 LIBERO 结果复现项目。
它的目标是把 LingBot-VA 官方 full-parameter post-training / SFT 工程链路 在本机上跑通,并整理成后续集群可接手的交付包。
当前已经验证通过:
官方 lingbot-va-base 权重完整
官方 libero-long-lerobot latent LeRobot 数据完整
empty_emb.pt 已生成
CUDA / BF16 / NCCL / Flex Attention 基础审计通过
datasets==4.0.0 可读取官方 parquet metadata 中的 List feature
MultiLatentLeRobotDataset / DataLoader 可构造真实 batch
官方 train entry dry audit 已确认使用 wan_va.modules.utils.load_transformer
load_transformer 加载的是 LingBot-VA 本地扩展版 WanTransformer3DModel,不是 diffusers 原生类
1-step full-parameter SFT smoke 已通过
latent_loss / action_loss 有限
backward / optimizer.step / lr_scheduler.step 已通过
checkpoint_step_1 transformer 权重保存成功
checkpoint_step_1 transformer-only reload continuation 到 checkpoint_step_2 已通过
checkpoint_step_2 可用 LingBot-VA 本地 WanTransformer3DModel 最小加载
必须保留的限制:
当前官方 checkpoint 只保存 transformer/config.json 与 transformer/diffusion_pytorch_model.safetensors。
没有保存 optimizer state / scheduler state / global_step / trainer_state / training_state.pt。
因此不能写“完整 trainer-state resume 已通过”。
只能写“transformer 权重可重载并继续训练一步”。
1. 项目到底是什么
1.1 项目定位
本项目定义为:
LingBot-VA 官方全参数 SFT / post-training 工程验证
更准确地说:
LingBot-VA official full-parameter post-training smoke test
训练初始化:
robbyant/lingbot-va-base
训练对象:
LingBot-VA Video-Action Transformer / WanTransformer3DModel
训练目标:
video latent prediction loss
+
action prediction loss
不训练:
Wan VAE
text_encoder
tokenizer
数据预处理 encoder
原因:官方 libero-long-lerobot 数据已经包含预计算好的 video latent 和 text_emb,训练阶段直接读取 latent / text_emb / action。
1.2 不要写错的地方
不能把这个项目写成:
随机初始化从零训练 LingBot-VA
VAE 和文本编码器也全参数训练
LoRA SFT
只训练 action head
用 diffusers 原生 WanTransformer3DModel 训练
完整 trainer-state resume 已通过
LIBERO 成功率复现已通过
5000-step post-training 已完成
正确表述:
官方 base 权重初始化 + 官方 latent LeRobot 数据 + LingBot-VA 本地扩展版 transformer 的 full-parameter post-training smoke 链路已跑通。
2. 当前目录结构
项目根目录:
/root/autodl-tmp/projects/lingbot-va_official_sft
推荐结构:
lingbot-va_official_sft/
├── assets/
│ ├── models/
│ │ └── lingbot-va-base/
│ ├── datasets/
│ │ └── libero-long-lerobot/
│ └── hf_cache/
├── wan_va/
├── script/
├── evaluation/
├── experiments/
│ └── official_sft/
│ ├── configs/
│ ├── scripts/
│ ├── logs/
│ │ ├── install/
│ │ ├── audit/
│ │ ├── train/
│ │ ├── resume/
│ │ └── eval/
│ ├── metadata/
│ ├── runs/
│ ├── reports/
│ └── hf_delivery/
├── SOURCE_COMMIT.txt
├── README_OFFICIAL_SFT_CN.md
├── ENVIRONMENT.md
├── ASSET_MANIFEST.md
└── CLUSTER_RUNBOOK.md
原则:
所有脚本、日志、metadata、report、handoff 文件都放到 experiments/official_sft/ 内。
不要把临时脚本散落到 /root/autodl-tmp 根目录。
3. 环境
3.2 当前 smoke / reader 环境
/root/autodl-tmp/conda_envs/lingbot_va_reader_test
关键版本:
Python = 3.10.16
torch = 2.9.0+cu128
diffusers = 0.36.0
transformers = 4.55.2
lerobot = 0.3.3
datasets = 4.0.0
pyarrow = 24.0.0
说明:
pip check 会提示 lerobot==0.3.3 声明 datasets<=3.6.0 的依赖冲突。
但当前 reader_test 环境已实测通过 parquet 读取、MultiLatentLeRobotDataset、DataLoader、CUDA transfer、模型加载与 1-step smoke。
3.3 激活环境
set +e
set +u
set +o pipefail
source /root/miniconda3/etc/profile.d/conda.sh 2>/dev/null || true
conda activate /root/autodl-tmp/conda_envs/lingbot_va_reader_test
echo "conda_activate_status=$?"
which python
python -V
4. 必需资产
4.1 官方 base 权重
路径:
/root/autodl-tmp/projects/lingbot-va_official_sft/assets/models/lingbot-va-base
验收状态:
size ≈ 23G
safetensors_count = 7
incomplete_count = 0
包含 text_encoder / tokenizer / transformer / vae
关键 transformer config:
_class_name = WanTransformer3DModel
attn_mode = flex
num_layers = 30
num_attention_heads = 24
attention_head_dim = 128
in_channels = 48
out_channels = 48
action_dim = 30
text_dim = 4096
patch_size = [1, 2, 2]
4.2 官方 LIBERO latent 数据
路径:
/root/autodl-tmp/projects/lingbot-va_official_sft/assets/datasets/libero-long-lerobot
验收状态:
size ≈ 4.4G
codebase_version = v2.1
total_episodes = 500
total_frames = 138090
total_tasks = 10
fps = 60
parquet_count = 500
latent_pth_count = 1000
video_mp4_count = 1000
4.3 empty_emb.pt
路径:
/root/autodl-tmp/projects/lingbot-va_official_sft/assets/datasets/libero-long-lerobot/empty_emb.pt
验收状态:
shape = [512, 4096]
dtype = torch.bfloat16
all_zero = True
finite = True
说明:MultiLatentLeRobotDataset 初始化时会无条件加载 empty_emb.pt,即使 cfg_prob=0.0 也需要这个文件。
5. 路径怎么改
训练入口里最重要的三个路径是:
wan22_pretrained_model_name_or_path # base model 路径
dataset_path # LeRobot latent 数据路径
empty_emb_path # empty_emb.pt 路径
在当前工程里,不建议直接改官方源码。推荐方式是写 wrapper,在运行时 patch VA_CONFIGS[CONFIG_NAME]。
推荐统一使用环境变量:
export PROJECT="/root/autodl-tmp/projects/lingbot-va_official_sft"
export MODEL_DIR="$PROJECT/assets/models/lingbot-va-base"
export DATASET_DIR="$PROJECT/assets/datasets/libero-long-lerobot"
export EMPTY_EMB="$DATASET_DIR/empty_emb.pt"
export RUN_ROOT="$PROJECT/experiments/official_sft/runs/my_run"
export CONFIG_NAME="libero_train"
wrapper 内部对应:
cfg = train_mod.VA_CONFIGS[CONFIG_NAME]
cfg.wan22_pretrained_model_name_or_path = MODEL_DIR
cfg.dataset_path = DATASET_DIR
cfg.empty_emb_path = EMPTY_EMB
cfg.save_root = RUN_ROOT
为什么不用官方命令直接传路径?
当前 wan_va/train.py 的 CLI 主要暴露 --config-name 和 --save-root。
模型路径、数据路径、empty_emb_path 等关键参数在 VA_CONFIGS 内。
所以最稳妥的方式是 wrapper 运行时覆盖配置,而不是直接改源码。
6. 已验证 smoke 命令
6.1 1-step SFT smoke
用途:只跑 1 个 optimizer update,验证完整训练链路,不追求收敛。
set +e
set +u
set +o pipefail
PROJECT="/root/autodl-tmp/projects/lingbot-va_official_sft"
TEST_ENV="/root/autodl-tmp/conda_envs/lingbot_va_reader_test"
MODEL_DIR="$PROJECT/assets/models/lingbot-va-base"
DATASET_DIR="$PROJECT/assets/datasets/libero-long-lerobot"
RUN_ROOT="$PROJECT/experiments/official_sft/runs/official_sft_smoke_step1"
META="$PROJECT/experiments/official_sft/metadata/official_sft_smoke_step1_runtime.json"
LOG="$PROJECT/experiments/official_sft/logs/train/official_sft_smoke_step1.log"
source /root/miniconda3/etc/profile.d/conda.sh 2>/dev/null || true
conda activate "$TEST_ENV"
echo "conda_activate_status=$?"
export PROJECT MODEL_DIR DATASET_DIR RUN_ROOT META
export CUDA_VISIBLE_DEVICES=0
export OMP_NUM_THREADS=1
export MKL_NUM_THREADS=1
export TOKENIZERS_PARALLELISM=false
export PYTORCH_ALLOC_CONF="expandable_segments:True"
export PYTHONPATH="$PROJECT:$PROJECT/wan_va:${PYTHONPATH}"
cd "$PROJECT"
echo "cd_status=$?"
python -m torch.distributed.run \
--nproc_per_node=1 \
--master_port=29541 \
--tee 3 \
experiments/official_sft/scripts/run_official_sft_smoke_step1.py \
2>&1 | tee "$LOG"
echo "torchrun_status=${PIPESTATUS[0]}"
验收标准:
final_status = PASS
latent_loss 有限
action_loss 有限
Checkpoint saved successfully at step 1
checkpoint_step_1/transformer/diffusion_pytorch_model.safetensors 存在
6.2 step1 transformer-only reload continuation 到 step2
用途:验证 checkpoint_step_1/transformer 可重载,并继续执行一步训练到 step2。
注意:这不是完整 trainer-state resume。
set +e
set +u
set +o pipefail
PROJECT="/root/autodl-tmp/projects/lingbot-va_official_sft"
TEST_ENV="/root/autodl-tmp/conda_envs/lingbot_va_reader_test"
MODEL_DIR="$PROJECT/assets/models/lingbot-va-base"
DATASET_DIR="$PROJECT/assets/datasets/libero-long-lerobot"
STEP1_CKPT="$PROJECT/experiments/official_sft/runs/official_sft_smoke_step1/checkpoints/checkpoint_step_1"
RUN_ROOT="$PROJECT/experiments/official_sft/runs/official_sft_smoke_step1_reload_to_step2_v2"
META="$PROJECT/experiments/official_sft/metadata/official_sft_reload_step1_to_step2_v2_runtime.json"
LOG="$PROJECT/experiments/official_sft/logs/train/official_sft_reload_step1_to_step2_v2.log"
source /root/miniconda3/etc/profile.d/conda.sh 2>/dev/null || true
conda activate "$TEST_ENV"
echo "conda_activate_status=$?"
export PROJECT MODEL_DIR DATASET_DIR STEP1_CKPT RUN_ROOT META
export CUDA_VISIBLE_DEVICES=0
export OMP_NUM_THREADS=1
export MKL_NUM_THREADS=1
export TOKENIZERS_PARALLELISM=false
export PYTORCH_ALLOC_CONF="expandable_segments:True"
export PYTHONPATH="$PROJECT:$PROJECT/wan_va:${PYTHONPATH}"
cd "$PROJECT"
echo "cd_status=$?"
python -m torch.distributed.run \
--nproc_per_node=1 \
--master_port=29543 \
--tee 3 \
experiments/official_sft/scripts/run_official_sft_reload_step1_to_step2_v2.py \
2>&1 | tee "$LOG"
echo "torchrun_status=${PIPESTATUS[0]}"
验收标准:
Training completed
checkpoint_step_2/transformer/diffusion_pytorch_model.safetensors 存在
accept_official_sft_reload_step1_to_step2_v2.json final_status = PASS
checkpoint_reload_continuation_smoke = PASS
7. 正式训练命令是什么
正式训练不要直接跑 5000 step 前先确认:
集群端 GPU 数
全局 batch size
gradient_accumulation_steps
save_interval
输出路径
是否开启 wandb
是否只做 smoke 还是正式长跑
7.1 推荐正式训练命令
推荐使用 experiments/official_sft/scripts/run_official_sft_posttrain_template.py 这个 wrapper 模板。它通过环境变量改路径和训练参数。
单卡正式训练示例:
set +e
set +u
set +o pipefail
PROJECT="/root/autodl-tmp/projects/lingbot-va_official_sft"
TEST_ENV="/root/autodl-tmp/conda_envs/lingbot_va_reader_test"
source /root/miniconda3/etc/profile.d/conda.sh 2>/dev/null || true
conda activate "$TEST_ENV"
echo "conda_activate_status=$?"
export PROJECT="$PROJECT"
export CONFIG_NAME="libero_train"
export MODEL_DIR="$PROJECT/assets/models/lingbot-va-base"
export DATASET_DIR="$PROJECT/assets/datasets/libero-long-lerobot"
export EMPTY_EMB="$DATASET_DIR/empty_emb.pt"
export RUN_ROOT="$PROJECT/experiments/official_sft/runs/libero_train_5000step_single_gpu"
export NUM_STEPS=5000
export SAVE_INTERVAL=200
export BATCH_SIZE=1
export GRADIENT_ACCUMULATION_STEPS=10
export LOAD_WORKER=8
export CFG_PROB=0.1
export LEARNING_RATE=1e-5
export WARMUP_STEPS=10
export ENABLE_WANDB=false
export CUDA_VISIBLE_DEVICES=0
export OMP_NUM_THREADS=1
export MKL_NUM_THREADS=1
export TOKENIZERS_PARALLELISM=false
export PYTORCH_ALLOC_CONF="expandable_segments:True"
export PYTHONPATH="$PROJECT:$PROJECT/wan_va:${PYTHONPATH}"
mkdir -p "$PROJECT/experiments/official_sft/logs/train" "$RUN_ROOT"
cd "$PROJECT"
echo "cd_status=$?"
python -m torch.distributed.run \
--nproc_per_node=1 \
--master_port=29550 \
--tee 3 \
experiments/official_sft/scripts/run_official_sft_posttrain_template.py \
2>&1 | tee "$PROJECT/experiments/official_sft/logs/train/libero_train_5000step_single_gpu.log"
echo "torchrun_status=${PIPESTATUS[0]}"
双卡示例:
export CUDA_VISIBLE_DEVICES=0,1
export RUN_ROOT="$PROJECT/experiments/official_sft/runs/libero_train_5000step_2gpu"
python -m torch.distributed.run \
--nproc_per_node=2 \
--master_port=29551 \
--tee 3 \
experiments/official_sft/scripts/run_official_sft_posttrain_template.py \
2>&1 | tee "$PROJECT/experiments/official_sft/logs/train/libero_train_5000step_2gpu.log"
7.2 从 transformer checkpoint 继续训练
只做 transformer 权重重载 continuation:
export RESUME_FROM="$PROJECT/experiments/official_sft/runs/libero_train_5000step_2gpu/checkpoints/checkpoint_step_200"
export RUN_ROOT="$PROJECT/experiments/official_sft/runs/libero_train_continue_from_step200"
export NUM_STEPS=5000
说明:
RESUME_FROM 指向 checkpoint_step_xxx 目录。
官方 Trainer 会加载 RESUME_FROM/transformer。
但当前官方 checkpoint 不包含 optimizer/scheduler/global_step,所以这不是完整 trainer-state resume。
8. 当前已有关键脚本
experiments/official_sft/scripts/setup_official_sft_env.sh
experiments/official_sft/scripts/launch_official_sft_smoke_step1.sh
experiments/official_sft/scripts/run_official_sft_smoke_step1.py
experiments/official_sft/scripts/launch_official_sft_reload_step1_to_step2.sh
experiments/official_sft/scripts/run_official_sft_reload_step1_to_step2_v2.py
experiments/official_sft/scripts/audit_official_resume_capability.py
experiments/official_sft/scripts/accept_official_sft_reload_step1_to_step2_v2.py
experiments/official_sft/scripts/launch_official_sft_posttrain.sh
experiments/official_sft/scripts/run_official_sft_posttrain_template.py
experiments/official_sft/scripts/upload_to_hf.sh
experiments/official_sft/hf_delivery/README_OFFICIAL_SFT_CN.md
推荐保留这些脚本到 HF 交付仓库。
9. 后续如果要加别的数据集作为 baseline,怎么搞
9.1 先判断数据格式
LingBot-VA 当前训练入口吃的是 MultiLatentLeRobotDataset,核心不是普通视频数据,而是官方预处理后的 latent LeRobot 数据。
新数据集必须最终整理成类似:
LeRobot metadata + parquet episode 数据
预计算 video latent .pth
预计算 text_emb
动作 action
状态 observation.state
empty_emb.pt
最低要求:
1. meta/info.json 存在
2. meta/tasks.jsonl 存在
3. meta/episodes.jsonl 存在
4. data/chunk-xxx/file-xxxxx.parquet 存在
5. 每个 episode 对应 latent 文件可读
6. latent dtype/shape 与模型训练入口兼容
7. text_emb shape = [512, 4096]
8. action 能映射到 action_dim=30 / action_per_frame=4 的训练格式
9. empty_emb.pt 存在
9.2 新数据集接入流程
建议按这个顺序做,不要直接开训练:
A. 新建 assets/datasets/<dataset_name>/
B. 放入或生成 LeRobot parquet + metadata
C. 放入或生成 latent pth / text_emb
D. 生成 empty_emb.pt
E. 做资产 manifest
F. 单 parquet load_dataset 测试
G. MultiLatentLeRobotDataset 初始化测试
H. DataLoader batch 测试
I. batch CUDA transfer 测试
J. 1-step smoke
K. checkpoint 保存测试
L. transformer-only reload continuation 测试
M. 再进入长步数训练
9.3 新数据集路径怎么配
假设新数据集叫:
my_new_baseline_dataset
路径:
/root/autodl-tmp/projects/lingbot-va_official_sft/assets/datasets/my_new_baseline_dataset
训练时只改:
export DATASET_DIR="$PROJECT/assets/datasets/my_new_baseline_dataset"
export EMPTY_EMB="$DATASET_DIR/empty_emb.pt"
export RUN_ROOT="$PROJECT/experiments/official_sft/runs/my_new_baseline_dataset_smoke"
其他参数先不动。
9.4 新数据集需要重点查什么
必须查:
parquet 是否能被 datasets==4.0.0 读取
latent shape 是否仍是 [48, T, H, W] 相关格式
text_emb 是否是 [512, 4096]
action 原始维度是否是 7,或是否能映射到 used_action_channel_ids=[0..6]
任务文本是否存在
fps / frame_ids 是否合理
数据集 episode 数、frame 数是否正常
是否有 NaN/Inf
如果 action 维度不同:
不要直接训练。
先改 config.used_action_channel_ids / action_dim / action_per_frame 或写动作适配层。
否则 action loss 可能形状对不上,或者学到错误动作定义。
如果没有预计算 latent:
不能直接用当前 post-training 入口训练。
必须先跑 LingBot-VA 官方或本地的数据预处理/encoding 流程,生成 video latent 和 text_emb。
如果只有普通 LIBERO 原始图像数据:
它不是当前 MultiLatentLeRobotDataset 的直接输入。
需要先转换为官方 latent LeRobot 格式。
9.5 新 baseline 推荐命名
assets/datasets/libero_spatial_latent_lerobot/
assets/datasets/libero_object_latent_lerobot/
assets/datasets/libero_goal_latent_lerobot/
assets/datasets/libero_10_latent_lerobot/
assets/datasets/<custom_dataset>_latent_lerobot/
run 输出:
experiments/official_sft/runs/<dataset_name>_smoke_step1/
experiments/official_sft/runs/<dataset_name>_train_5000step/
experiments/official_sft/logs/train/<dataset_name>_train_5000step.log
experiments/official_sft/metadata/<dataset_name>_manifest.json
10. 后续正式 baseline 怎么做
10.1 最小 baseline 流程
对每个新 baseline 数据集都跑:
1. asset audit
2. schema audit
3. dataloader audit
4. transformer load audit
5. 1-step smoke
6. checkpoint save
7. transformer-only reload continuation
8. 5000-step 或指定步数训练
9. eval / inference
10. report
10.2 建议记录的指标
训练日志至少记录:
step
latent_loss
action_loss
total_loss
grad_norm
learning_rate
CUDA allocated / reserved memory
steps/sec
checkpoint path
交付报告至少记录:
模型初始化路径
数据集路径
训练 config
GPU 数
batch_size / gradient_accumulation_steps / global batch
num_steps
save_interval
checkpoint 大小
是否支持 transformer-only reload
是否支持完整 trainer-state resume
10.3 评测前必须确认
训练 checkpoint 是 LingBot-VA 本地扩展版 transformer,不是 diffusers 原生 WanTransformer3DModel。
action_embedder / action_proj_out / condition_embedder_action / patch_embedding_mlp 存在。
评测脚本使用的 config 与训练数据动作定义一致。
11. checkpoint 与 resume 口径
当前官方保存结果:
checkpoint_step_x/
└── transformer/
├── config.json
└── diffusion_pytorch_model.safetensors
当前支持:
把 checkpoint_step_x 作为 RESUME_FROM。
官方 Trainer 会加载 RESUME_FROM/transformer。
这可以继续训练。
当前不支持:
optimizer state 恢复
scheduler state 恢复
global_step 自动连续
RNG state 恢复
完整 trainer-state resume
如果后续正式训练需要严格断点续训,应补丁保存:
optimizer.pt
scheduler.pt
training_state.pt
global_step
rng_state
training_config.json
source_commit.txt
asset_manifest.json
补丁原则:
不改模型结构
不改 forward
不改 loss
不改 optimizer 定义
只补全训练状态保存与恢复
12. Hugging Face 交付包怎么整理
推荐仓库名:
lingbot-va-official-sft-smoke
建议上传:
README_OFFICIAL_SFT_CN.md
ENVIRONMENT.md
ASSET_MANIFEST.md
CLUSTER_RUNBOOK.md
SOURCE_COMMIT.txt
experiments/official_sft/scripts/
experiments/official_sft/metadata/
experiments/official_sft/logs/audit/
experiments/official_sft/logs/train/
experiments/official_sft/reports/
不建议上传:
assets/models/lingbot-va-base/
assets/datasets/libero-long-lerobot/
experiments/official_sft/runs/*/checkpoints/*/diffusion_pytorch_model.safetensors
/root/autodl-tmp/conda_envs/
原因:
base 权重约 23G,不适合放代码仓库。
官方数据约 4.4G,应通过 manifest 记录来源和目标路径。
smoke checkpoint 单个约 9.479G,不适合作为默认交付内容。
conda 环境应使用 environment.yml / requirements-lock / conda explicit 记录,而不是直接上传。
13. 集群端接手 checklist
集群端不要直接开长训练。先按顺序执行:
1. clone HF 代码仓库
2. 创建或恢复 conda 环境
3. 下载或挂载 lingbot-va-base
4. 下载或挂载 libero-long-lerobot
5. 确认 empty_emb.pt
6. 检查 datasets==4.0.0 是否能读 parquet List metadata
7. 跑 dataloader smoke
8. 跑 train entry dry audit
9. 跑 1-step SFT smoke
10. 跑 transformer-only reload continuation smoke
11. 确认 checkpoint 保存路径
12. 再启动正式长步数训练
14. 常见问题
Q1:为什么不用 lingbot_va_clean 直接训练?
因为 datasets==3.6.0 不能读取官方 parquet metadata 里的 _type: List。当前实测可用环境是 lingbot_va_reader_test,其中 datasets==4.0.0。
Q2:pip check 冲突要紧吗?
要记录,但当前不是阻塞项。lerobot==0.3.3 声明 datasets<=3.6.0,但官方 released parquet 实际需要 datasets==4.0.0 才能读 List feature。当前以真实 smoke 结果为准。
Q3:为什么不能用 diffusers 的 WanTransformer3DModel?
因为 diffusers 原生类会忽略 LingBot-VA action 相关权重,例如 action_embedder、action_proj_out、condition_embedder_action、patch_embedding_mlp。训练必须使用 wan_va.modules.model.WanTransformer3DModel。
Q4:为什么 step2 raw metadata 里出现 FSDPWanTransformer3DModel?
这是 FSDP 包装后的运行时类名,不代表加载错。最终 acceptance audit 已重新最小加载 step2 checkpoint,确认它仍可作为 wan_va.modules.model.WanTransformer3DModel 加载。
Q5:现在可以说 resume 通过了吗?
只能说:
transformer-only checkpoint reload continuation 通过。
不能说:
完整 optimizer/scheduler/global_step resume 通过。
Q6:正式训练需要多少步?
官方默认 libero_train 是:
num_steps = 5000
batch_size = 1
gradient_accumulation_steps = 10
learning_rate = 1e-5
save_interval = 200
但正式 global batch size 与学习率要按集群 GPU 数重新确认。
15. 最终验收口径
可以写:
LingBot-VA official full-parameter post-training / SFT smoke engineering pipeline has passed.
1-step SFT smoke is verified.
Checkpoint transformer-only reload continuation is verified.
Step2 checkpoint can be minimally reloaded with LingBot-VA local WanTransformer3DModel.
不要写:
Full trainer-state resume is verified.
5000-step post-training is completed.
LIBERO benchmark success rate is reproduced.