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

使用Hugging Face Trainer遇AttributeError:Namespace无get_process_log_level属性

错误原因与解决方法

错误原因

你调用parser.parse_args()得到的是argparse原生的Namespace对象,但Hugging Face的Trainer要求传入的args必须是TrainingArguments类的实例。get_process_log_level()是TrainingArguments类独有的方法,普通Namespace对象没有这个属性,因此触发AttributeError。

另外注意:你代码里给Trainer传的train_dataloader和val_dataloader是错误的——train_dataset和eval_dataset参数需要传入数据集对象(比如Hugging Face Dataset实例),而非提前生成的数据加载器,Trainer会根据配置自动创建dataloader。

解决方法

方法一:自定义参数dataclass(推荐)

使用HfArgumentParser同时解析自定义参数和TrainingArguments,直接得到对应类的实例:

from dataclasses import dataclass, field
from transformers import HfArgumentParser, TrainingArguments, Trainer

# 自定义模型相关参数的dataclass
@dataclass
class ModelArguments:
    model_name_or_path: str = field(
        metadata={"help": "预训练模型路径或Hugging Face模型ID"}
    )

if __name__ == '__main__':
    # 传入两个dataclass,让解析器同时处理
    parser = HfArgumentParser((ModelArguments, TrainingArguments))
    model_args, training_args = parser.parse_args_into_dataclasses()

    # 后续使用参数:model_args.model_name_or_path 是自定义的模型路径参数
    # training_args 是标准的TrainingArguments实例,可直接传给Trainer
    print('训练配置:', training_args)
    print('模型路径:', model_args.model_name_or_path)

    # 加载数据集(示例)
    # dataset_train = load_dataset(...)
    # dataset_val = load_dataset(...)

    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=dataset_train,  # 传数据集对象,不是dataloader
        eval_dataset=dataset_val
    )
    trainer.train()

方法二:将Namespace转换为TrainingArguments实例

如果不想自定义dataclass,可以把解析得到的Namespace转换成字典,再初始化TrainingArguments:

if __name__ == '__main__':
    parser = HfArgumentParser(TrainingArguments)
    parser.add_argument('--model_name_or_path', type=str, required=True)
    
    # 先解析成Namespace,再转成字典
    args_namespace = parser.parse_args()
    args_dict = vars(args_namespace)
    
    # 从字典初始化TrainingArguments
    training_args = TrainingArguments(**args_dict)
    
    # 后续使用training_args即可,注意dataset的问题同上
    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=dataset_train,
        eval_dataset=dataset_val
    )
    trainer.train()

内容的提问来源于stack exchange,提问作者Chan Wing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:47:10