NLLB模型英德翻译微调报错:缺失data_prefix配置项
微调NLLB-200-distilled-600M模型时的
data_prefix配置问题及详细微调指南 问题背景
我正在微调facebook/nllb-200-distilled-600M模型,用于科技文本的英语(eng_Latn)到德语(deu_Latn)翻译任务,已遵循NLLB官方微调指南,但遇到配置错误。
执行的训练代码
DATA_CONFIG = "/content/sample_data/data_config.json" OUTPUT_DIR = "/content/outputs" MODEL_FOLDER = "/content/drive/MyDrive/Thesis/nllb-checkpoints" DROP = 0.1 SRC = "eng_Latn" TGT = "deu_Latn" !python /content/fairseq/examples/nllb/modeling/train/train_script.py \ cfg=nllb200_dense3.3B_finetune_on_fbseed \ cfg/dataset=default \ cfg.dataset.lang_pairs="$SRC-$TGT" \ cfg.fairseq_root=$(pwd) \ cfg.output_dir=$OUTPUT_DIR \ cfg.dropout=$DROP \ cfg.warmup=10 \ cfg.finetune_from_model=$MODEL_FOLDER/checkpoint.pt
报错信息
/content/fairseq/examples/nllb/modeling/train/train_script.py:287: UserWarning: The version_base parameter is not specified. Please specify a compatability version level, or None. Will assume defaults for version 1.1 @hydra.main(config_path="conf", config_name="base_config") /usr/local/lib/python3.10/dist-packages/hydra/_internal/hydra.py:119: UserWarning: Future Hydra versions will no longer change working directory at job runtime by default. See https://hydra.cc/docs/1.2/upgrades/1.1_to_1.2/changes_to_job_working_dir/ for more information. ret = run_job( TRAINING DIR: /content/outputs Error executing job with overrides: ['cfg=nllb200_dense3.3B_finetune_on_fbseed', 'cfg/dataset=default', 'cfg.dataset.lang_pairs=eng_Latn-deu_Latn', 'cfg.fairseq_root=/content', 'cfg.output_dir=/content/outputs', 'cfg.dropout=0.1', 'cfg.warmup=10', 'cfg.finetune_from_model=/content/drive/MyDrive/LASS_KG_Data/Thesis/nllb-checkpoints/checkpoint.pt'] Traceback (most recent call last): File "/content/fairseq/examples/nllb/modeling/train/train_script.py", line 289, in main train_module = TrainModule(config) File "/content/fairseq/examples/nllb/modeling/train/train_script.py", line 122, in __init__ assert cluster_name in cfg.dataset.data_prefix omegaconf.errors.ConfigAttributeError: Key 'data_prefix' is not in struct full_key: cfg.dataset.data_prefix object_type=dict Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.
已做尝试
我已定位到问题是缺失data_prefix配置,创建了自定义配置文件data_config.json:
{ "data_prefix": "/content/sample_data", "train_data": "train_demo.json", "test_data": "test_demo.json", "lang_pairs": "eng_Latn-deu_Latn" }
但官方文档内容无法直接适配我的场景,需要更详细的NLLB微调指南。
解决方案及详细微调指南
1. 修复当前data_prefix配置错误
当前使用的cfg/dataset=default配置中未定义data_prefix,可通过两种方式解决:
方式一:命令行直接覆盖配置
注意:你用的是600M蒸馏模型,不要使用3.3B模型的配置文件,修改训练命令如下:!python /content/fairseq/examples/nllb/modeling/train/train_script.py \ cfg=nllb200_distilled_600M_finetune \ cfg/dataset=default \ cfg.dataset.lang_pairs="$SRC-$TGT" \ cfg.dataset.data_prefix="/content/sample_data" \ cfg.dataset.train_data="train_demo.json" \ cfg.dataset.test_data="test_demo.json" \ cfg.fairseq_root=$(pwd) \ cfg.output_dir=$OUTPUT_DIR \ cfg.dropout=$DROP \ cfg.warmup=10 \ cfg.finetune_from_model=$MODEL_FOLDER/checkpoint.pt方式二:加载自定义配置文件
利用Hydra语法加载你创建的data_config.json:!python /content/fairseq/examples/nllb/modeling/train/train_script.py \ cfg=nllb200_distilled_600M_finetune \ +cfg.dataset=@/content/sample_data/data_config.json \ cfg.fairseq_root=$(pwd) \ cfg.output_dir=$OUTPUT_DIR \ cfg.dropout=$DROP \ cfg.warmup=10 \ cfg.finetune_from_model=$MODEL_FOLDER/checkpoint.pt其中
+用于添加新配置节点,@用于加载外部JSON文件。
2. 完整NLLB微调流程指南
数据准备
- 数据需采用JSONL格式,每条数据包含
src(源文本)、tgt(目标文本)、src_lang、tgt_lang字段,示例:{"src": "The new AI model achieves state-of-the-art results.", "tgt": "Das neue KI-Modell erzielt state-of-the-art-Ergebnisse.", "src_lang": "eng_Latn", "tgt_lang": "deu_Latn"} - 将训练集、测试集放在
data_prefix指定的目录下。
配置文件选择
NLLB配置文件位于fairseq/examples/nllb/modeling/train/conf目录:
- 600M蒸馏模型对应基础配置为
nllb200_distilled_600M_finetune.yaml,已包含模型架构、优化器等核心参数,只需覆盖数据集相关配置即可。
关键训练参数说明
cfg.finetune_from_model:预训练模型 checkpoint 路径,确保对应facebook/nllb-200-distilled-600M版本cfg.dropout:正则化参数,0.1为合理初始值,可根据过拟合情况调整cfg.warmup:学习率预热步数,小数据集设置10-50即可cfg.batch_size:根据GPU显存调整,单张A10G可设置8-16cfg.max_epoch:训练轮数,根据数据集大小设置5-20轮
训练后验证与推理
训练完成后,用以下命令进行推理验证:
!python /content/fairseq/fairseq_cli/generate.py \ /content/sample_data \ --path $OUTPUT_DIR/checkpoint_best.pt \ --task translation_multi_simple_epoch \ --source-lang eng_Latn \ --target-lang deu_Latn \ --sacrebleu \ --batch-size 32 \ --beam 5
内容的提问来源于stack exchange,提问作者PrincessIris
相关产品推荐
相关产品推荐

