私有化实现及部署“chatgpt”对话机器人(四)--chatglm部署常见bug汇总

943 阅读3分钟

本系列将讲述如何从零开始私有化实现及部署类ChatGPT的对话机器人,主要分环境安装,模型现状与选型,基础chatglm模型详解及部署,chatglm不同环境常见bug,前后端对话简单实现,流式对话实现,chatpdf实现,海量本地知识库搜索能力实现,visualglm图片描述模型详解,集成,文本生成图片模型集成,语音识别详解,语音合成详解,语音对话功能集成等等内容。

阅读本系列需要有一定的人工智能算法能力,对nlp算法,语音算法有一定了解,还涉及多方面工程能力知识,如阅读中有任何问题,可以留言,本人会一一解答。

本章节主要罗列一些清华大模型chatglm本地化部署时常见的bug报错与解决思路,仅供大家参考。

问题1.torch.cuda.OutOfMemoryError

常见问题,显存不够。 一般来说有两种情况,一种是模型太大,加载不起来,还有一种是存在显存占用。

问题排查思路,首先执行nvidia-smi,可以看到如下:

img.png 如上图,存在一个pid为18057的python正在占用显存,所以新启动会存在报错torch.cuda.OutOfMemoryError。
这时可执行kill命令,清理出显存:kill -9 18057

那么如果执行nvidia-smi并未发现有显存占用,那么理论上就是模型所需显存,当前显卡是不够的,这时候可以使用int4/int8两个量化版本,减少显存占用,修改代码。

model = AutoModel.from_pretrained("THUDM/chatglm-6b-int8", trust_remote_code=True).half().cuda()  
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()  

问题2.No compiled kernel found.

这个问题一般来说是用量化版本在cpu下出现的问题,应该先看下gcc环境,以及下载下来的库是否存在该kernel文件,如果都没问题,仍报。
自行编译:

gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels_parallel.c -shared -o quantization_kernels_parallel.so  
gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels.c -shared -o quantization_kernels.so  

然后在代码中加载kernel

model.quantize(bits=4, kernel_file="Your Kernel Path")  

问题3.No such file or directory: '***configuration_chatglm.py'

这个问题只要更新一下transformers库版本即可解决

pip install transformers==4.28.1  

问题4.RuntimeError: Library cudart is not initialized

cudnn可能安装不正确,可以根据《私有化实现及部署“chatgpt”对话机器人(一)--环境安装》重新检查一遍cudnn的安装。

问题5.多次推理后,显存OutOfMemoryError

因为多次推理会增加显存,可以在代码内加入torch.cuda.empty_cache(),也可以降低历史轮数

问题6.'Logger' object has no attribute 'warning_once'

升级transformers库如问题3解决方案

问题7. No module named xxx

pip install 对应的库就行,提示缺哪个,安装哪个

问题8. Command "python setup.py egg_info" failed with error

一般来说,可能是当前库在当前python版本下找不到对应的,这时候建议更新python版本,低版本python会很多库不支持,chatglm最好python是3.8及以上

chatglm部署会遇到一些问题,本章节也无法穷尽,总之遇到什么问题多查网上资料就行。