You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-16
  • cfg.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:45:04