ChatGLM-6B 大模型的前世今生( 三 )


GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b
然后从这里手动下载模型参数文件,并将下载的文件替换到本地的 -6b 目录下 。
将模型下载到本地之后,将以上代码中的 THUDM/-6b 替换为你本地的 -6b 文件夹的路径,即可从本地加载模型 。
模型的实现仍然处在变动中 。如果希望固定使用的模型实现以保证兼容性,可以执行
git checkout v1.1.0
Demo & API
我们提供了一个基于的网页版 Demo 和一个命令行 Demo 。使用时首先需要下载本仓库:
git clone https://github.com/THUDM/ChatGLM-6Bcd ChatGLM-6B
网页版 Demo
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--62)(/web-demo.gif)]
首先安装 :pip,然后运行仓库中的 .py:
python web_demo.py
程序会运行一个 Web,并输出地址 。在浏览器中打开输出的地址即可使用 。最新版 Demo 实现了打字机效果,速度体验大大提升 。注意,由于国内的网络访问较为缓慢,启用 demo.queue().(share=True, =True) 时所有网络会经过服务器转发,导致打字机体验大幅下降,现在默认启动方式已经改为 share=False,如有需要公网访问的需求,可以重新修改为 share=True 启动 。
感谢 @ 实现了基于的网页版 Demo,运行方式见#117.
命令行 Demo
运行仓库中 .py:
python cli_demo.py
程序会在命令行中进行交互式的对话,在命令行中输入指示并回车即可生成回复,输入 clear 可以清空对话历史,输入 stop 终止程序 。
API部署
首先需要安装额外的依赖 pip,然后运行仓库中的 api.py:
python api.py
默认部署在本地的 8000 端口,通过 POST 方法进行调用
curl -X POST "http://127.0.0.1:8000" \-H 'Content-Type: application/json' \-d '{"prompt": "你好", "history": []}'
得到的返回值为
{"response":"你好!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题 。","history":[["你好","你好!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题 。"]],"status":200,"time":"2023-03-23 21:38:40"}
低成本部署 模型量化
默认情况下,模型以 FP16 精度加载,运行上述代码需要大概 13GB 显存 。如果你的 GPU 显存有限,可以尝试以量化方式加载模型,使用方法如下:
# 按需修改,目前只支持 4/8 bit 量化model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(8).half().cuda()
进行 2 至 3 轮对话后,8-bit 量化下 GPU 显存占用约为 10GB,4-bit 量化下仅需 6GB 占用 。随着对话轮数的增多,对应消耗显存也随之增长,由于采用了相对位置编码,理论上 -6B 支持无限长的 -,但总长度超过 2048(训练长度)后性能会逐渐下降 。
模型量化会带来一定的性能损失,经过测试,-6B 在 4-bit 量化下仍然能够进行自然流畅的生成 。使用 GPT-Q 等量化方案可以进一步压缩量化精度/提升相同量化精度下的模型性能,欢迎大家提出对应的 Pull。
量化过程需要在内存中首先加载 FP16 格式的模型,消耗大概 13GB 的内存 。如果你的内存不足的话,可以直接加载量化后的模型,INT4 量化后的模型仅需大概 5.2GB 的内存: