挖掘 M2 Pro 32G UMA 内存潜力:在 Mac 上本地运行清华大模型 ChatGLM2-6B

说明

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 下载模型及相关代码

图片[1]-挖掘 M2 Pro 32G UMA 内存潜力:在 Mac 上本地运行清华大模型 ChatGLM2-6B-五八三
从 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

图片[2]-挖掘 M2 Pro 32G UMA 内存潜力:在 Mac 上本地运行清华大模型 ChatGLM2-6B-五八三
② 基于 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…

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYAuC7ar' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片