GPT 量化加速推理的几个方案

越来越多的开源优质模型,我们的选择也越来越多了,模型的质量上去了,硬件的要求更高了。

在我们有限的硬件条件下,甚至,在一些便携设备下,运行 LLM 几乎不可用。但是还是有些办法的:量化加速,CUDA,Vulcan,Metal,等。

量化加速通常会把LLM的 30G+ 的文件,处理到 10G以下。有一个通用标准:GGUF,单文件,可以让整个过程更轻松。

量化加速方案 我目前推荐4种:

  • llama.cpp (支持的很多,HF上的GGUF能直接用的也有很多)
  • MLC-LLM(有自己的特定格式,但HF有自己能直接用的模型库,预构建的二进制文件安装很友好)
  • chatglm.cpp(ChatGLM的量化方案,对于国内的语言环境比较友好,但是缺点很严重)
  • LM Studio(桌面版安装,哪哪都好,但不开源。)

tips: 本文假设你会安装 brew,miniconda,python 等。

image ref: https://textmine.com/post/an-introduction-to-llm-quantization

llama.cpp

quantize ref: https://github.com/ggerganov/llama.cpp/blob/master/examples/quantize/README.md

  1. clone llama.cpp
git clone https://github.com/ggerganov/llama.cpp.git
  1. install python dependency
python3 -m pip install -r requirements.txt
  1. install llama.cpp binary (or build)
brew install llama.cpp
  1. download model (GLM4)

(or you can download gguf model from https://huggingface.co)

git clone https://www.modelscope.cn/ZhipuAI/glm-4-9b-chat.git
  1. convert hf to gguf
# cd llama.cpp/
python3 convert_hf_to_gguf.py /tmp/glm-4-9b-chat/

# INFO:hf-to-gguf:Model successfully exported to /tmp/glm-4-9b-chat/glm-4-9B-chat-F16.gguf
  1. quantize:
llama-quantize /tmp/glm-4-9b-chat/glm-4-9B-chat-F16.gguf /tmp/glm-4-9b-chat/glm-4-9B-chat-F16-Q4_K_M.gguf Q4_K_M

# main: quantizing '/tmp/glm-4-9b-chat/glm-4-9B-chat-F16.gguf' to '/tmp/glm-4-9b-chat/glm-4-9B-chat-F16-Q4_K_M.gguf' as Q4_K_M
  1. run
llama-cli -m glm-4-9B-chat-F16-Q4_K_M.gguf -p "I believe the meaning of life is" -n 128

# or 
llama-cli -m glm-4-9B-chat-F16-Q4_K_M.gguf -p "You are a helpful assistant" -cnv

MLC-LLM

quantize ref: https://llm.mlc.ai/docs/install/mlc_llm.html

  1. install (conda)

(ref: https://docs.anaconda.com/miniconda/)

conda create --name mlc-prebuilt  python=3.11
  1. install python dependency (vulkan & dependency)
# vulkan-loader
conda install -c conda-forge gcc libvulkan-loader

# gcc-ng
conda install -c conda-forge libgcc-ng

# mlc-llm
python -m pip install --pre -U -f https://mlc.ai/wheels mlc-llm-nightly mlc-ai-nightly

# (test)
python -c "import mlc_llm; print(mlc_llm)"

# (if no found vulkan driver, if you use cuda or etc..., you can ignore this)
sudo apt install libvulkan1
  1. download model
git clone https://hf-mirror.com/mlc-ai/gemma-7b-it-q4f16_2-MLC
  1. run
mlc_llm chat ./gemma-7b-it-q4f16_2-MLC
# or
mlc_llm serve ./gemma-7b-it-q4f16_2-MLC

chatglm.cpp

总结下来 优点和缺点一样明显。

优点是:快到不行
缺点是:只能支持 ChatGLM,对于兼容OpenAI的WebServer太麻烦,安装的时候总是少依赖。

  1. clone chatglm.cpp
git clone --recursive https://github.com/li-plus/chatglm.cpp.git && cd chatglm.cpp
git submodule update --init --recursive
  1. install python dependency
python3 -m pip install -U pip
python3 -m pip install torch tabulate tqdm transformers accelerate sentencepiece

# install chatglm-cpp (or `pip install -U chatglm-cpp`)
pip install .

pip3 install gradio
  1. convert
# you need pre download chatglm model, clone this repo: https://www.modelscope.cn/ZhipuAI/glm-4-9b-chat.git
python3 chatglm_cpp/convert.py -i glm-4-9b-chat -t q4_0 -o models/chatglm-ggml.bin
  1. run
cd chatglm.cpp/examples

python3 cli_demo.py -m ../models/chatglm-ggml.bin -i
# or gradio web ui.
python3 web_demo.py -m ../models/chatglm-ggml.bin