菜鸟上路dd 2024-05-01 21:14 采纳率: 20%
浏览 11

大模型Running Evaluation过程中出现的错误

大模型微调,Running Evaluation过程中出现的错误

LLaMA-Factory为微调工具,相关参数设置如下:

CUDA_VISIBLE_DEVICES=0 /opt/llama_factory/bin/python src/train_bash.py \
--stage sft \
--model_name_or_path pretrained_models/Qwen/Qwen1.5-0.5B/ \
--do_train \
--dataset llama_input_dataset \
--finetuning_type lora  \
--lora_target q_proj,v_proj \
--output_dir output_finetuning_models/Qwen/Qwen1.5-0.5B/lora/sft \
--overwrite_cache \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 4  \
--gradient_accumulation_steps 16  \
--preprocessing_num_workers 16 \
--lr_scheduler_type cosine \
--logging_steps 10    \
--save_steps 10000   \
--learning_rate 5e-4   \
--max_grad_norm 0.5     \
--num_train_epochs 3   \
--evaluation_strategy steps \
--bf16 \
--template qwen \
--overwrite_output_dir  \
--cutoff_len 1024  \
--quantization_bit 4 \
--plot_loss \
--load_best_model_at_end True \
--val_size 0.001

运行后报错,报错内容如下:

[INFO|trainer.py:3614] 2024-05-01 20:47:32,810 >> ***** Running Evaluation *****
[INFO|trainer.py:3616] 2024-05-01 20:47:32,810 >>   Num examples = 20
[INFO|trainer.py:3619] 2024-05-01 20:47:32,810 >>   Batch size = 4

Traceback (most recent call last):
  File "/home/bio/workshop/hx/LLaMA-Factory/src/train_bash.py", line 14, in <module>
    main()
  File "/home/bio/workshop/hx/LLaMA-Factory/src/train_bash.py", line 5, in main
    run_exp()
  File "/home/bio/workshop/hx/LLaMA-Factory/src/llmtuner/train/tuner.py", line 32, in run_exp
    run_sft(model_args, data_args, training_args, finetuning_args, generating_args, callbacks)
  File "/home/bio/workshop/hx/LLaMA-Factory/src/llmtuner/train/sft/workflow.py", line 73, in run_sft
    train_result = trainer.train(resume_from_checkpoint=training_args.resume_from_checkpoint)
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/trainer.py", line 1859, in train
    return inner_training_loop(
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/trainer.py", line 2278, in _inner_training_loop
    self._maybe_log_save_evaluate(tr_loss, grad_norm, model, trial, epoch, ignore_keys_for_eval)
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/trainer.py", line 2662, in _maybe_log_save_evaluate
    metrics = self.evaluate(ignore_keys=ignore_keys_for_eval)
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/trainer_seq2seq.py", line 180, in evaluate
    return super().evaluate(eval_dataset, ignore_keys=ignore_keys, metric_key_prefix=metric_key_prefix)
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/trainer.py", line 3467, in evaluate
    output = eval_loop(
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/trainer.py", line 3719, in evaluation_loop
    metrics = self.compute_metrics(EvalPrediction(predictions=all_preds, label_ids=all_labels))
  File "/home/bio/workshop/hx/LLaMA-Factory/src/llmtuner/train/sft/metric.py", line 46, in __call__
    decoded_preds = self.tokenizer.batch_decode(preds, skip_special_tokens=True)
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/tokenization_utils_base.py", line 3771, in batch_decode
    return [
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/tokenization_utils_base.py", line 3772, in <listcomp>
    self.decode(
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/models/qwen2/tokenization_qwen2.py", line 299, in decode
    return super().decode(
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/tokenization_utils_base.py", line 3811, in decode
    return self._decode(
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/tokenization_utils.py", line 1001, in _decode
    filtered_tokens = self.convert_ids_to_tokens(token_ids, skip_special_tokens=skip_special_tokens)
  File "/home/bio/.local/lib/python3.10/site-packages/transformers/tokenization_utils.py", line 976, in convert_ids_to_tokens
    index = int(index)
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'

是我的数据集本身的问题吗??为什么Running training时没有出错呢??

  • 写回答

5条回答 默认 最新

  • 专家-皆知 2024-05-01 21:14
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    根据提供的信息,这个错误发生在评估阶段,具体来说是在尝试将预测结果解码为可读文本时。错误提示说int()函数的参数类型不正确,它期望一个字符串、字节序列或实数,但接收到的是一个列表。

    在您的代码中,self.decode方法被调用来将模型输出的预测ID转换为人类可读的文本。这通常涉及将整数ID映射到对应的词汇项。然而,这里似乎接收到的是一个列表而不是单个整数值,导致了TypeError

    要解决这个问题,我们需要检查模型的预测输出preds。确保它是一个二维数组,其中每个元素都是一个整数列表,而不是一个单独的整数列表。通常情况下,Hugging Face 的 Trainer 类会处理好这些细节,但如果出现了这种情况,可能是由于模型配置或者数据预处理的问题。

    为了进一步诊断问题,您可以尝试打印preds的形状和前几行内容,在执行解码之前:

    import torch
    
    # 在 self.decode 方法之前添加以下代码
    print("Predictions shape:", preds.shape)
    print("First few predictions:")
    for pred in preds[:5]:
        print(pred)
    
    decoded_preds = self.tokenizer.batch_decode(preds, skip_special_tokens=True)
    

    这样,您就可以看到模型的输出是否符合预期。如果输出是正确的形状(例如,(batch_size, sequence_length)),那么问题可能在于数据预处理或者模型配置。如果输出有问题,那么可能是模型内部的预测逻辑出了问题。

    如果输出看起来正常,但是仍然得到相同的错误,那么问题可能在于模型类中的decode方法。在这种情况下,您可能需要查看Qwen2模型特定的tokenizer实现,并确保其decode方法能接受并处理多维输入。

    如果问题依然存在,建议检查一下训练和评估的数据集是否存在差异,比如数据预处理步骤是否有误,或者评估数据集中是否存在一些特殊格式的样本。此外,确认评估使用的模型是否与训练时完全一致,包括权重文件和配置文件。如果一切都没问题,那么可能是库的bug或者不兼容性问题,这时可以考虑更新相关库版本,或者查阅官方文档和社区讨论寻求帮助。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月1日

悬赏问题

  • ¥15 如何使用python 实现对串口/dev/ttyUSB0进行上锁,使得该串口只能在一个python脚本中使用,其他脚本不能操作这个串口
  • ¥15 晶体塑性有限元——Damask求解
  • ¥15 写出这个有没有人能写一下今天中午就要
  • ¥30 设计一个图形用户界面来控制你机械臂的运动
  • ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
  • ¥15 RPG游戏架构设计和开发方法
  • ¥15 前端返回pdf时不显示内容
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图