说明
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,还需求软件环境:
总结: 因为这些约束的存在,对小内存设备及 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…