1. 簡介
ChatGLM 6B是清華大學和智譜合作的一個62億引數的大語言模型,基于清華的GLM模型開發,和Meta的LLaMA模型還不是一種模型,
由于LLaMA缺乏中文語料,中文能力不佳,在中文大模型中,ChatGLM 6B引數較小,運行硬體要求較低,而表現可謂出色,所以這里作為一個基礎模型先讓他運行起來看看有多大的能力,
2. 準備環境
在這里我們一般使用miniconda來做python的包管理,
新建一個Python3.10環境,環境名叫chatglm-6b
conda create -n chatglm-6b python=3.10
激活這個環境,從此之后都在這個環境chatglm-6b中操作
conda activate chatglm-6b
3. 下載代碼
執行下列命令
git clone https://github.com/THUDM/ChatGLM-6B
這里沒有什么花哨的地方,下載下來就可以了,
4. 安裝Python依賴
python環境切到chatglm-6b, 在上面克隆下來的ChatGLM-6B代碼目錄中執行下列命令
pip install -r requirements.txt
根據ChatGLM-6B的官方檔案,需要安裝Pytorch Nightly(似乎不安裝nightly也可以),所以我們在裝完上面的依賴包之后,洗掉torch,重新安裝pytorch nightly,
安裝方法:鏈接
執行命令
pip uninstall torch
pip install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu
然后,我們看下下載下來的pytorch是不是支持m1的gpu加速
執行python進入python命令列
輸入命令
import torch; torch.backends.mps.is_available()
輸出True即為可以用M1的GPU加速,但是這里int4量化后的版本不支持MPS GPU加速,而非量化的版本雖然支持MPS GPU加速,但是如果沒有32G記憶體的話,記憶體不足導致執行速度非常的慢,所以在用int4量化后的模型后,有沒有MPS GPU加速都會使用CPU推理,
Python 3.10.11 (main, Apr 20 2023, 13:58:42) [Clang 14.0.6 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch; torch.backends.mps.is_available()
True
>>>
安裝icetk
奇怪的是運行web_demo.py需要icetk包,但是沒有寫在requirements.txt里
補上
pip install icetk
這樣就把包依賴安裝好了,
5. 使用模型推理
5.1. 使用int4量化模型
Mac M1上如果沒有32G及32G以上記憶體,一般還是int4量化模型會快一點,
5.1.1. 下載模型到本地
先運行huggingface.co下的ChatGLM 6B 4int量化后的模型,這個模型推理需要6G記憶體,finetune需要7G記憶體,對于小記憶體用戶來說是最小硬體需求的模型,
huggingface.co克隆git repo需要git-lfs
所以先運行
git lfs install
如果沒有裝過git-lfs,可以看這個鏈接安裝git-lfs
克隆int4量化model
git clone https://huggingface.co/THUDM/chatglm-6b-int4
Mac上沒有CUDA可以用,而量化模型是基于CUDA開發的,所以M1/M2的MPS GPU加速也不可用,這里只能用CPU推理,CPU推理需要安裝g++和openmp
由于本機安裝的g++版本是14.x,所以可以按照鏈接的指示安裝openmp
然后把THUDM/chatglm-6b-int4拷貝到代碼的ChatGLM-6B下,所以在本地克隆下來的代碼目錄下,模型放在
代碼目錄/THUDM/chatglm-6b-int4下
5.1.2. 修改代碼
打開web_demo.py,修改代碼,
把下面代碼
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
改為
tokenizer = AutoTokenizer.from_pretrained("./THUDM/chatglm-6b-int4/", trust_remote_code=True)
model = AutoModel.from_pretrained("./THUDM/chatglm-6b-int4/", trust_remote_code=True).float()
5.1.3. 執行推理
執行命令
python web_demo.py
輸出
Arguments: (RuntimeError('Unknown platform: darwin'),)
No compiled kernel found.
Compiling kernels : ...
Compiling clang -O3 -fPIC -pthread -Xclang -fopenmp -lomp -std=c99 /Users/heye/.cache/huggingface/modules/transformers_modules/quantization_kernels_parallel.c -shared -o ...
Load kernel : ...
Setting CPU quantization kernel threads to 4
Using quantization cache
Applying quantization to glm layers
Running on local URL: http://127.0.0.1:7860
自動彈出瀏覽器:http://127.0.0.1:7860/
就可以用了,
可以試試輸入幾個問題
1. 方程和函式有什么區別

2.

6. 性能
由于用CPU推理,一個詞一個詞往外蹦,每個詞耗時大約是3-4秒,
如果在Windows下用GPU推理的話速度大約會提升十倍,
量化和非量化版本在表現上差異很少,這點比LLaMA要好很多,LLaMA的7Bint4量化版本表現比較差,
7. 評價
這個模型部署的坑非常少,清大的工程能力可謂出色,整體完成度很高,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555210.html
標籤:其他
上一篇:SRE 的作業介紹
下一篇:返回列表
