感谢使用MM。建议根据实际情况排查原因,或提供更多信息。
- 是否存在loss跑飞
- loss是否存在尖刺
一般而言,生成模型的loss不同于理解模型,不会有明显的阶梯下降现象,在训练1-2epoch中下降到一定水平震荡,并在过拟合后可能产生崩溃,如4-5epoch后。
由于5B模型VAE压缩率较高,可能需要更多措施确保训练稳定性。
一般性训练建议:
- 扩大GBS,一个step训练更多数据,如32或64,加强训练稳定性。
- 缩小学习率,如5e-6,加强训练稳定性。
- 清洗数据,使用高质量数据训练。推测开源权重使用了大量高质量数据,如使用低质量数据微调可能导致劣化。
- 删除训练配置中的--bf16,避免权重down-cast,有利于训练初期精度。见此PR


麻烦提供一下学习率和全局batch size信息。过小的batch size容易导致loss的波动



这是GBS是64,lr和min_lr都是5e-6的loss图像。bf16没去掉的原因是去掉后会报错,报错信息如下:

另外下面是完整的脚本。
#!/bin/bash
source /usr/local/Ascend/ascend-toolkit/set_env.sh
该变量只用于规避megatron对其校验,对npu无效
export CUDA_DEVICE_MAX_CONNECTIONS=2 # 开启FSDP2时,不能置为1
export ASCEND_SLOG_PRINT_TO_STDOUT=0
export ASCEND_GLOBAL_LOG_LEVEL=3
export TASK_QUEUE_ENABLE=1
export COMBINED_ENABLE=1
export CPU_AFFINITY_CONF=1
export HCCL_CONNECT_TIMEOUT=1200
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
NPUS_PER_NODE=8
MASTER_ADDR=localhost
MASTER_PORT=6000
NNODES=1
NODE_RANK=0
WORLD_SIZE=NPUS_PER_NODE*$NNODES))
TP=1
PP=1
VP=1
CP=1
MBS=8
GRAD_ACC_STEP=1
DP=WORLD_SIZE/PP/((GRAD_ACC_STEP*$DP))
MM_DATA="./examples/wan2.2/5B/t2v/data.json"
MM_MODEL="./examples/wan2.2/5B/t2v/pretrain_model.json"
MM_TOOL="./mindspeed_mm/tools/tools.json"
LOAD_PATH="Wan2.2-TI2V-5B-Diffusers/mm_convert" # ensure the wandit weight be converted
SAVE_PATH="wandit_weight_save"
fsdp2_config="./examples/wan2.2/fsdp2_config.yaml"
DISTRIBUTED_ARGS="
--nproc_per_node $NPUS_PER_NODE
--nnodes $NNODES
--node_rank $NODE_RANK
--master_addr $MASTER_ADDR
--master_port $MASTER_PORT
"
GPT_ARGS="
--tensor-model-parallel-size ${TP}
--pipeline-model-parallel-size ${PP}
--virtual-pipeline-model-parallel-size ${VP}
--context-parallel-size ${CP}
--context-parallel-algo ulysses_cp_algo
--micro-batch-size ${MBS}
--global-batch-size ${GBS}
--num-workers 8
--lr 5e-6
--min-lr 5e-6
--adam-beta1 0.9
--adam-beta2 0.999
--adam-eps 1e-8
--lr-decay-style constant
--weight-decay 1e-2
--lr-warmup-init 0
--lr-warmup-iters 0
--clip-grad 1.0
--train-iters 5000
--no-gradient-accumulation-fusion
--no-load-optim
--no-load-rng
--no-save-optim
--no-save-rng
--bf16
--use-fused-rmsnorm
--use-torch-fsdp2
--fsdp2-config-path ${fsdp2_config}
--optimizer-selection fused_torch_adamw
--untie-embeddings-and-output-weights
"
MM_ARGS="
--mm-data $MM_DATA
--mm-model $MM_MODEL
--mm-tool $MM_TOOL
"
OUTPUT_ARGS="
--log-interval 1
--save-interval 10000
--eval-interval 10000
--eval-iters 10
--load $LOAD_PATH
--save $SAVE_PATH
--ckpt-format torch_dcp
"
logfile=(date +%H%M%S)
mkdir -p logs
torchrun $DISTRIBUTED_ARGS pretrain_sora.py
$GPT_ARGS
$MM_ARGS
$OUTPUT_ARGS
--distributed-backend nccl
2>&1 | tee logs/train_${logfile}.log
chmod 440 logs/train_${logfile}.log
find $SAVE_PATH -type d -exec chmod 750 {} ;
find SAVE_PATH -type f -exec chmod 640 {} \;
STEP_TIME=`grep "elapsed time per iteration" logs/train_{logfile}.log | awk -F ':' '{print$5}' | awk -F '|' '{print$1}' | head -n 200 | tail -n 100 | awk '{sum+=1} END {if (NR != 0) printf("%.1f",sum/NR)}'`
SPS=`awk 'BEGIN{printf "%.3f\n", '{GBS}'*1000/'${STEP_TIME}'}'`
echo "Elapsed Time Per iteration: $STEP_TIME, Average Samples per Second: $SPS"


1、请问 p2的loss图和p1的loss图,训练配置区别是什么。
2、p2的loss图看上去符合预期,diffusion loss确实会一直震荡,属于正常现象。但是可以通过平滑loss以可视化(比如100步滑窗平均),正常情况下整体的loss应当是平稳下降的,不过训练后期下降幅度很小。


3、根据你的配置,建议使用mbs1,梯度累计8。此外,对于sft阶段,64的gbs依然较小,建议128及以上。


这是GBS是64,lr和min_lr都是5e-6的loss图像。bf16没去掉的原因是去掉后会报错,报错信息如下:
另外下面是完整的脚本。
#!/bin/bash
source /usr/local/Ascend/ascend-toolkit/set_env.sh该变量只用于规避megatron对其校验,对npu无效
export CUDA_DEVICE_MAX_CONNECTIONS=2 # 开启FSDP2时,不能置为1
export ASCEND_SLOG_PRINT_TO_STDOUT=0
export ASCEND_GLOBAL_LOG_LEVEL=3
export TASK_QUEUE_ENABLE=1
export COMBINED_ENABLE=1
export CPU_AFFINITY_CONF=1
export HCCL_CONNECT_TIMEOUT=1200
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:TrueNPUS_PER_NODE=8
MASTER_ADDR=localhost
MASTER_PORT=6000
NNODES=1
NODE_RANK=0
WORLD_SIZE=NPUS_PER_NODE*$NNODES))TP=1
PP=1
VP=1
CP=1
MBS=8
GRAD_ACC_STEP=1
DP=WORLD_SIZE/PP/((GRAD_ACC_STEP*$DP))MM_DATA="./examples/wan2.2/5B/t2v/data.json"
MM_MODEL="./examples/wan2.2/5B/t2v/pretrain_model.json"
MM_TOOL="./mindspeed_mm/tools/tools.json"
LOAD_PATH="Wan2.2-TI2V-5B-Diffusers/mm_convert" # ensure the wandit weight be converted
SAVE_PATH="wandit_weight_save"
fsdp2_config="./examples/wan2.2/fsdp2_config.yaml"DISTRIBUTED_ARGS="
--nproc_per_node $NPUS_PER_NODE
--nnodes $NNODES
--node_rank $NODE_RANK
--master_addr $MASTER_ADDR
--master_port $MASTER_PORT
"GPT_ARGS="
--tensor-model-parallel-size ${TP}
--pipeline-model-parallel-size ${PP}
--virtual-pipeline-model-parallel-size ${VP}
--context-parallel-size ${CP}
--context-parallel-algo ulysses_cp_algo
--micro-batch-size ${MBS}
--global-batch-size ${GBS}
--num-workers 8
--lr 5e-6
--min-lr 5e-6
--adam-beta1 0.9
--adam-beta2 0.999
--adam-eps 1e-8
--lr-decay-style constant
--weight-decay 1e-2
--lr-warmup-init 0
--lr-warmup-iters 0
--clip-grad 1.0
--train-iters 5000
--no-gradient-accumulation-fusion
--no-load-optim
--no-load-rng
--no-save-optim
--no-save-rng
--bf16
--use-fused-rmsnorm
--use-torch-fsdp2
--fsdp2-config-path ${fsdp2_config}
--optimizer-selection fused_torch_adamw
--untie-embeddings-and-output-weights
"MM_ARGS="
--mm-data $MM_DATA
--mm-model $MM_MODEL
--mm-tool $MM_TOOL
"OUTPUT_ARGS="
--log-interval 1
--save-interval 10000
--eval-interval 10000
--eval-iters 10
--load $LOAD_PATH
--save $SAVE_PATH
--ckpt-format torch_dcp
"logfile=(date +%H%M%S)
mkdir -p logs
torchrun $DISTRIBUTED_ARGS pretrain_sora.py
$GPT_ARGS
$MM_ARGS
$OUTPUT_ARGS
--distributed-backend nccl
2>&1 | tee logs/train_${logfile}.logchmod 440 logs/train_${logfile}.log
find $SAVE_PATH -type d -exec chmod 750 {} ;
find SAVE_PATH -type f -exec chmod 640 {} \; STEP_TIME=`grep "elapsed time per iteration" logs/train_{logfile}.log | awk -F ':' '{print$5}' | awk -F '|' '{print$1}' | head -n 200 | tail -n 100 | awk '{sum+=1} END {if (NR != 0) printf("%.1f",sum/NR)}'` SPS=`awk 'BEGIN{printf "%.3f\n", '{GBS}'*1000/'${STEP_TIME}'}'`
echo "Elapsed Time Per iteration: $STEP_TIME, Average Samples per Second: $SPS"
感谢反馈,是的,当前PR内容中暂时没有被FSDP2 ignore的module的混精处理,因此在加载的AE模型为FP32的情况下,可能导致此类报错。目前可通过手动cast规避,正在考虑最终解决方案。但是此cast对较长的训练影响较小,可以考虑一下@suis-moi 的建议


您好,此issue已经超过一周没有更新,现先将issue关闭,有需要可以重新打开,谢谢!



Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
Describe the current behavior / 问题描述 (Mandatory / 必填)
我在使用Wan2.2 5B pretrain.sh的默认参数,在pexel-45k数据集上进行训练时,模型无法收敛。不知道为什么。
Environment / 环境信息 (Mandatory / 必填)
我在使用Wan2.2 5B pretrain.sh的默认参数,在pexel-45k数据集上进行训练时,模型无法收敛。不知道为什么。
Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)
我在使用Wan2.2 5B pretrain.sh的默认参数,在pexel-45k数据集上进行训练时,模型无法收敛。不知道为什么。
Describe the expected behavior / 预期结果 (Mandatory / 必填)
我在使用Wan2.2 5B pretrain.sh的默认参数,在pexel-45k数据集上进行训练时,模型无法收敛。不知道为什么。
Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
我在使用Wan2.2 5B pretrain.sh的默认参数,在pexel-45k数据集上进行训练时,模型无法收敛。不知道为什么。
Special notes for this issue/备注 (Optional / 选填)