赞
踩
langchain-chatchat在window上使用cpu运行Qwen-1_8B-Chat时遇到ERROR: object of type ‘NoneType‘ has no len(),这个问题其实是因为"addmm_impl_cpu_" not implemented for 'Half’这个根本原因导致的,也就是cpu不支持half精度。
网络上大部分文章都让换gpu跑模型。但是有些同学使用的是没有显卡的机器在跑。所以写了这篇文章,帮助大家彻底解决这个问题。
在使用cpu运行Qwen-1_8B-Chat的时候我遇到了如下的情况,打入您好,出来空白的回复。
报错提示是 ERROR: object of type ‘NoneType’ has no len()
翻阅了很多资料并没有给出解决方式。于是我找到python第三方库下的
lib\site-packages\langchain_community\chat_models\openai.py
在里面打印错误的具体原因
如下图红框所示,添加一行:
logger.info(chunk)
再次启动程序,提示如下:
这次有具体原因了:“addmm_impl_cpu_” not implemented for ‘Half’
这句话的意思是:cpu不支持 half这个精度。只有gpu才支持half。翻了很多资料都说是换gpu来运行。
但是大部分用户应该和我一样,电脑没有gpu,所以如果我们要想使用cpu来运行模型的话,我们需要让模型以float精度来运行
修改langchain-chatchat的model_config为cpu。相信大部分同学应该都做了这一步。
LLM_DEVICE = "cpu"
如下图所示
在你的第三方库地址 Lib\site-packages\fastchat\model\model_adapter.py 这个文件
我们搜索 class QwenchatAdapter
搜索到之后,往下翻,不远处,找到下面第一个
def load_model ,在里面修改两处(行号和图里的差不多,只是我追踪的时候加了很多日志在里面所以行号和原始文件的行号差了几行):
①注释掉
self.float_set(config, "fp16")
这句话
② 添加一行
device_map="cpu"
重启程序,问题就解决了。
要注意的是修改之后,因为模型采用cpu来跑了,需要使用比上面出错的时候更多的内存和cpu,有可能程序down掉。需要尽可能的关掉多余的软件,腾出cpu和内存。
以上的方法是我通过追踪代码找到的,修改方式属于硬编码,如果后面想用gpu跑模型,可以取消修改。
如果大家想要灵活的方式,可以自行修改判断条件。比如gpu是一个逻辑,cpu是一个逻辑。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。