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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/496511.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++取经之路(其二)——含数重载,引用。

含数重载: 函数重载是指&#xff1a;在c中&#xff0c;在同一作用域&#xff0c;函数名相同&#xff0c;形参列表不相同(参数个数&#xff0c;或类型&#xff0c;或顺序)不同&#xff0c;C语言不支持。 举几个例子&#xff1a; 1.参数类型不同 int Add(int left, int right)…

智慧酒店(一):EasyCVR酒店安防视频监控系统的搭建与特点分析

一、行业背景 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;智慧酒店作为现代酒店业的重要发展方向&#xff0c;人工智能的应用显得尤为重要。数据显示&#xff0c;全国智慧酒店每年以10%—15%的速度快速增长&a…

大型DMP系统

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;这是我作为学习笔记总结应用篇第一篇&#xff0c;本章大量的参考了别的博主的文章。 我们今天就先从搭建一个大型的 DMP 系统开始&#xff0c;利用组成原理里面学到的存储器知识&#xff0c;来做选型判断&#xff0c;从而更…

Redis高级面试题-2024

说说你对Redis的理解 Redis是一个基于Key-Value存储结构的开源内存数据库&#xff0c;也是一种NoSQL数据库。 它支持多种数据类型&#xff0c;包括String、Map、Set、ZSet和List&#xff0c;以满足不同应用场景的需求。 Redis以内存存储和优化的数据结构为基础&#xff0c;提…

短视频矩阵系统--技术3年源头迭代

短视频矩阵系统核心技术算法主要包括以下几个方面&#xff1a; 1. 视频剪辑&#xff1a;通过剪辑工具或API从各大短视频平台抓取符合要求的视频。这些视频通常符合某些特定条件&#xff0c;如特定关键词、特定时间段发布的视频、视频点赞评论转发等数据表现良好的视频。 2. 视…

揭露非法集资陷阱!

常见的非法集资手法 犯罪分子利用了社会公众的哪些心理&#xff1f; 使用了怎样的措辞&#xff1f; 一起来揭露非法资金集聚的几个陷阱&#xff01; 拐弯抹角地向亲朋好友承诺大额回报&#xff0c;希望他们加入&#xff08;利用社会认同原则&#xff09;。 不法分子造了个传…

pygame用chatgpt绘制3d沿x轴旋转的

import pygame from pygame.locals import * import sys import mathpygame.init()width, height 800, 600 screen pygame.display.set_mode((width, height))vertices [(0, 100, 0), (100, 200, 0), (300, 100, 0)]angle 0 rotation_speed 2 # 可根据需要调整旋转速度 c…

UDP send 出现大量“Resource temporarily unavailable”

背景 最近排查用户现场环境&#xff0c;查看日志出现大量的“send: Resource temporarily unavailable”错误&#xff0c;UDP设置NO_BLOCK模式&#xff0c;send又发生在进程上下文&#xff0c;并且还设置了SO_SNDBUF 为8M&#xff0c;在此情况下为什么还会出现发送队列满的情况…

iOS —— 初识KVO

iOS —— 初始KVO KVO的基础1. KVO概念2. KVO使用步骤注册KVO监听实现KVO监听销毁KVO监听 3. KVO基本用法4. KVO传值禁止KVO的方法 注意事项&#xff1a; KVO的基础 1. KVO概念 KVO是一种开发模式&#xff0c;它的全称是Key-Value Observing (观察者模式) 是苹果Fundation框架…

蓝桥备赛——DFS

废话不多说&#xff0c;先上题 对应代码如下&#xff1a; def dfs(x,y):global numfor i in range(0,4):dir[(-1,0),(0,-1),(1,0),(0,1)]nx,nyxdir[i][0] ,ydir[i][1]if nx<0 or nx>hx or ny <0 or ny>wy: continueif mp[nx][ny]*:num1print("%d:%s->%d%…

ROS 2边学边练(3)-- 何为节点(nodes)

在接触节点这个概念之前&#xff0c;我们先来看看下面这张动态图&#xff0c;更方便我们理解一些概念和交互过程。 &#xff08;相信大家的英文基础哈&#xff09; 概念 如上图所示&#xff0c;这里面其实涉及到了三个概念&#xff08;功能&#xff09;&#xff0c;分别是节点…

深入解析Spring MVC: 原理、流程【面试版】

什么是SpringMV? 1.是一个基于MVC的web框架&#xff1b; 2.是spring的一个模块&#xff0c;是spring的子容器&#xff0c;子容器可以拿父容器的东西&#xff0c;但是反过来不可&#xff1b; 2.SpringMVC的前端控制器是DispatcherServlet&#xff0c;用于分发请求。使开发变…

009——服务器开发环境搭建及开发方法(上)

目录 一、环境搭建 1.1网络环境 1.2 文件传输环境搭建 1.2.1 nfs环境 1.2.2 tftp环境 1.3 源码环境搭建 1.4 代码托管 1.5 配置交叉编译工具链 二、 开发方式 2.1 内核、设备树、驱动 make mrproper make 100ask_imx6ull_mini_defconfig​编辑 make zImage -j4 m…

Kubernetes Gateway API 介绍

Kubernetes Gateway API 诞生背景 在 kubernetes 中&#xff0c;流量的治理主要分为两个部分&#xff1a; 南北向流量东西向流量 南北向流量&#xff08;NORTH-SOUTH traffic&#xff09; 在计算机网络中&#xff0c;南北向流量通常指数据流量从一个**内部网络&#xff08;…

结构数列演化中的分枝

假设一个6*6的平面&#xff0c;这个平面的行和列可以自由的变换。 已知一个4点的结构数列顺序为 9 1 10 6 16 14 5 15 8 12 11 13 7 2 4 3 让这个数列按照4-5-4的方式演化 得到顺序为 1 9 1 10 6 16 14 5 15 8 12 11 13 7 2 4 3 2 16 6 9…

无需插件就能实现异构数据库的互联互通?(powershell妙用)

前两天在DBA群里有大佬分享了利用Oracle Database Gateway&#xff08;透明网关&#xff09;实现sqlserver和oracle 的数据交互&#xff0c;这里让我想到前些年写的一些powershell脚本用来做sqlserver和oracle的数据交互&#xff0c;powershell是windows自带的一个脚本工具&…

红队笔记8-CTF5打靶流程-CMS漏洞-多用户信息泄露(vulnhub)

目录 开头: 1.主机发现和端口扫描&#xff1a; 2.80端口-NanoCMS哈希密码信息泄露-后台getshell 3.提权-用户过多信息泄露 4.总结&#xff1a; 开头: 学习的视频是哔哩哔哩红队笔记&#xff1a; 「红队笔记」靶机精讲&#xff1a;LAMPSecurityCTF5 - 标准攻击链&#xff…

图论-最短路

一、不存在负权边-dijkstra算法 dijkstra算法适用于这样一类问题&#xff1a; 从起点 start 到所有其他节点的最短路径。 其实求解最短路径最暴力的方法就是使用bfs广搜一下&#xff0c;但是要一次求得所有点的最短距离我们不可能循环n次&#xff0c;这样复杂度太高&#xf…

vue.js——学习计划表

1&#xff09;准备工作 ①打开D:\vue\chapter02\ learning_schedule 目录&#xff0c;找到 index.html 文件。 在文件中引 入BootStrap 样式文件&#xff0c;具体代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

vivado 手动布线

手动路由 手动路由允许您为网络选择特定的路由资源。这给了你对信号将要采用的路由路径的完全控制。手动路由不调用route_design。路线在路线数据库中直接更新。当您想精确控制网络的延迟时&#xff0c;可能需要使用手动路由。对于例如&#xff0c;假设有一个源同步接口&#…