使用DreamBooth训练SD 1.5时必填参数缺失报错求助
DreamBooth训练SD 1.5提示必填参数缺失的排查与解决
错误信息
运行训练脚本时出现以下报错:
train_dreambooth.py: error: the following arguments are required: --pretrained_model_name_or_path, --instance_data_dir, --instance_prompt Traceback (most recent call last): File "/home/myuser/miniconda3/envs/dbooth/bin/accelerate", line 10, in <module> sys.exit(main()) File "/home/myuser/miniconda3/envs/dbooth/lib/python3.7/site-packages/accelerate/commands/accelerate_cli.py", line 45, in main args.func(args) File "/home/myuser/miniconda3/envs/dbooth/lib/python3.7/site-packages/accelerate/commands/launch.py", line 1104, in launch_command simple_launcher(args) File "/home/myuser/miniconda3/envs/dbooth/lib/python3.7/site-packages/accelerate/commands/launch.py", line 567, in simple_launcher raise subprocess.CalledProcessError(returncode=process.returncode, cmd=cmd) subprocess.CalledProcessError: Command '['/home/myuser/miniconda3/envs/dbooth/bin/python3.7', 'train_dreambooth.py']' returned non-zero exit status 2.
用户训练脚本
#!/bin/bash export MODEL_NAME="v1-5-pruned.ckpt" export INSTANCE_DIR="retocadas" export CLASS_DIR="person_ddim" export OUTPUT_DIR="salida" accelerate launch train_dreambooth.py \ --pretrained_model_name_or_path=$MODEL_NAME \ --instance_data_dir=$INSTANCE_DIR \ --class_data_dir=$CLASS_DIR \ --output_dir=$OUTPUT_DIR \ --with_prior_preservation --prior_loss_weight=1.0 \ --instance_prompt="AnUniqueExample" \ --class_prompt="person" \ --resolution=512 \ --train_batch_size=1 \ --gradient_accumulation_steps=2 --gradient_checkpointing \ --use_8bit_adam \ --learning_rate=5e-6 \ --lr_scheduler="constant" \ --lr_warmup_steps=0 \ --num_class_images=200 \ --max_train_steps=800
排查与解决步骤
1. 检查脚本续行符(反斜杠)
这是最常见的原因:bash脚本中,用于续行的\必须是该行的最后一个字符,后面不能有任何空格、制表符或其他字符。如果反斜杠后有额外字符,bash会将其视为普通字符,导致后续行的参数无法传递给train_dreambooth.py,从而引发必填参数缺失的错误。
解决:逐行检查脚本中每一个\的位置,确保它后面直接换行,没有任何多余字符。
2. 确保工作目录正确
即使文件和脚本在同一目录,如果执行脚本时当前工作目录不是脚本所在目录,相对路径会失效,导致参数无法被正确识别。
解决:在脚本开头添加切换目录的命令,确保脚本执行时自动切换到自身所在目录:
#!/bin/bash # 切换到脚本所在目录 cd "$(dirname "$0")" export MODEL_NAME="v1-5-pruned.ckpt" # ... 其余脚本内容不变
3. 用双引号包裹参数
虽然当前变量没有空格,但为了避免路径或参数中出现特殊字符时导致的展开错误,建议给所有变量参数加上双引号:
accelerate launch train_dreambooth.py \ --pretrained_model_name_or_path="$MODEL_NAME" \ --instance_data_dir="$INSTANCE_DIR" \ --class_data_dir="$CLASS_DIR" \ --output_dir="$OUTPUT_DIR" \ --with_prior_preservation --prior_loss_weight=1.0 \ --instance_prompt="AnUniqueExample" \ # ... 其余参数同理
4. 调试变量展开
可以在accelerate launch命令前添加调试输出,确认环境变量是否正确展开:
echo "MODEL_NAME: $MODEL_NAME" echo "INSTANCE_DIR: $INSTANCE_DIR" echo "INSTANCE_PROMPT: $INSTANCE_PROMPT" accelerate launch train_dreambooth.py \ # ... 其余参数
执行脚本后查看输出,确认变量值是否和预期一致。
5. 指定train_dreambooth.py的绝对路径
如果脚本执行时找不到train_dreambooth.py,会默认执行空参数的命令,引发错误。可以直接指定该文件的绝对路径或相对路径:
accelerate launch ./train_dreambooth.py \ # ... 其余参数
内容的提问来源于stack exchange,提问作者mcventur
相关产品推荐
相关产品推荐

