当前位置:AIGC资讯 > AIGC > 正文

LLama.cpp轻量化模型部署及量化

模型文件下载

首先说一下用到的模型,这次用的是Llama3-8B-Chinese-Chat-GGUF-8bit模型,想要快速的从huggingface下载模型可以参考我的另一篇博文。

从huggingface更快的下载模型

1.准备模型文件

export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download shenzhi-wang/Llama3-8B-Chinese-Chat-GGUF-8bit --local-dir /home/xintk/workspace/model/Llama3-8B-Chinese-Chat-GGUF

2.安装

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

3.编译

编译会用到CMake。起初对CMake不是很了解,对CMake和Make傻傻分不清。

查资料了解到:

   CMake是一个跨平台的系统生成工具,它的主要作用是通过配置文件(通常是 CMakeLists.txt)生成适合于目标平台的构建脚本或文件。

   Make是一个构建自动化工具。通过读取Makefile 来执行编译和构建过程。

编译过程:

CMake 生成 Makefile。 Make 读取 Makefile 并调用 g++ 进行编译和链接。 g++ 是实际执行编译和链接的编译器。

CPU版本

cmake -B build_cpu
cmake --build build_cpu --config Release

CUDA版本

cmake -B build_cuda -DLLAMA_CUDA=ON
# cmake -B:新建一个文件夹build_cuda,然后把所有需要被编译的文件都放到build_cuda文件下面
# -DLLAMA_CUDA=ON:打开cuda开关,表示支持cuda

cmake --build build_cuda --config Release -j 12
# --build:编译命令 
# --config:配置使用Release模式
# -j:使用多核性能,12核加速编译

执行cmake -B build_cuda -DLLAMA_CUDA=ON报错

检查了一下,我的cmake版本是cmake version 3.30.0,cuda是12.2,一开始以为cmake版本不对应,后来发现gcc版本的原因,于是调整了gcc版本。

更换之前我的gcc版本是13.2,太新了。

安装gcc

 sudo apt install gcc-9 g++-9 gcc-10 g++-10

设置gcc优先级为gcc-10

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10

重新执行cmake -B build_cuda -DLLAMA_CUDA=ON成功了。效果如下

执行cmake --build build_cuda --config Release -j 12命令,过程需要一点点时间

cmake --build build_cuda --config Release -j 12

编译完成之后会在build_cuda/bin目录下生成可执行文件

4.具体使用

cmake的功能很强大,这里主要用到了三个功能。

    1)主功能main

         编译完成之后先进入到build_cuda/bin目录下,可以看到这里有llama-cali文件,然后执行如下命令。    main参数介绍

cd /home/xintk/workspace/llama.cpp/build_cuda/bin

./llama-cli -m /home/xintk/workspace/model/Llama3-8B-Chinese-Chat-GGUF/Llama3-8B-Chinese-Chat-q8_0-v2_1.gguf \
    -n -1 \
    -ngl 256 \
    -t 12 \
    --color \
    -r "User:" \
    --in-prefix " " \
    -i \
    -p \
'User: 你好
AI: 你好啊,我是小明,要聊聊吗?
User: 好啊!
AI: 你想聊聊什么话题呢?
User:'

   参数介绍:

-m 指定模型路径

-n 预测多少token,假设指定128:预测到128个token结束,-1表示一直生成

-ngl 使用 GPU 支持进行编译时,允许将某些层卸载到 GPU 进行计算。通常可提高性能

-t 使用多核性能

--color 启用彩色输出以在视觉上区分提示、用户输入和生成的文本

-r 反向提示,遇到某个字符停下来,营造一种交互,这里指定为User:

--in-prefix 输入之前给一个空格

-i 交互模型(chat)

-p 等价--prompt

官方给的参数解析

    2)  服务部署功能server

           这一部分由build_cuda/bin/llama-server控制,执行如下命令

cd /home/xintk/workspace/llama.cpp/build_cuda/bin

./llama-server \
    -m /home/xintk/workspace/model/Llama3-8B-Chinese-Chat-GGUF/Llama3-8B-Chinese-Chat-q8_0-v2_1.gguf \
    --host "127.0.0.1" \
    --port 8080 \
    -c 2048 \
    -ngl 128 \

启动这个服务,效果如下:

访问这个服务

# Openai 风格
curl --request POST \
    --url http://localhost:8080/v1/chat/completions \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer echo in the moon" \
    --data '{
        "model": "gpt-3.5-turbo",
        "messages": [
            {"role": "system", "content": "你叫蜡笔小新,是一个ai助手,是由哆唻爱梦开发实现的."},
            {"role": "user", "content": "你好啊!怎么称呼你呢?"}
        ]
    }'

   效果如下:会快速地给一个结果

3)量化功能

量化指的是把一个高精度的浮点数,改变成一个低精度的浮点数或Int

     1.fp16  ---int8

     2.fp16  ---fp16

  1)将 gguf 格式进行(再)量化

cd /home/xintk/workspace/llama.cpp/build_cuda/bin

./llama-quantize

可以先执行./llama-quantize -h 查看一下参数

./llama-quantize
./llama-quantize --allow-requantize /home/xintk/workspace/model/Llama3-8B-Chinese-Chat-GGUF/Llama3-8B-Chinese-Chat-q8_0-v2_1.gguf /home/xintk/workspace/model/Llama3-8B-Chinese-Chat-GGUF/Llama3-8B-Chinese-Chat-q4_1-v1.gguf Q4_1

  2)将 safetensors 格式转成 gguf

cd /home/xintk/workspace/llama.cpp

python convert-hf-to-gguf.py /home/xintk/workspace/model/Llama3-8B-Chinese-Chat --outfile /home/xintk/workspace/model/Llama3-8B-Chinese-Chat-GGUF/Llama3-8B-Chinese-Chat-q8_0-v1.gguf --outtype q8_0

5.实验代码

实验中用到的代码我放到了github上,地址如下 。

https://github.com/850977164/llama.cpp

参考资料

1.https://github.com/ggerganov/llama.cpp/tree/master/examples/main

2.https://github.com/echonoshy/cgft-llm/tree/master/llama-cpp

总结

文章总结:
本文详细介绍了如何下载、安装、编译并使用Llama3-8B-Chinese-Chat-GGUF-8bit模型,同时提供了CUDA版本编译过程中可能遇到的问题及其解决方法。
### 主要步骤总结:
1. **模型文件下载**:
- 使用指定命令从huggingface下载Llama3-8B-Chinese-Chat-GGUF-8bit模型。
2. **准备模型文件**:
- 通过`huggingface-cli`工具下载指定模型到本地目录。
3. **安装llama.cpp**:
- 使用`git clone`命令下载llama.cpp的源代码。
4. **编译**:
- **CPU版本**:使用CMake生成Makefile,并通过Make工具进行编译。
- **CUDA版本**:详细解释了CMake与Make的区别,使用CMake支持CUDA编译。遇到版本不匹配问题时,调整了gcc版本并设置优先级。
- 编译完成后,在`build_cuda/bin`目录下生成可执行文件。
5. **具体使用**:
- 介绍了`llama-cli`命令行工具的使用,包括主要参数的说明和示例。
- 部署`llama-server`服务,并展示了通过HTTP请求与其交互的示例。
- 描述了模型量化的基本概念并展示了如何将.gguf格式模型再进行量化或使用脚本将.safetensors格式转换为.gguf格式。
6. **资源提供**:
- 共享了实验中用到的代码GitHub仓库地址。
- 提供了相关参考资料链接,以便于进一步学习和研究。
通过本文,读者可以系统地了解如何从模型下载到部署以及使用Llama3-8B-Chinese-Chat-GGUF-8bit模型的全部过程,并在实际应用中遇到问题时找到相应的解决方案。

更新时间 2024-08-17