ChatGLM3:AttributeError_ can‘t set attribute ‘eos_token‘

2024-03-28 18:36

本文主要是介绍ChatGLM3:AttributeError_ can‘t set attribute ‘eos_token‘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在微调 ChatGLM3-6b 时,训练好模型之后,调用inference_hf.py函数验证模型的时候报了如下错误,下面是解决方案。

我在训练时使用的是ptuning_v2.yaml配置文件,训练运行代码如下:

CUDA_VISIBLE_DEVICES=1 python finetune_hf.py  data/AdvertiseGen_fix/ ../chatglm3-6b configs/ptuning_v2.yaml

错误信息

╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/admin/ChatGLM3-6B/ChatGLM3/finetune_demo/inference_hf.py:50 in main                        │
│                                                                                                  │
│   47 │   │   model_dir: Annotated[str, typer.Argument(help='')],                                 │
│   48 │   │   prompt: Annotated[str, typer.Option(help='')],                                      │
│   49 ):                                                                                          │
│ ❱ 50 │   model, tokenizer = load_model_and_tokenizer(model_dir)                                  │
│   51 │   response, _ = model.chat(tokenizer, prompt)                                             │
│   52 │   print(response)                                                                         │
│   53                                                                                             │
│                                                                                                  │
│ /home/admin/ChatGLM3-6B/ChatGLM3/finetune_demo/inference_hf.py:30 in load_model_and_tokenizer    │
│                                                                                                  │
│   27 def load_model_and_tokenizer(model_dir: Union[str, Path]) -> tuple[ModelType, TokenizerT    │
│   28 │   model_dir = _resolve_path(model_dir)                                                    │
│   29if (model_dir / 'adapter_config.json').exists():                                        │
│ ❱ 30 │   │   model = AutoPeftModelForCausalLM.from_pretrained(                                   │
│   31 │   │   │   model_dir, trust_remote_code=True, device_map='auto'                            │
│   32 │   │   )                                                                                   │
│   33 │   │   tokenizer_dir = model.peft_config['default'].base_model_name_or_path                │
│                                                                                                  │
│ /home/admin/anaconda3/envs/chatglm/lib/python3.10/site-packages/peft/auto.py:123 in              │
│ from_pretrained                                                                                  │
│                                                                                                  │
│   120 │   │   │   )                                                                              │
│   121 │   │                                                                                      │
│   122 │   │   if tokenizer_exists:                                                               │
│ ❱ 123 │   │   │   tokenizer = AutoTokenizer.from_pretrained(                                     │
│   124 │   │   │   │   pretrained_model_name_or_path, trust_remote_code=kwargs.get("trust_remot   │
│   125 │   │   │   )                                                                              │
│   126 │   │   │   base_model.resize_token_embeddings(len(tokenizer))                             │
│                                                                                                  │
│ /home/admin/anaconda3/envs/chatglm/lib/python3.10/site-packages/transformers/models/auto/tokeniz │
│ ation_auto.py:810 in from_pretrained                                                             │
│                                                                                                  │
│   807 │   │   │   _ = kwargs.pop("code_revision", None)                                          │
│   808 │   │   │   if os.path.isdir(pretrained_model_name_or_path):                               │
│   809 │   │   │   │   tokenizer_class.register_for_auto_class()                                  │
│ ❱ 810 │   │   │   return tokenizer_class.from_pretrained(                                        │
│   811 │   │   │   │   pretrained_model_name_or_path, *inputs, trust_remote_code=trust_remote_c   │
│   812 │   │   │   )                                                                              │
│   813 │   │   elif config_tokenizer_class is not None:                                           │
│                                                                                                  │
│ /home/admin/anaconda3/envs/chatglm/lib/python3.10/site-packages/transformers/tokenization_utils_ │
│ base.py:2048 in from_pretrained                                                                  │
│                                                                                                  │
│   2045 │   │   │   else:                                                                         │
│   2046 │   │   │   │   logger.info(f"loading file {file_path} from cache at {resolved_vocab_fil  │
│   2047 │   │                                                                                     │
│ ❱ 2048 │   │   return cls._from_pretrained(                                                      │
│   2049 │   │   │   resolved_vocab_files,                                                         │
│   2050 │   │   │   pretrained_model_name_or_path,                                                │
│   2051 │   │   │   init_configuration,                                                           │
│                                                                                                  │
│ /home/admin/anaconda3/envs/chatglm/lib/python3.10/site-packages/transformers/tokenization_utils_ │
│ base.py:2287 in _from_pretrained                                                                 │
│                                                                                                  │
│   2284 │   │                                                                                     │
│   2285 │   │   # Instantiate the tokenizer.                                                      │2286 │   │   try:                                                                              │
│ ❱ 2287 │   │   │   tokenizer = cls(*init_inputs, **init_kwargs)                                  │
│   2288 │   │   except OSError:                                                                   │
│   2289 │   │   │   raise OSError(                                                                │
│   2290 │   │   │   │   "Unable to load vocabulary from file. "                                   │
│                                                                                                  │
│ /root/.cache/huggingface/modules/transformers_modules/checkpoint-3000/tokenization_chatglm.py:10 │
│ 8 in __init__                                                                                    │
│                                                                                                  │
│   105 │   │   │   "<pad>": self.tokenizer.pad_id                                                 │
│   106 │   │   }                                                                                  │
│   107 │   │   self.encode_special_tokens = encode_special_tokens                                 │
│ ❱ 108 │   │   super().__init__(padding_side=padding_side, clean_up_tokenization_spaces=clean_u   │
│   109 │   │   │   │   │   │    encode_special_tokens=encode_special_tokens,                      │
│   110 │   │   │   │   │   │    **kwargs)                                                         │
│   111                                                                                            │
│                                                                                                  │
│ /home/admin/anaconda3/envs/chatglm/lib/python3.10/site-packages/transformers/tokenization_utils. │
│ py:363 in __init__                                                                               │
│                                                                                                  │
│    360 │   │   self._added_tokens_encoder: Dict[str, int] = {k.content: v for v, k in self._add  │
│    361 │   │                                                                                     │
│    362 │   │   # 4 init the parent class                                                         │
│ ❱  363 │   │   super().__init__(**kwargs)                                                        │
│    364 │   │                                                                                     │
│    365 │   │   # 4. If some of the special tokens are not part of the vocab, we add them, at th  │366 │   │   # the order of addition is the same as self.SPECIAL_TOKENS_ATTRIBUTES following   │
│                                                                                                  │
│ /home/admin/anaconda3/envs/chatglm/lib/python3.10/site-packages/transformers/tokenization_utils_ │
│ base.py:1603 in __init__                                                                         │
│                                                                                                  │
│   1600 │   │   # Stores a Jinja template that formats chat histories into tokenizable strings    │1601 │   │   self.chat_template = kwargs.pop("chat_template", None)                            │
│   1602 │   │                                                                                     │
│ ❱ 1603 │   │   super().__init__(**kwargs)                                                        │
│   1604 │                                                                                         │
│   1605 │   @property                                                                             │
│   1606 │   def max_len_single_sentence(self) -> int:                                             │
│                                                                                                  │
│ /home/admin/anaconda3/envs/chatglm/lib/python3.10/site-packages/transformers/tokenization_utils_ │
│ base.py:861 in __init__                                                                          │
│                                                                                                  │
│    858 │   │   │   │   │   ), "One of the tokens is not a string or an AddedToken"               │
│    859 │   │   │   │   │   setattr(self, key, value)                                             │
│    860 │   │   │   │   elif isinstance(value, (str, AddedToken)):                                │
│ ❱  861 │   │   │   │   │   setattr(self, key, value)                                             │
│    862 │   │   │   │   else:                                                                     │
│    863 │   │   │   │   │   raise TypeError(f"Special token {key} has to be either str or AddedT  │
│    864                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: can't set attribute 'eos_token'

解决办法

  1. 找到模型保存文件夹中的 tokenizer_config.json。路径为:../output/checkpoint-xxxx/tokenizer_config.json

image.png

  1. 编辑tokenizer_config.json,删除其中的eos_tokenpad_tokenunk_token就可以了

image.png

注意:删除这三项后,要删除最后一行最后面的逗号!

重新运行代码,即可运行模型:

python inference_hf.py your_finetune_path --prompt your prompt

这篇关于ChatGLM3:AttributeError_ can‘t set attribute ‘eos_token‘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/856388

相关文章

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

Android set Tag, findViewWithTag使用

设置了tag为“principal”的view ImageView principal = (ImageView) findViewById(R.id.imagen_home_0);principal.setTag("principal"); 在其它地方获取,获取已经设置了tag为“principal”的view LayoutInflater inflater = LayoutInflate

C++ STL关联容器Set与集合论入门

1. 简介 Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树,其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。因此,Set中的元素总是顺序的。 Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相

Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.B

一个bug日志 FATAL EXCEPTION: main03-25 14:24:07.724: E/AndroidRuntime(4135): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.syyx.jingubang.ky/com.anguotech.android.activity.Init

Eclipse或MyEclipse中Java Working Set管理项目

随着学习JAVA的时间的越来越久,项目也越来越多,Eclipse或MyEclipse界面中显示一堆! 每次工作使用到的项目肯定不会太多...... 每次从这么大数量的工程当中找到自己要使用的, 必须大规模的滚动滚动条...... 图片一   Project Explorer中:    图片二:Package Explorer中: 这样就好找很多了,分类放!

STL set整理

#include<set>#include<cstdio>#include<iterator>#include<iostream>#include<algorithm>using namespace std;//set 集合的操作//multisetset<int>Set1;set<int>Set2;set<int>Set3;/*begin() 返回指向第一个元素的迭代器