目录
注:默认你已经装好了conda、python等基础环境包。以下的每个步骤都有坑。
一、准备工作
1. 文件准备
我们得下载两份资料,第一份从GitHub仓库下载源代码,第二份从HuggingFace上下载模型权重,这两个放在同一个根目录下。
需要注意的坑:个人建议还是直接从网站上下载,不要去使用命令下载,那样会很慢,可能你都部署完了命令的方式还没下载完,HuggingFace里面有几个较大的文件,可能网络速度不稳定下载容易中断,建议去清华云盘上下载。
2. 代码修改部分
这一部分主要涉及到模型量化问题,其实就是利用模型性能的下降来换取硬件存储需求方面的下降,量化模型的速度会低于全量模型,但chatglm-6b在4-bit的量化下对话其实还比较流畅,影响不大。
相应的硬件需求:全量模型多轮对话大概需要14-15GB显存,IN8多轮对话大概需要10GB显存,IN4多轮对话大概需要6-7GB显存。
看你个人电脑的硬件条件,以下为IN4的代码,可以针对你想选择的量化值进行修改。
你需要修改 web_demo.py
,web_demo.py
,old_web_demo2.py
,cli_demo.py
,api.py
等文件中涉及模型部分的代码,一般在文件的开头或者结尾附近。(你使用哪个文件就改哪个文件,不需要全改)
tokenizer = AutoTokenizer.from_pretrained("你自己的文件路径/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("你自己的文件路径/chatglm-6b", trust_remote_code=True).half().quantize(4)
3. 包的安装下载
直接执行以下代码即可:
pip install -r requirements.txt
这里可能会出现包下载失败的情况,最基本的也就是找不到包或者连接不上的问题,这类问题都可以通过加入国内镜像源解决,这里简单提供几种:
pip install 安装包名字 -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com //豆瓣镜像网站
pip install 安装包名字 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com //豆瓣
pip install 安装包名字 -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn //清华大学
// 还有几种
http://mirrors.aliyun.com/pypi/simple/ 阿里云
https://pypi.mirrors.ustc.edu.cn/simple/ 中国科技大学
http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
神坑:安装完所有包后,会自动帮我们安装较高版本的gradio,会报出下面错误,这会造成后续模型部署好开始测试时,模型没有回复,所以你需要手动安装较低版本的gradio,例如gradio==3.39.0包,但这里会发现3.39.0在好几个镜像源上都找不到,所以个人建议如果找不到的话可以下载gradio==3.40.0的包。
GradioDeprecationWarning: The `style` method is deprecated. Please set these arguments in the constructor instead.
user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10).style(
4. GPU or CPU的坑
当你使用CPU推理的时候可能会出现以下错误:
RuntimeError: "LayerNormKernelImpl" not implemented for 'Half'
报错原因主要是因为模型模型做了半精度,即fp16,也就是说在前面的代码中,你应该是执行过这一句:
model = model.half()
而fp16,在CPU上是不能生效的,如果用CPU推理,只能老老实实的用fp32。
二、部署测试
直接执行:
python web_demo.py
这一步时间主要花费在加载权重上,大概五六分钟即可加载完毕,出现以下图片说明你部署成功了。
自己随便测两个,其实感觉效果一般,看我问他路线其实还是不太符合现实的,也不够详细:
三、总结
只要你有8GB的内存显卡,就能够部署chatglm-6b,部署速度也很快,但是部署过程中确实有很多坑,你需要慢慢去梳理,而且最终的效果其实并不是很好,接下来会继续部署一些大模型,例如chatglm2-6b、chatglm3,并对比以下效果。