亦行之 2024-07-22 17:34 采纳率: 34.5%
浏览 4

ChatGLM-6B-Int4运行有误

在git上下载ChatGLM-6B的大模型之后,运行时报错KeyError: KeyError(‘chatglm6b is already registered in models[chat]‘),然后将代码做出修改之后,又提示AttributeError: type object 'Model' has no attribute 'is_registered',应该如何解决?

from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline
from modelscope.models import Model
import time
import json
import os

# 指定本地模型文件路径,替换成你自己的
# 只能是这个不然没有某个json文件
# 但是出现了模型已经注册古过的问题
local_model_path = 'C:\\Users\\11925\\ChatGLM-6B-Int4'
# C:\Users\11925\ChatGLM-6B-Int4
# local_model_path = 'C:\\Users\\11925\\.cache\\modelscope\\modelscope_modules'

if Model.is_registered('chatglm6b'):
    model = Model.get_model('chatglm6b')
else:
    # 从本地路径下载模型
    model = Model.from_pretrained(local_model_path)

# # 加载本地模型
# model = Model.from_pretrained(local_model_path)
# model = Model.from_pretrained(local_model_path, model_name='my_custom_chatglm6b')
pipe = pipeline(task=Tasks.chat, model=model)


# 定义一个函数来处理用户输入和模型回复,并计时
def chat_with_model():
    while True:
        # 获取用户输入
        query = input("\n用户:")
        if query.strip() == "退出":
            break
        # 开始计时
        start_time = time.time()
        # 发送输入到模型
        inputs = {'text': query, 'history': []}
        result = pipe(inputs)
        # 停止计时
        end_time = time.time()
        # 计算用时
        elapsed_time = end_time - start_time
        # 打印用时
        print(f"\n用时:{elapsed_time:.2f}秒")
        # 逐字打印模型回复内容
        if 'response' in result and result['response']:
            for char in result['response']:
                print(char, end='', flush=True)
            print()  # 打印换行符,以便于下一次输入
        else:
            print("\nChatGLM:这道题我不会,请尝试其他问题。")

# 启动聊天
chat_with_model()



  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-22 17:36
    关注

    引自免费微信小程序:皆我百晓生

    这个问题看起来是在处理模型注册和加载的过程中出现的错误。我会尝试帮助你解决这个问题。

    首先,关于 KeyError: KeyError('chatglm6b is already registered in models[chat]') 这个错误,它表示 'chatglm6b' 这个模型已经在 models['chat'] 中被注册了。所以,当你试图再次注册它时,就会引发这个错误。你可以尝试在注册模型之前检查它是否已经被注册,如果已经注册,就直接获取模型,否则就注册模型。关于这部分的代码修改如下:

    model = None
    if not Model.is_registered('chatglm6b'):  # 检查模型是否已经注册
        model = Model.from_pretrained(local_model_path)  # 如果未注册,从本地路径加载模型
    else:
        model = Model.get_model('chatglm6b')  # 如果已注册,直接获取模型
    

    然后,关于 AttributeError: type object 'Model' has no attribute 'is_registered' 这个错误,看起来像是 Model 类中没有 is_registered 这个方法。这可能是因为 Model 类的版本问题或者使用方法不正确。你可以尝试查看 Model 类的官方文档或者源代码,确认是否有 is_registered 这个方法,以及它的正确使用方法。如果没有这个方法,你可能需要改用其他方式来检查模型是否已经被注册。比如,你可以尝试使用模型的名称来直接获取模型,如果获取成功则说明模型已经被注册,否则就注册模型。修改后的代码如下:

    try:
        model = Model.get_model('chatglm6b')  # 尝试获取模型
    except KeyError:  # 如果抛出 KeyError 异常,说明模型未注册
        model = Model.from_pretrained(local_model_path)  # 从本地路径加载模型
    

    以上是一些可能的解决方案,具体的解决方案可能需要根据你的实际情况进行调整。希望这些建议对你有所帮助!如果还有其他问题,请随时向我提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月22日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真