说明
ChatGLM-6B 是由清华大学和智谱AI联合研发的产品 。是一个开源的、支持中英双语问答的对话语言模型,并针对中文进行了优化。该模型基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4量化级别下最低只需 6GB 显存)。
ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性:
- 更强大的性能:相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上取得了大幅度的提升。
- 更长的上下文:基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K。
- 更高效的推理:基于 Multi-Query Attention 技术,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。
硬件与软件需求
ChatGLM2-6B 在其他平台要求如下:
量化等级 | 编码 2048 长度的最小显存 | 生成 8192 长度的最小显存 |
---|---|---|
FP16 / BF16 | 13.1 GB | 12.8 GB |
INT8 | 8.2 GB | 8.1 GB |
INT4 | 5.5 GB | 5.1 GB |
但在 Mac 平台上,情况更复杂一些:
- Mac 上只支持本地运行,也就是项目代码和模型分开下载,然后修改
web_demo.py
中模型地址运行 - 搭载了 Apple Silicon 或者 AMD GPU 的 Mac,需使用 MPS 后端在 GPU 上运行,修改
web_demo.py
中运行方式 - 加载需要 13G 内存,使用过程会不断上涨至 20G 以上,建议使用 32G 以上内存设备
- 内存不足设备,可使用量化后的 INT4 模型,但量化后只能使用 CPU 推理,为了充分使用 CPU 并行,还需要单独安装 OpenMP。
Mac 上的 MPS 支持 Apple silicon or AMD GPUs,还需要软件环境:
- macOS 12.3 or later
- Python 3.7 or later
- Xcode command-line tools: xcode-select –install
总结:
因为这些限制的存在,对小内存设备及 GPU 较差的设备极不友好,所以这里只推荐 32G 内存以上的 m1 pro/max/ultra 与 m2 pro/max/ultra 设备来进行测试,24G 内存的 m2 也可以尝试。
关键步骤
0. 环境准备(可根据自己情况跳过)
① 安装 Anaconda,用来安装 Pytorch Nightly 版
也可不安装 Anaconda, 下一步使用 Mac 上自带的 pip 安装 Pytorch Nightly 版
// Apple silicon
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
sh Miniconda3-latest-MacOSX-arm64.sh
// 或 x86
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
sh Miniconda3-latest-MacOSX-x86_64.sh
② 安装 Pytorch Preview (Nightly) 版,用来提供 MPS 支持
// Anaconda
conda install pytorch torchvision torchaudio -c pytorch-nightly
// 或 pip
pip3 install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu
安装完成后测试,详见 苹果官方 Pytorch 安装完整教程
③安装 Git LFS,用来从 Huggingface 下载模型文件
brew install git-lfs
其他安装方式及测试方法,详见 Git Large File Storage 安装
1. 从 Github 下载项目代码
git clone https://github.com/THUDM/ChatGLM2-6B
cd ChatGLM2-6B
然后使用 pip 安装依赖:
pip install -r requirements.txt
其中 transformers
库版本推荐为 4.30.2,torch 推荐使用 2.0 以上的版本,以获得最佳的推理性能。
2. 从 Huggingface 下载模型及相关代码
从 Hugging Face Hub 下载模型需要 Git LFS,注意上图中标注 LFS
的文件大小,然后运行
// Http 方式
git lfs install
git clone https://huggingface.co/THUDM/chatglm2-6b
// 或 ssh 方式
git lfs install
git clone git@hf.co:THUDM/chatglm2-6b
如果你网络不好,也可以只从 Huggingface 下载模型实现与占位文件,然后从清华网盘下载模型后,替换相关占位文件即可。
//Http 方式
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b
// 或 ssh
GIT_LFS_SKIP_SMUDGE=1 git clone git@hf.co:THUDM/chatglm2-6b
需要注意的是,清华网盘中少了一个 LFS 中的 tokenizer.model
文件,需要自行从 Huggingface 另外下载替换。
3. 修改第 1 步中 demo.py 代码
这里 Web 版有两种运行方式,加上 命令行 版,所以共有 3 个 demo 文件需要更改,修改内容是一样的。每个都需修改两个地方:
- 本地地址修改为模型的磁盘路径(第 2 步中从 Huggingface 下载的模型路径)
- 模型加载使用
to('mps')
方式
# eg: web_demo.py
tokenizer = AutoTokenizer.from_pretrained("修改为第 2 步中存放 Huggingface 模型的路径", trust_remote_code=True)
model = AutoModel.from_pretrained("修改为第 2 步中存放 Huggingface 模型的路径", trust_remote_code=True).to('mps')
model = model.eval()
如果要部署 api 版,也要按同样方式修改 api.py
或 openai_api.py
中的代码,api 版中使用 cuda 的代码也需要自行修改
4. 运行 Web Demo
① 普通版 web_demo.py
首先安装 Gradio:pip install gradio
,然后运行仓库中的 web_demo.py:
python web_demo.py
② 基于 Streamlit 的网页版 Demo web_demo2.py
使用时首先需要额外安装依赖:pip install streamlit streamlit-chat
,然后通过以下命令运行:
streamlit run web_demo2.py
经测试,如果输入的 prompt 较长的话,使用基于 Streamlit 的网页版 Demo 会更流畅。
遇到的错误
①RuntimeError: Internal: src/sentencepiece_processor.cc(1101) [model_proto->ParseFromArray(serialized.data(), serialized.size())]
一般是因为下载的模型或文件缺少导致的,也可能是文件没有下载完整。比如没有直接从 Huggingface 中下载 LFS 文件,而是从网盘下载 .bin
文件替换,就会缺少 tokenizer.model
文件。
请注意比较下载后文件的大小或 sha256。详情见 启动web_demo报错,加载tokenizer报错
参考
developer.apple.com/metal/pytor…
github.com/THUDM/ChatG…
github.com/THUDM/ChatG…
huggingface.co/THUDM/chatg…
cloud.tsinghua.edu.cn/d/674208019…