报错代码来源
THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 (github.com)
版本(2024.1.31) 5293ef2
报错信息
Traceback (most recent call last):
File "xxxg/yyy/ChatGLM3/finetune_demo/finetune_hf.py", line 146, in <module>
@dc.dataclass
^^^^^^^^^^^^
File "xxxg/anaconda3/envs/zzz/lib/python3.11/dataclasses.py", line 1230, in dataclass
return wrap(cls)
^^^^^^^^^
File "xxxg/anaconda3/envs/zzz/lib/python3.11/dataclasses.py", line 1220, in wrap
return _process_class(cls, init, repr, eq, order, unsafe_hash,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "xxxg/anaconda3/envs/zzz/lib/python3.11/dataclasses.py", line 958, in _process_class
cls_fields.append(_get_field(cls, name, type, kw_only))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "xxxg/anaconda3/envs/zzz/lib/python3.11/dataclasses.py", line 815, in _get_field
raise ValueError(f'mutable default {type(f.default)} for field '
ValueError: mutable default <class 'transformers.training_args_seq2seq.Seq2SeqTrainingArguments'> for field training_args is not allowed: use default_factory
环境
python=3.11
报错原因
没在issue里搜到,推测是python3.11的dataclasses有变化
按照报错提示,将报错位置下的
training_args: Seq2SeqTrainingArguments = dc.field(
default=Seq2SeqTrainingArguments(output_dir='./output')
)
修改为:
training_args: Seq2SeqTrainingArguments = dc.field(
default_factory=Seq2SeqTrainingArguments(output_dir='./output')
)
然后就可以正常运行拉!