说明

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

挖掘 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 另外下载替换。

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

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 的代码也需求自行修正

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

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…