本系列将讲述如何从零开始私有化实现及部署类ChatGPT的对话机器人,主要分环境安装,模型现状与选型,基础chatglm模型详解及部署,chatglm不同环境常见bug,前后端对话简单实现,流式对话实现,chatpdf实现,海量本地知识库搜索能力实现,visualglm图片描述模型详解,集成,文本生成图片模型集成,语音识别详解,语音合成详解,语音对话功能集成等等内容。
阅读本系列需要有一定的人工智能算法能力,对nlp算法,语音算法有一定了解,还涉及多方面工程能力知识,如阅读中有任何问题,可以留言,本人会一一解答。
本章节主要罗列一些清华大模型chatglm本地化部署时常见的bug报错与解决思路,仅供大家参考。
问题1.torch.cuda.OutOfMemoryError
常见问题,显存不够。 一般来说有两种情况,一种是模型太大,加载不起来,还有一种是存在显存占用。
问题排查思路,首先执行nvidia-smi,可以看到如下:
如上图,存在一个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部署会遇到一些问题,本章节也无法穷尽,总之遇到什么问题多查网上资料就行。