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.mzph.cn/news/777732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack源码分析——makeCacheable函数和weakMap的缓存应用场景

一、makeCacheable 函数 函数功能 该函数是将一个不带缓存的函数 realFn 转换成一个带缓存的版本。这样可以提高性能&#xff0c;因为相同的输入值不需要每次都重新计算&#xff0c;而是可以从缓存中直接获取结果。 二、函数分析 使用 WeakMap 弱引用特性创建缓存 const cach…

LINUX交叉编译arm/aarch64简单脚本

代码文件是test.c 编译脚本 export ARCHaarch64# 这一句好像没有什么用 export CROSS_COMPILEaarch64-mix210-linux-export PATH$PATH:/opt/linux/x86-arm/aarch64-mix210-linux/binA_GCCaarch64-mix210-linux-g EXE_FILEtest ${A_GCC} \-o ${EXE_FILE} \test.cPATH中那个目录…

C语言面试高频考点

1. 封装函数实现strlen功能 #include <stdio.h>size_t MyStrlen(const char *pstr) {size_t cnt 0;while (*pstr ! \0){cnt;}return cnt; }int main(void) {char str[256] {0};size_t len 0;gets(str);len MyStrlen(str);printf("数组长度为&#xff1a;%ld\n&q…

3.Labview字符串与路径精讲(下) — 字符串及路径的使用

本章讲解labview中的字符串和路径具体实践用例&#xff0c;从前面板字符串属性到后面板字符串函数应用做出详细概述&#xff0c;通过本文的学习希望大家了解到字符串及路径在labview编程中的重要地位。 本系列文章为labview 从基础到强化到精通的学习文章&#xff0c;大家可以随…

Unity3d使用Jenkins自动化打包(Windows)(二)

文章目录 前言一、Unity工程准备二、Unity调取命令行实战一实战二实战三实战四实战五 总结 前言 自动化打包的价值在于让程序员更轻松地创建和管理构建工具链&#xff0c;提高编程效率&#xff0c;将繁杂的工作碎片化&#xff0c;变成人人&#xff08;游戏行业特指策划&#x…

装饰器模式:灵活增强功能的利器

在软件设计过程中&#xff0c;经常需要为对象增加新的功能或职责&#xff0c;而这些新增的功能可能并不适合直接添加到原有的类中&#xff0c;因为这样会破坏原有类的结构或增加其复杂性。此时&#xff0c;装饰器模式&#xff08;Decorator Pattern&#xff09;便派上了用场。装…

RegSeg 学习笔记(待完善)

论文阅读 解决的问题 引用别的论文的内容 可以用 controlf 寻找想要的内容 PPM 空间金字塔池化改进 SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC / SPPFCSPC / SPPELAN &#xfffc; ASPP STDC&#xff1a;short-term dense concatenate module 和 DDRNet SE-ResNeXt …

如何为企业策划一场XR虚拟直播?

活动年年办&#xff0c;都是老一套&#xff0c;想玩点新花样&#xff1f; 预算有限&#xff0c;但还是想把活动办的逼格高一点&#xff1f; 想通过活动&#xff0c;让更多的人知道自己企业的品牌&#xff1f; 随着AIGC技术的不断演变&#xff0c;企业活动的形式和内容也在不…

Linux中的vim/vi编辑器

VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。 VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器&#xff0c;可以说是&#xff1a;编辑器之神。可以主动的以字体颜 色辨别语法的正确性&#xff0c;方便程序设计。VIM 与 VI 编辑器完全兼容。 一:三种…

MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索

宗喆和张正分别给我们带了 KCL 相关的最新进展&#xff0c;由蚂蚁集团开发的 Rust 编写的开源 DSL&#xff0c;目标是优化云原生策略配置和用户体验。它通过引入动态配置管理、配置校验和基础设施抽象等核心概念&#xff0c;解决开发者认知负担、配置膨胀和标准化工具缺乏的问题…

Unity AI Navigation自动寻路

目录 前言一、Unity中AI Navigation是什么&#xff1f;二、使用步骤1.安装AI Navigation2.创建模型和材质3.编写向目标移动的脚本4.NavMeshLink桥接组件5.NavMeshObstacle组件6.NavMeshModifler组件 三、效果总结 前言 Unity是一款强大的游戏开发引擎&#xff0c;而人工智能&a…

Swagger添加JWT验证(ASP.NET)

文章目录 JWT1、解析2、配置JWT JWT 1、解析 1&#xff09;客户端向授权服务系统发起请求&#xff0c;申请获取“令牌”。 2&#xff09;授权服务根据用户身份&#xff0c;生成一张专属“令牌”&#xff0c;并将该“令牌”以JWT规范返回给客户端 3&#xff09;客户端将获取到的…

Kafka重要配置参数全面解读(重要)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Kafka重要配置参数全面解读(重要 前言auto.create.topics.enableauto.leader.rebalance.enablelog.retention.{hour|minutes|ms}offsets.topic.num.partitions 和 offsets.topic.replication.factorlo…

天星金融(原小米金融)聚焦金融知识普及和反诈宣传,践行金融为民

在信息网络快速发展的背景下&#xff0c;移动互联网为大众的生活带来诸多便利。随之而来的新型诈骗手段也层出不穷&#xff0c;成为当前影响群众安全感、幸福感的“隐形杀手”。天星金融&#xff08;原小米金融&#xff09;一直以来严厉抵制诈骗犯罪行为&#xff0c;积极开展各…

php 快速入门(七)

一、操作数据库 1.1 操作MySQL的步骤 第一步&#xff1a;登录MySQL服务器 第二步&#xff1a;选择当前数据库 第三步&#xff1a;设置请求数据的字符集 第四步&#xff1a;执行SQL语句 1.2 连接MySQL 函数1&#xff1a;mysql_connect() 功能&#xff1a;连接&#xff08;登录…

软件概要设计说明书word原件(实际项目)

一、 引言 &#xff08;一&#xff09; 编写目的 &#xff08;二&#xff09; 范围 &#xff08;三&#xff09; 文档约定 &#xff08;四&#xff09; 术语 二、 项目概要 &#xff08;一&#xff09; 建设背景 &#xff08;二&#xff09; 建设目标 &#xff08;三&a…

深入了解RabbitMQ:构建高效的消息队列系统(三)

本系列文章简介&#xff1a; 本系列文章将深入了解RabbitMQ的工作原理、特性和最佳实践。我们将介绍如何安装和配置RabbitMQ服务器&#xff0c;以及如何开发生产者和消费者应用程序。我们还将探讨如何处理消息的持久化、消息路由和消息过滤。除此之外&#xff0c;我们将研究如何…

分类任务中的评估指标:Accuracy、Precision、Recall、F1

概念理解 T P TP TP、 T N TN TN、 F P FP FP、 F N FN FN精度/正确率&#xff08; A c c u r a c y Accuracy Accuracy&#xff09; 二分类查准率 P r e c i s i o n Precision Precision&#xff0c;查全率 R e c a l l Recall Recall 和 F 1 − s c o r e F1-score F1−s…

ChatGPT 商业金矿(上)

原文&#xff1a;ChatGPT Business Goldmines 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第一章&#xff1a;为什么我写这本书 欢迎阅读《ChatGPT 多源收入&#xff1a;20 个利润丰厚的业务&#xff0c;任何人都可以在一周内使用 ChatGPT 开始》。我很高兴分享我…

<QT基础(5)>事件监听

事件监听 事件监听&#xff08;Event Handling&#xff09;是在程序中监视和响应发生的事件的一种机制。在Qt中&#xff0c;事件监听是一种常见的用于处理用户输入、系统事件以及其他类型事件的方法。通过事件监听&#xff0c;您可以在发生特定事件时捕获事件并执行相应的操作…