User-Profile-Image
hankin
  • 5
  • 关于
  • 分类
    • 路由器
    • 电脑相关
    • 游戏相关
    • 未分类
    • 服务器相关
    • 数据库
  • 页面
    • 关于
  • 友链
    • 华夏网盟
Help?

Please contact us on our email for need any support

Support
  • 关于
    首页   ›   服务器相关   ›   正文
服务器相关

使用llama.cpp量化hug、gguf模型。

2025-03-25 10:28:11
13  0 0

环境:debian12.9、cmake、python3+、显卡:A100*1(有显卡可加快量化速度,纯CPU非常慢)

首先下载好需要的模型,hug上可下载safetensors、GGUF。如果你下载的是GGUF可直接到第二步。

如果你下载的gguf含有多个,需要使用llama.cpp先将其合并为一个gguf文件,合并方法可在本站搜索。

本文以hug下载的safetensors为例。

一、safetensors转换为gguf

进入到llama.cpp根目录

先激活python虚拟环境

创建一个文件夹,例如llm

执行 python3 -m venv llm

source llm/bin/activate

执行 pip install -r requirements.txt

或者仅安装必要

pip install torch transformers sentencepiece gguf numpy -i https://mirrors.ustc.edu.cn/pypi/simple

安装好依赖后转换模型。

执行:

python convert_hf_to_gguf.py /模型目录 --outtype f16 --verbose --outfile 输出文件名.gguf
# 如果不量化,保留模型的效果
python convert_hf_to_gguf.py /模型目录 --outtype f16 --verbose --outfile 输出文件_f16.gguf

# 如果需要量化(加速并有损效果),直接执行下面脚本就可以
python convert_hf_to_gguf.py /模型目录 --outtype q4_0 --verbose --outfile 输出文件_q4_0.gguf

这一步是将safetensors转换为GGUF文件并且可选择更改权重,方便接下来量化。这里我不更改权重,使用f16.

这里--outtype是输出类型,代表含义:
q2_k:特定张量(Tensor)采用较高的精度设置,而其他的则保持基础级别。
q3_k_l、q3_k_m、q3_k_s:这些变体在不同张量上使用不同级别的精度,从而达到性能和效率的平衡。
q4_0:这是最初的量化方案,使用 4 位精度。
q4_1 和 q4_k_m、q4_k_s:这些提供了不同程度的准确性和推理速度,适合需要平衡资源使用的场景。
q5_0、q5_1、q5_k_m、q5_k_s:这些版本在保证更高准确度的同时,会使用更多的资源并且推理速度较慢。
q6_k 和 q8_0:这些提供了最高的精度,但是因为高资源消耗和慢速度,可能不适合所有用户。
fp16 和 f32: 不量化,保留原始精度。

二、 量化模型。

进入llama.cpp/build/bin目录

下面将转换后的gguf模型量化为4-bit。

执行: 

./llama-quantize ./源文件-f16.gguf ./输出文件-q4_0.gguf q4_0

等待量化完毕后即收获了一个量化为4-bit的模型。

三、使用模型。

交互模式下,使用模型

./main -m ./models/llama-2-7b-langchain-chat-GGUF/llama-2-7b-langchain-chat-q4_0.gguf -ins

> 世界上最大的鱼是什么?
卡加内利亚鲨为世界最大的鱼,体长达60英尺(18)。牠们的头部相当于一只小车,身体非常丑,腹部有两个气孔,气孔之间还有一个大口径的鳃,用于进行捕食。牠们通常是从水中搴出来到陆地上抓到的小鱼,然后产生大量液体以解脱自己的身体。

> 现在还有这种鱼吗?
作者所提到的“卡加内利亚鲨”,应该是指的是“卡加内利亚鳄”。卡加内利亚鳄是一种大型淡水肉食性鱼类,分布于欧洲和非洲部分区域。这种鱼的体长最大可达60英尺(18),是世界上已知最大的鱼之一。

交互模式下,以对话的形式,有上下文的连续使用大模型。

提供模型 API 服务

有两种方式,一种是使用 llama.cpp 提供的 API 服务,另一种是使用第三方提供的工具包。

使用 llama.cpp server 提供 API 服务

前面编译之后,会在 llama.cpp 项目的根目录下生成一个 server 可执行文件,执行下面的命令,启动 API 服务。

./llama-server -m /DATA/qwen25.gguf -fa auto –host 0.0.0.0 –port 8080 -c 65536 -ngl 999 -a TEST -np 1 –repeat-penalty 1.0 –temp 0.5 –top-k 10 –top-p 0.8 -t 24 -sm layer -ts 1,1 –chat-template qwen2

如果出现胡言乱语,请删除–chat-template qwen2


llm_load_tensors: mem required  = 3647.96 MB (+  256.00 MB per state)
..................................................................................................
llama_new_context_with_model: kv self size  =  256.00 MB
llama_new_context_with_model: compute buffer total size =   71.97 MB

llama server listening at http://0.0.0.0:8080

"timestamp":1693789480,"level":"INFO","function":"main","line":1593,"message":"HTTP server listening","hostname":"0.0.0.0","port":8080

这样就启动了一个 API 服务,可以使用 curl 命令进行测试。

curl --request POST \
--url http://localhost:8080/completion \
--header "Content-Type: application/json" \
--data '{"prompt": "What color is the sun?","n_predict": 512}'

{"content":".....","generation_settings":{"frequency_penalty":0.0,"grammar":"","ignore_eos":false,"logit_bias":[],"mirostat":0,"mirostat_eta":0.10000000149011612,"mirostat_tau":5.0,......}}

这样就启动了一个 API 服务,可以使用 curl 命令进行测试。

如模型上下文过低,你想对接openclaw之类有限制最低64k上下文的,请进行如下操作。

进入源模型文件夹,编辑config.json,找到max_position_embeddings 后面数值更改为64k=65536,128k=131072,保存后重新转换GGUF进行量化。启动命令增加 -c 65536即可成功对接啦。

已测试 qwen 7b 14b用上述方法可行,32b模型一般起步就是256k了。

评论 (0)

Click here to cancel reply.

欢迎您 游客  

近期文章

  • 用于网速测试的下载测速文件合集
  • docker构建SB镜像
  • pterodactl docker install
  • OpenWRT流量实时监控插件
  • docker部署dify

近期评论

No comments to show.

归档

  • 1 月 2026
  • 8 月 2025
  • 5 月 2025
  • 4 月 2025
  • 3 月 2025
  • 2 月 2025
  • 12 月 2024
  • 4 月 2024
  • 10 月 2023
  • 8 月 2023
  • 4 月 2023
  • 3 月 2023
  • 2 月 2023
  • 10 月 2021
  • 5 月 2021
  • 3 月 2021
  • 2 月 2021

分类

  • 数据库
  • 服务器相关
  • 未分类
  • 游戏相关
  • 电脑相关
  • 路由器
Copyright © 2026
smarty_hankin 主题. Designed by hankin
主页
页面
  • 关于
博主
hkthomas 管理员
136 文章 0 评论 18276 浏览
测试
测试