ChatGLM-6B运行api.py报AttributeError:ChatGLMTokenizer无sp_tokenizer属性求助
AttributeError: 'ChatGLMTokenizer' object has no attribute 'sp_tokenizer' when running ChatGLM-6B api.py
问题描述
之前从ChatGLM-6B仓库获取的默认api.py运行正常,近期再次启动时突然抛出错误:
AttributeError: 'ChatGLMTokenizer' object has no attribute 'sp_tokenizer'
已尝试以下操作但未解决问题:
- 重新安装指定版本的transformers:
pip install transformers==4.27.1 - 更新
tokenization_chatglm.py至最新版本
由于对tokenization_chatglm.py和api.py的内部逻辑不熟悉,希望找到遗漏的解决步骤或其他可行修复方案,目标是让api.py正常运行以实现ChatGLM的本地离线使用。
可能的修复步骤
1. 验证tokenizer文件完整性与加载路径
- 确认本地
tokenization_chatglm.py文件完整,包含sp_tokenizer的初始化代码(比如在__init__方法中是否有self.sp_tokenizer = spm.SentencePieceProcessor()相关逻辑) - 确保
api.py优先加载本地的tokenization_chatglm.py,而非transformers库中的旧版本文件:
在api.py开头添加代码强制指定路径:import sys sys.path.insert(0, './') # 假设tokenizer文件在当前工作目录
2. 清理transformers缓存并本地加载模型
- 删除
~/.cache/huggingface/transformers目录下所有与ChatGLM相关的缓存文件 - 修改
api.py中加载tokenizer的代码,明确指定本地模型路径,避免拉取远程旧版本:tokenizer = AutoTokenizer.from_pretrained("./chatglm-6b-local-path", trust_remote_code=True)
3. 检查并更新相关依赖库
- 除transformers外,确保以下依赖版本兼容:
这些库是ChatGLM tokenizer正常初始化的必要依赖,版本过旧可能导致初始化失败pip install --upgrade torch protobuf sentencepiece
4. 手动初始化tokenizer排查问题
- 尝试直接在测试脚本中手动初始化tokenizer,确认是否是加载逻辑问题:
如果此测试正常,再检查from tokenization_chatglm import ChatGLMTokenizer tokenizer = ChatGLMTokenizer(vocab_file="./chatglm-6b-local-path/vocab.txt") print(hasattr(tokenizer, 'sp_tokenizer')) # 输出True则说明初始化正常api.py中是否有覆盖tokenizer实例的错误逻辑
内容的提问来源于stack exchange,提问作者Tianrun Zhao
相关产品推荐
相关产品推荐

