当前位置:   article > 正文

【学习笔记】:Ubuntu 22 使用模型量化工具llama.cpp部署大模型 CPU+GPU_llama gguf use gpu acceleration

llama gguf use gpu acceleration


前言

官方仓库:
  llama.cpp
  llama-cpp-python
环境
  CUDA Version: 12.2
  Torch: 2.1.1
  Python: 3.9


1 下载并编译llama.cpp

1.1 git下载llama.cpp仓库源码

由于服务器git上不去,先下载源码到本地再上传到服务器(带有.git隐藏文件)。

git clone https://github.com/ggerganov/llama.cpp
  • 1

1.2 编译源码(make)

生成./main和./quantize等二进制文件。

cd llama.cpp
  • 1

1.2.1 选择一:仅在CPU上运行

make
  • 1

1.2.2 选择二:使用GPU,与cuBLAS编译

使用 Nvidia GPU 的 CUDA 内核提供 BLAS 加速,确保设备上有GPU+CUDA。

make LLAMA_CUBLAS=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc
  • 1

如果遇到错误:
在这里插入图片描述
可尝试

make clean
cd scripts
sed -i 's/\r//' build-info.sh
make LLAMA_CUBLAS=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc
  • 1
  • 2
  • 3
  • 4

2 量化大模型

2.1 准备大模型

llama.cpp支持转换的模型格式有PyTorch 的.pth、huggingface的 .safetensors、还有之前 llamma.cpp 采用的 ggmlv3。
在 huggingface 上找到合适格式的模型,下载至 llama.cpp 的 models目录下。
或本地已下载的模型上传至models目录。

2.2 生成量化模型

quantize 提供各种精度的量化。量化会损失精度.(参考WIKI最后部分LLM量化笔记
仅需要近似于Q4_0或者Q4_1的效果(模型大小在3.5~3.9G),可以使用的是Q4_K_M,效果相比标准Q4_1模型变小了(3.9G->3.8G),ppl也变小了(0.1846->0.0535)。

先将模型转为GGUF的FP16格式

python3 convert.py ./models/chinese-alpaca-2-7b-hf/ 
  • 1

再对FP16模型进行4-bit量化

./quantize ./models/chinese-alpaca-2-7b-hf/ggml-model-f16.gguf ./models/chinese-alpaca-2-7b-hf/ggml-model-q4_0.gguf Q4_0
  • 1

3 加载模型

(涉及加载模型后部分模式的应用)

3.1 CPU

./main -m ./models/chinese-alpaca-2-7b-hf/ggml-model-q4_0.gguf -n 128 --prompt "Once upon a time"
  • 1

main模式部分参数:

  • m 指定模型
  • ins 交互模式,可以连续对话,上下文会保留
  • c 控制上下文的长度,值越大越能参考更长的对话历史(默认:512)
  • n 控制回复生成的最大长度(默认:128) –temp 温度系数,值越低回复的随机性越小
#以交互式对话
./main -m ./models/chinese-alpaca-2-7b-hf/ggml-model-q4_0.gguf --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.3
#chat with bob
./main -m ./models/chinese-alpaca-2-7b-hf/ggml-model-q4_0.gguf -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f prompts/chat-with-bob.txt
  • 1
  • 2
  • 3
  • 4

参考

3.2 GPU

CPU处理速度较慢,可以选择使用GPU进行加速。添加n_gpu_layers参数,让一些层在GPU上跑,提升推理的速度,具体数值视情况而定。

./main -m ./models/chinese-alpaca-2-7b-hf/ggml-model-q4_0.gguf -n 128 --n_gpu_layers 40 --prompt "Once upon a time"
  • 1

其他详细examples内容请参考官方文档


4 llama-cpp-python

可以借助llama-cpp-python的API编写python程序,读取文件进行文本生成任务。

4.1 安装llama-cpp-python

pip install llama-cpp-python
  • 1

注:若需要GPU加速,要在安装前设置环境变量:LLAMA_CUBLAS=on。若加速失败下滑见后文参考。

CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama-cpp-python
  • 1

4.2 API

高级API使用实例可直接参考仓库High-level API部分,使用GPU加速修改n_gpu_layers值即可。

from llama_cpp import Llama
llm = Llama(
      model_path="./models/7B/llama-model.gguf",
      # n_gpu_layers=-1, # Uncomment to use GPU acceleration
      # seed=1337, # Uncomment to set a specific seed
      # n_ctx=2048, # Uncomment to increase the context window
)
output = llm(
      "Q: Name the planets in the solar system? A: ", # Prompt
      max_tokens=32, # Generate up to 32 tokens, set to None to generate up to the end of the context window
      stop=["Q:", "\n"], # Stop generating just before the model would generate a new question
      echo=True # Echo the prompt back in the output
) # Generate a completion, can also call create_completion
print(output)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

若安装后不能成功使用GPU加速,参考此解决方案重新安装:

conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit cuda-nvcc -y --copy
CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install --upgrade --force-reinstall llama-cpp-python --no-cache-dir
  • 1
  • 2

参考

[1] llama.cpp量化部署
[2]大模型部署工具 llama.cpp
[3]Installing llama-cpp-python with GPU Support

(个人学习参考笔记,如有不妥烦请告知)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/288398
推荐阅读
相关标签
  

闽ICP备14008679号