使用llama.cpp部署推理GGUF格式的大模型实践记录

1. 下载安装 llama.cpp

git clone https://github.com/ggml-org/llama.cpp

进入到 llama.cpp 目录

cd llama.cpp

2.编译 llama.cpp 生成可执行文件和库文件

编译GPU版本脚本:

cmake -B build -DGGML_CUDA=ON -DGGML_CUDA_ENABLE_UNIFIED_MEMORY=1

如果执行以上脚本时报了类似下面的错误:

-- Including CUDA backend

-- Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR)

CMake Error at common/CMakeLists.txt:90 (message):

Could NOT find CURL.  Hint: to disable this feature, set -DLLAMA_CURL=OFF

先执行如下脚本:

sudo apt-get update
sudo apt-get install libcurl4-openssl-dev

再执行编译GPU版本脚本。

编译CPU版本脚本:

cmake -B build

然后执行以下脚本:

cmake --build build --config Release -j 8

编译完成后,在llama.cpp/build/bin 目录下会生成很多可执行文件和库文件,例如:llama-cli 、llama-server、 llama-quantize 等。如下图所示:

3.安装python依赖库

还是在llama.cpp当前目录下执行以下脚本安装python依赖库,用于转换其它格式的模型为gguf格式的模型:

pip install -r requirements.txt

4.部署gguf格式模型进行推理

(1)gguf格式的模型可以从modelscope等大模型平台上下载,也可用使用llama.cpp自己转换的gguf格式模型,使用 llama.cpp 转换 hugging face 模型为 gguf 模型脚本如下:

# 如果不量化,保留模型的效果
python convert_hf_to_gguf.py /root/autodl-tmp/model/Qwen/Qwen1.5-7B-Chat_lora_sft --outtype f16 --verbose --outfile /root/autodl-tmp/model/Qwen/Qwen1.5-7B-Chat-gguf.gguf

# 如果需要量化,加速并有损效果
python convert_hf_to_gguf.py /root/autodl-tmp/model/Qwen/Qwen1.5-7B-Chat_lora_sft --outtype q8_0 --verbose --outfile /root/autodl-tmp/model/Qwen/Qwen1.5-7B-Chat-q8.gguf

(2)在命令行与模型进行对话

./build/bin/llama-cli -m /root/autodl-tmp/model/Qwen/Qwen1.5-7B-Chat-q8.gguf -p "you are a helpful assistant" -cnv -ngl 24

(3)以HTTP Server方式部署进行推理

./build/bin/llama-server -m /root/autodl-tmp/model/Qwen/Qwen1.5-7B-Chat-q8.gguf --port 8088

部署服务后,可以打开浏览器,输入地址http://127.0.0.1:8088就可以在网页上与模型进行交互,也可以使用类似 openai 风格的API进行调用推理。

网页交互示例:

类似 openai 风格的API进行调用推理示例:

先写一个api调用的python文件:callRemoteLLMServer.py

#多轮对话
from openai import OpenAI

#定义多轮对话方法
def run_chat_session():
    #初始化客户端
    client = OpenAI(base_url="http://localhost:8088/v1/",api_key="suibianxie")
    model_name = client.models.list().data[0].id
    print(model_name)
    #初始化对话历史
    chat_history = []
    #启动对话循环
    while True:
        #获取用户输入
        user_input = input("用户:")
        if user_input.lower() == "exit":
            print("退出对话。")
            break
        #更新对话历史(添加用户输入)
        chat_history.append({"role":"user","content":user_input})
        #调用模型回答
        try:
            chat_complition = client.chat.completions.create(messages=chat_history,model=model_name, temperature=0.8,top_p=0.8)
            #获取最新回答
            model_response = chat_complition.choices[0]
            print("AI:",model_response.message.content)
            #更新对话历史(添加AI模型的回复)
            chat_history.append({"role":"assistant","content":model_response.message.content})
        except Exception as e:
            print("发生错误:",e)
            break
if __name__ == '__main__':
    run_chat_session()

在终端窗口中 执行 该python 文件:

python callRemoteLLMServer.py 

参考文章:

纯新手教程:用llama.cpp本地部署DeepSeek蒸馏模型 - 知乎

### 关于 `llama.cpp` 中使用 Safetensors 和 GGUF 格式 #### 将Safetensors转换为GGUF格式 为了将Safetensors文件转换为GGUF格式,可以利用由`llama.cpp`提供的Python脚本`convert-hf-to-gguf.py`。此过程涉及指定输入路径(即Safetensor模型的位置),以及定义输出位置和目标量化类型[^1]。 ```bash cd ~/code/llama.cpp/build_cuda/bin python convert_hf_to_gguf.py /path/to/input/model.safetensors --outfile /path/to/output/model.gguf --outtype q8_0 ``` 上述命令展示了如何执行基本的转换操作;其中`--outtype`参数指定了所需的量化精度,在这个例子中设置为`q8_0`[^3]。 #### 对Safetensors模型进行量化并保存至GGUF格式 当需要以较低的量化级别来减少存储空间或提高推理效率时,可以通过调整`--outtype`选项实现不同级别的量化处理。对于低于`q8_0`的情况,可以选择更细粒度的量化方案如`q4_0`、`q5_0`等[^2]: ```bash python convert_hf_to_gguf.py /mnt/workspace/models/Qwen2.5-1.5B-Instruct --outfile /mnt/workspace/Qwen2.5-1.5B-Instruct-q4_0-v1.gguf --outtype q4_0 ``` 这表明通过改变量化的等级,可以在性能与资源消耗之间找到平衡点。 #### 部署已转换的GGUF模型 一旦完成了从Safetensors到GGUF格式的转换及必要的量化工作之后,就可以直接加载这些经过优化后的GGUF文件用于实际应用中的推断任务了。由于`llama.cpp`本身支持多种硬件加速特性(比如CUDA),因此可以根据具体环境配置相应的运行时参数以获得最佳表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值