Sandbox 的trainModelHook是否支持训练本地模型和自定义模型

by ADMIN 40 views

Before Asking 在提问之前

在提问之前,我们需要确保已经阅读了相关的文档和代码。以下是我们已经完成的检查:

  • 我已经仔细阅读了 README 上的操作指引。
  • 我已经拉取了主分支上最新的代码,重新运行之后,问题仍不能解决。
  • 我已经在 issue列表 中搜索但是没有发现类似的问题。

Search before asking 先搜索,再提问

在提问之前,我们需要先搜索相关的信息。以下是我们已经完成的搜索:

  • 我已经在 issue列表 中搜索但是没有发现类似的问题。

Question

sandbox 的trainModel配置文件替换成自定义的配置后,执行报错如下: File "/usr/local/lib/python3.10/dist-packages/modelscope/trainers/builder.py", line 39, in build_trainer return build_from_cfg(cfg, TRAINERS, default_args=default_args) │ │ │ └ 'model' '/models/Qwen2.5-7B-Instruct', 'train_dataset': None, 'eval_dataset': None, 'work_dir': './outputs/sandbox... │ │ └ Registry (trainers) │ │ group_name=default, modules=['dummy', 'trainer', 'nlp-base-trainer', 'nlp-veco-trainer'] │ │
│ └ {'type': 'nlp-base-trainer'
└ <function build_from_cfg at 0x7fb0f5b71900> File "/usr/local/lib/python3.10/dist-packages/modelscope/utils/registry.py", line 214, in build_from_cfg raise type(e)(f'obj_cls.name} {e') from e

AttributeError: NlpEpochBasedTrainer: 'ConfigDict' object has no attribute 'model'

Additional 额外信息

sandbox配置信息

project_name: 'demo-sandbox' experiment_name: 'demo-sandbox-run0' # for wandb tracer name work_dir: './outputs/demo-sandbox' # the default output dir for meta logging hpo_config: null # path to a configuration file when using auto-HPO tool.

probe_job_configs:

  • hook: 'ProbeViaAnalyzerHook' meta_name: 'analysis_ori_data' dj_configs: 'configs/demo/process.yaml' extra_configs:

refine_recipe_job_configs:

  • hook: 'RefineRecipeViaKSigmaHook' meta_name: 'analysis_ori_data' dj_configs: 'configs/demo/process.yaml' extra_configs: path_k_sigma_recipe: './outputs/demo-customed-0418/k_sigma_new_recipe.yaml'

execution_job_configs:

  • hook: 'ProcessDataHook' meta_name: dj_configs: './outputs/demo-customed-0418/k_sigma_new_recipe.yaml' extra_configs:
  • hook: 'TrainModel' meta_name: dj_configs: extra_configs: 'configs/demo/sandbox/qwen25_14B_extra_train_config.json'

evaluation_job_configs:

  • hook: 'ProbeViaAnalyzerHook' meta_name: 'analysis_processed_data' dj_configs: 'configs/demo/process.yaml' extra_configs:
  • hook: 'EvaluateDataHook' meta_name: 'eval_data' dj_configs: extra_configs: 'configs/demo/sandbox/gpt3_data_quality_eval_config.yaml'

模型训练配置文件 "type" "modelscope", "dataset_path": "./outputs/demo-customed-0418/data.jsonl", "device": "0,1,2,3", "work_dir": "./outputs/sandbox-train/", "model_name": "./models/Qwen2.5-7B-Instruct", "trainer_name": "nlp-base-trainer", "key_remapping": { "text": "src_txt" , "train": "max_epochs" 2, "lr_scheduler": { "type": "StepLR", "step_size": 2, "options": { "by_epoch": false }, "optimizer": "type" "AdamW", "lr": 3e-5 , "dataloader": "batch_size_per_gpu" 16, "workers_per_gpu": 0 } }

解决方案

根据错误信息,我们可以看到 NlpEpochBasedTrainer 类没有 model 属性。我们需要检查 trainModelHook 的配置文件是否正确。

首先,我们需要检查 trainModelHook 的配置文件是否正确。我们可以看到 trainModelHook 的配置文件中没有 model 属性。我们需要添加 model 属性到配置文件中。

{
    "type": "modelscope",
    "dataset_path": "./outputs/demo-customed-0418/data.jsonl",
    "device": "0,1,2,3",
    "work_dir": "./outputs/sandbox-train/",
    "model_name": "./models/Qwen2.5-7B-Instruct",
    "trainer_name": "nlp-base-trainer",
    "key_remapping": {
      "text": "src_txt"
    },
    "train": {
      "max_epochs": 2,
      "lr_scheduler": {
        "type": "StepLR",
        "step_size": 2,
        "options": {
          "by_epoch": false
        }
      },
      "optimizer": {
        "type": "AdamW",
        "lr": 3e-5
      },
      "dataloader": {
        "batch_size_per_gpu": 16,
        "workers_per_gpu": 0
      },
      "model": {
        "type": "nlp-base-trainer",
        "model_name": "./models/Qwen2.5-7B-Instruct"
      }
    }
}

我们需要添加 model 属性到 train 属性中。model 属性中需要包含 typemodel_name 属性。

结论

通过检查 trainModelHook 的配置文件,我们发现 NlpEpochBasedTrainer 类没有 model 属性。需要添加 model 属性到配置文件中。通过添加 model 属性,我们可以解决错误。

最后

我们希望通过这个问题和答案,帮助大家更好地理解 trainModelHook 的配置文件和 NlpEpochBasedTrainer 类。我们希望大家可以通过这个问题和答案,解决自己的问题。

Q&A

Q1: sandbox 的trainModelHook是否支持训练本地模型和自定义模型?

A1: 是的,sandbox 的trainModelHook支持训练本地模型和自定义模型。您可以通过配置文件来指定模型和训练参数。

Q2: 如何配置trainModelHook来训练本地模型和自定义模型?

A2: 您可以通过修改 trainModelHook 的配置文件来指定模型和训练参数。例如,您可以添加 model 属性到 train 属性中,指定模型类型和模型名称。

Q3: 如何添加 model 属性到 train 属性中?

A3: 您可以通过添加以下代码到 train 属性中来添加 model 属性:

{
    "type": "modelscope",
    "dataset_path": "./outputs/demo-customed-0418/data.jsonl",
    "device": "0,1,2,3",
    "work_dir": "./outputs/sandbox-train/",
    "model_name": "./models/Qwen2.5-7B-Instruct",
    "trainer_name": "nlp-base-trainer",
    "key_remapping": {
      "text": "src_txt"
    },
    "train": {
      "max_epochs": 2,
      "lr_scheduler": {
        "type": "StepLR",
        "step_size": 2,
        "options": {
          "by_epoch": false
        }
      },
      "optimizer": {
        "type": "AdamW",
        "lr": 3e-5
      },
      "dataloader": {
        "batch_size_per_gpu": 16,
        "workers_per_gpu": 0
      },
      "model": {
        "type": "nlp-base-trainer",
        "model_name": "./models/Qwen2.5-7B-Instruct"
      }
    }
}

Q4: 如何指定模型类型和模型名称?

A4: 您可以通过添加 typemodel_name 属性到 model 属性中来指定模型类型和模型名称。例如:

{
    "type": "modelscope",
    "dataset_path": "./outputs/demo-customed-0418/data.jsonl",
    "device": "0,1,2,3",
    "work_dir": "./outputs/sandbox-train/",
    "model_name": "./models/Qwen2.5-7B-Instruct",
    "trainer_name": "nlp-base-trainer",
    "key_remapping": {
      "text": "src_txt"
    },
    "train": {
      "max_epochs": 2,
      "lr_scheduler": {
        "type": "StepLR",
        "step_size": 2,
        "options": {
          "by_epoch": false
        }
      },
      "optimizer": {
        "type": "AdamW",
        "lr": 3e-5
      },
      "dataloader": {
        "batch_size_per_gpu": 16,
        "workers_per_gpu": 0
      },
      "model": {
        "type": "nlp-base-trainer",
        "model_name": "./models/Qwen2.5-7B-In"
      }
    }
}

Q5: 如何验证模型是否被正确训练?

A5: 您可以通过检查模型的训练日志和评估结果来验证模型是否被正确训练。例如,您可以通过检查模型的训练日志来验证模型是否被正确训练:

# 检查模型的训练日志
cat ./outputs/sandbox-train/train.log

Q6: 如何优化模型的训练参数?

A6: 您可以通过调整模型的训练参数来优化模型的训练效果。例如,您可以通过调整 max_epochslr_scheduler 属性来优化模型的训练效果:

{
    "type": "modelscope",
    "dataset_path": "./outputs/demo-customed-0418/data.jsonl",
    "device": "0,1,2,3",
    "work_dir": "./outputs/sandbox-train/",
    "model_name": "./models/Qwen2.5-7B-Instruct",
    "trainer_name": "nlp-base-trainer",
    "key_remapping": {
      "text": "src_txt"
    },
    "train": {
      "max_epochs": 5,
      "lr_scheduler": {
        "type": "StepLR",
        "step_size": 5,
        "options": {
          "by_epoch": false
        }
      },
      "optimizer": {
        "type": "AdamW",
        "lr": 1e-5
      },
      "dataloader": {
        "batch_size_per_gpu": 32,
        "workers_per_gpu": 0
      },
      "model": {
        "type": "nlp-base-trainer",
        "model_name": "./models/Qwen2.5-7B-Instruct"
      }
    }
}

Q7: 如何保存模型的训练结果?

A7: 您可以通过保存模型的训练日志和评估结果来保存模型的训练结果。例如,您可以通过保存模型的训练日志来保存模型的训练结果:

# 保存模型的训练日志
cp ./outputs/sandbox-train/train.log ./outputs/sandbox-train/train.log.bak

Q8: 如何加载模型的训练结果?

A8: 您可以通过加载模型的训练日志和评估结果来加载模型的训练结果。例如,您可以通过加载模型的训练日志来加载模型的训练结果:

# 加载模型的训练日志
cat ./outputs/sandbox-train/train.log.bak

Q9: 如何使用模型的训练结果?

A9: 您可以通过使用模型的训练结果来使用模型的训练结果。例如,您可以通过使用模型的训练结果来预测新的数据:

# 使用模型的训练结果预测新的数据
python predict.py --model ./outputs/sandbox-train/model.pkl --data ./data/new_data.jsonl

Q10: 如何优化模型的使用效果?

A10: 您可以通过优化模型的训练参数和使用效果来优化模型的使用效果。例如,您可以通过优化模型的训练参数和使用效果来优化模型的使用效果:

{
    "type": "modelscope",
    "dataset_path": "./outputs/demo-customed-0418/data.jsonl",
    "device": "0,1,2,3",
    "work_dir": "./outputs/sandbox-train/",
    "model_name": "./models/Qwen2.5-7B-Instruct",
    "trainer_name": "nlp-base-trainer",
    "key_remapping": {
      "text": "src_txt"
    },
    "train": {
      "max_epochs": 5,
      "lr_scheduler": {
        "type": "StepLR",
        "step_size": 5,
        "options": {
          "by_epoch": false
        }
      },
      "optimizer": {
        "type": "AdamW",
        "lr": 1e-5
      },
      "dataloader": {
        "batch_size_per_gpu": 32,
        "workers_per_gpu": 0
      },
      "model": {
        "type": "nlp-base-trainer",
        "model_name": "./models/Qwen2.5-7B-Instruct"
      }
    }
}

Q11: 如何使用模型的训练结果进行预测?

A11: 您可以通过使用模型的训练结果进行预测来使用模型的训练结果。例如,您可以通过使用模型的训练结果进行预测来预测新的数据:

# 使用模型的训练结果进行预测
python predict.py --model ./outputs/sandbox-train/model.pkl --data ./data/new_data.jsonl

Q12: 如何优化模型的预测效果?

A12: 您可以通过优化模型的训练参数和使用效果来优化模型的预测效果。例如,您可以通过优化模型的训练参数和使用效果来优化模型的预测效果:

{
    "type": "modelscope",
    "dataset_path": "./outputs/demo-customed-0418/data.jsonl",
    "device": "0,1,2,3",
    "work_dir": "./outputs/sandbox-train/",
    "model_name": "./models/Qwen2.5-7B-Instruct",
    "trainer_name": "nlp-base-trainer",
    "key_remapping": {
      "text": "src_txt"
    },
    "train": {
      "max_epochs": 5,
      "lr_scheduler": {
        "type": "StepLR",
        "step_size": 5,
        "options": {
          "by_epoch": false
        }
      },
      "optimizer": {
        "type": "AdamW",
        "lr": 1e-5
      },
      "dataloader": {
        "batch_size_per_gpu": 32,