亦行之 2024-07-22 16:32 采纳率: 34.5%
浏览 0
已结题

ChatGLM-6b-Int4运行报错

python文件代码如下:

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


# 指定本地模型文件路径,替换成你自己的
# 只能是这个不然没有某个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'

# # 加载本地模型
model = Model.from_pretrained(local_model_path)

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()



该大模型是通过git下载的,路径正确但是运行后报错KeyError: KeyError('chatglm6b is already registered in models[chat]')
应该如何解决?具体代码怎么样修改?

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-07-22 16:35
    关注

    该回答引用自GPT-3.5, 由博主 GISer Liu 编写:

    问题分析

    用户在使用ChatGLM6bInt4模型时遇到了KeyError报错,错误信息为KeyError('chatglm6b is already registered in models[chat]')。这个错误表明在加载模型时,模型已经被注册过,导致重复注册时出现了冲突。

    解决方案

    为了解决这个问题,我们需要在加载模型之前检查模型是否已经被注册过,如果已经注册过,则直接使用已注册的模型,避免重复注册。

    修改后的代码

    以下是修改后的代码,主要在加载模型之前添加了检查模型是否已经注册的逻辑:

    from modelscope.utils.constant import Tasks
    from modelscope.pipelines import pipeline
    from modelscope.models import Model
    import time
    
    # 指定本地模型文件路径,替换成你自己的
    local_model_path = 'C:\\Users\\11925\\ChatGLM-6B-Int4'
    
    # 检查模型是否已经注册
    if Model.is_registered('chatglm6b'):
        model = Model.get_model('chatglm6b')
    else:
        model = Model.from_pretrained(local_model_path)
    
    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()
    

    代码解释

    1. 检查模型是否已经注册

      if Model.is_registered('chatglm6b'):
          model = Model.get_model('chatglm6b')
      else:
          model = Model.from_pretrained(local_model_path)
      

      这段代码首先检查chatglm6b模型是否已经注册,如果已经注册,则直接获取已注册的模型;否则,从本地路径加载模型。

    2. 其他部分代码保持不变
      其他部分的代码保持不变,主要是处理用户输入、模型回复和计时等功能。

    总结

    通过添加模型注册检查的逻辑,可以避免重复注册模型导致的KeyError报错。用户可以将修改后的代码直接粘贴使用,以解决运行时的问题。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月30日
  • 已采纳回答 7月22日
  • 创建了问题 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仿真