制作并量化GGUF模型上传到HuggingFace和ModelScope

llama.cppOllamaLMStudio 和其他很多热门项目的底层实现,也是 GPUStack 所支持的推理引擎之一,它提供了 GGUF 模型文件格式。GGUF (General Gaussian U-Net Format) 是一种用于存储模型以进行推理的文件格式,旨在针对推理进行优化,可以快速加载和运行模型。

llama.cpp 还支持量化模型,在保持较高的模型精度的同时,减少模型的存储和计算需求,使大模型能够在桌面端、嵌入式设备和资源受限的环境中高效部署,并提高推理速度。

今天带来一篇介绍如何制作并量化 GGUF 模型,将模型上传到 HuggingFaceModelScope 模型仓库的操作教程。

注册与配置 HuggingFace 和 ModelScope

  • 注册 HuggingFace

访问 https://huggingface.co/join 注册 HuggingFace 账号(需要某上网条件)

  • 配置 HuggingFace SSH 公钥

将本地环境的 SSH 公钥添加到 HuggingFace,查看本地环境的 SSH 公钥(如果没有可以用 ssh-keygen -t rsa -b 4096 命令生成):

cat ~/.ssh/id_rsa.pub

在 HuggingFace 的右上角点击头像,选择 Settings - SSH and GPG Keys,添加上面的公钥,用于后面上传模型时的认证。

  • 注册 ModelScope

访问 https://www.modelscope.cn/register?back=%2Fhome 注册 ModelScope 账号

  • 获取 ModelScope Token

访问 https://www.modelscope.cn/my/myaccesstoken,将 Git 访问令牌复制保存,用于后面上传模型时的认证。

image-20241106162218513

准备 llama.cpp 环境

创建并激活 Conda 环境(没有安装的参考 Miniconda 安装:https://docs.anaconda.com/miniconda/):

conda create -n llama-cpp python=3.12 -y
conda activate llama-cpp
which python
pip -V

克隆 llama.cpp 的最新分支代码,编译量化所需的二进制文件:

cd ~
git clone -b b4034 https://github.com/ggerganov/llama.cpp.git
cd llama.cpp/
pip install -r requirements.txt
brew install cmake
make

image-20241106120151035

编译完成后,可以运行以下命令确认量化所需要的二进制文件 llama-quantize 是否可用:

./llama-quantize --help

image-20241106120420296

下载原始模型

下载需要转换为 GGUF 格式并量化的原始模型。

从 HuggingFace 下载模型,通过 HuggingFace 提供的 huggingface-cli 命令下载,首先安装依赖:

pip install -U huggingface_hub

国内网络配置下载镜像源:

export HF_ENDPOINT=https://hf-mirror.com

这里下载 meta-llama/Llama-3.2-3B-Instruct 模型,该模型是 Gated model,需要在 HuggingFace 填写申请并确认获得访问授权:

image-20241106141024313

在 HuggingFace 的右上角点击头像,选择 Access Tokens,创建一个 Read 权限的 Token,保存下来:

image-20241106131544469

下载 meta-llama/Llama-3.2-3B-Instruct 模型,--local-dir 指定保存到当前目录,--token 指定上面创建的访问 Token:

mkdir ~/huggingface.co
cd ~/huggingface.co/
huggingface-cli download meta-llama/Llama-3.2-3B-Instruct --local-dir Llama-3.2-3B-Instruct --token hf_abcdefghijklmnopqrstuvwxyz

转换为 GGUF 格式与量化模型

创建 GGUF 格式与量化模型的脚本:

cd ~/huggingface.co/
vim quantize.sh

填入以下脚本内容,并把 llama.cpphuggingface.co 的目录路径修改为当前环境的实际路径,需要为绝对路径,将 d 变量中的 gpustack 修改为 HuggingFace 用户名:

#!/usr/bin/env bashllama_cpp="/Users/gpustack/llama.cpp"
b="/Users/gpustack/huggingface.co"export PATH="$PATH:${llama_cpp}"s="$1"
n="$(echo "${s}" | cut -d'/' -f2)"
d="gpustack/${n}-GGUF"# preparemkdir -p ${b}/${d} 1>/dev/null 2>&1
pushd ${b}/${d} 1>/dev/null 2>&1
git init . 1>/dev/null 2>&1if [[ ! -f .gitattributes ]]; thencp -f ${b}/${s}/.gitattributes . 1>/dev/null 2>&1 || trueecho "*.gguf filter=lfs diff=lfs merge=lfs -text" >> .gitattributes
fi
if [[ ! -d assets ]]; thencp -rf ${b}/${s}/assets . 1>/dev/null 2>&1 || true
fi
if [[ ! -d images ]]; thencp -rf ${b}/${s}/images . 1>/dev/null 2>&1 || true
fi
if [[ ! -d imgs ]]; thencp -rf ${b}/${s}/imgs . 1>/dev/null 2>&1 || true
fi
if [[ ! -f README.md ]]; thencp -f ${b}/${s}/README.md . 1>/dev/null 2>&1 || true
fiset -epushd ${llama_cpp} 1>/dev/null 2>&1# convert[[ -f venv/bin/activate ]] && source venv/bin/activate
echo "#### convert_hf_to_gguf.py ${b}/${s} --outfile ${b}/${d}/${n}-FP16.gguf"
python3 convert_hf_to_gguf.py ${b}/${s} --outfile ${b}/${d}/${n}-FP16.gguf# quantizeqs=("Q8_0""Q6_K""Q5_K_M""Q5_0""Q4_K_M""Q4_0""Q3_K""Q2_K"
)
for q in "${qs[@]}"; doecho "#### llama-quantize ${b}/${d}/${n}-FP16.gguf ${b}/${d}/${n}-${q}.gguf ${q}"llama-quantize ${b}/${d}/${n}-FP16.gguf ${b}/${d}/${n}-${q}.gguf ${q}ls -lth ${b}/${d}sleep 3
donepopd 1>/dev/null 2>&1set +e

开始将模型转换为 FP16 精度的 GGUF 模型,并分别用 Q8_0Q6_KQ5_K_MQ5_0Q4_K_MQ4_0Q3_KQ2_K 方法来量化模型:

bash quantize.sh Llama-3.2-3B-Instruct

脚本执行完后,确认成功转换为 FP16 精度的 GGUF 模型和量化后的 GGUF 模型:

image-20241106154934731

模型被存储在对应用户名的目录下:

ll gpustack/Llama-3.2-3B-Instruct-GGUF/

image-20241106171759142

上传模型到 HuggingFace

在 HuggingFace 右上角点击头像,选择 New Model 创建同名的模型仓库,格式为 原始模型名-GGUF

image-20241106171458202

更新模型的 README:

cd ~/huggingface.co/gpustack/Llama-3.2-3B-Instruct-GGUF
vim README.md

为了维护性,在开头的元数据之后,记录原始模型和 llama.cpp 的分支代码 Commit 信息,注意按照原始模型的信息和llama.cpp 的分支代码 Commit 信息更改:

# Llama-3.2-3B-Instruct-GGUF**Model creator**: [meta-llama](https://huggingface.co/meta-llama)<br/>
**Original model**: [Llama-3.2-3B-Instruct](https://huggingface.co/meta-llama/Llama-3.2-3B-Instruct)<br/>
**GGUF quantization**: based on llama.cpp release [b8deef0e](https://github.com/ggerganov/llama.cpp/commit/b8deef0ec0af5febac1d2cfd9119ff330ed0b762)---

image-20241106173636107

准备上传,安装 Git LFS 用于管理大文件的上传:

brew install git-lfs

添加远程仓库:

git remote add origin git@hf.co:gpustack/Llama-3.2-3B-Instruct-GGUF

添加文件,并通过 git ls-files 确认提交的文件, git lfs ls-files 确认所有 .gguf 文件被 Git LFS 管理上传:

git add .
git ls-files
git lfs ls-files

image-20241106181806616

上传超过 5GB 大小的文件到 HuggingFace 需开启大文件上传,在命令行登录 HuggingFace,输入上面下载模型章节创建的 Token:

huggingface-cli login

为当前目录开启大文件上传:

huggingface-cli lfs-enable-largefiles .

image-20241106190029534

将模型上传到 HuggingFace 仓库:

git commit -m "feat: first commit" --signoff
git push origin main -f

上传完成后,在 HuggingFace 确认模型文件成功上传。

上传模型到 ModelScope

在 ModelScope 右上角点击头像,选择 创建模型 创建同名的模型仓库,格式为 原始模型名-GGUF,并填写 License、模型类型、AI 框架、是否公开模型等其他配置:

image-20241106222426572

上传本地仓库的 README.md 文件并创建:

image-20241106223134251

添加远程仓库,需要使用本文最开始获得的 ModelScope Git 访问令牌提供上传模型时的认证:

git remote add modelscope https://oauth2:xxxxxxxxxxxxxxxxxxxx@www.modelscope.cn/gpustack/Llama-3.2-3B-Instruct-GGUF.git

获取远端仓库已存在的文件:

git fetch modelscope master

由于 ModelScope 使用 master 分支而非 main 分支,需要切换到 master 分支并通过 cherry-pickmain 下的文件移到 master 分支,先查看并记下当前的 Commit ID:

git log

image-20241106224107550

切换到 master 分支,并通过 main 分支的 Commit ID 将main 分支下的文件移到 master 分支:

git checkout FETCH_HEAD -b master
git cherry-pick -n 833fb20e5b07231e66c677180f95e27376eb25c6

修改冲突文件,解决冲突(可以用原始模型的 .gitattributes 合并 *.gguf filter=lfs diff=lfs merge=lfs -text,参考 quantize.sh 脚本相关逻辑 ):

vim .gitattributes

添加文件,并通过 git ls-files 确认提交的文件, git lfs ls-files 确认所有 .gguf 文件被 Git LFS 管理上传:

git add .
git ls-files
git lfs ls-files

将模型上传到 ModelScope 仓库:

git commit -m "feat: first commit" --signoff
git push modelscope master -f

上传完成后,在 ModelScope 确认模型文件成功上传。

总结

以上为使用 llama.cpp 制作并量化 GGUF 模型,并将模型上传到 HuggingFace 和 ModelScope 模型仓库的操作教程。

llama.cpp 的灵活性和高效性使得其成为资源有限场景下模型推理的理想选择,应用十分广泛,GGUF 是 llama.cpp 运行模型所需的模型文件格式,希望以上教程能对如何管理 GGUF 模型文件有所帮助。

如果觉得写得不错,欢迎点赞转发关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5698.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

docker+nacos

安装数据库 以docker安装为例&#xff08;实际建议实体&#xff09; 初始化数据库 /******************************************/ /* 数据库全名 nacos_config */ /* 表名称 config_info */ /******************************************/ CREATE TABLE config_i…

Linux入门(2)

林纳斯托瓦兹 Linux之父 1. echo echo是向指定文件打印内容 ehco要打印的内容&#xff0c;不加任何操作就默认打印到显示器文件上。 知识点 在Linux下&#xff0c;一切皆文件。 打印到显示器&#xff0c;显示器也是文件。 2.重定向 >重定向操作&#xff0c;>指向的…

PL端:HDMI 输出实验

实验环境 vivado 2024.1 实验任务 做一个 HDMI 输出的彩条 硬件介绍 开发板没有HDMI编码芯片&#xff0c;是将FPGA的3.3差分IO直接连接到HDMI连接器&#xff0c;FPGA 完成 24 位 RGB 编码输出TMDS 差分信号。 HDMI传输要素&#xff1a; TMDS 差分信号 TMDS&#xff08…

江协科技STM32学习- P35 硬件I2C读写MPU6050

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

39页PDF | 华为数据架构建设交流材料(限免下载)

一、前言 这份报告是关于企业数据架构建设的交流材料&#xff0c;详细介绍了数据架构在企业架构中的重要性&#xff0c;阐述了数据架构的定义、包含的四个核心组件&#xff08;数据资产目录、数据标准、数据模型和数据分布&#xff09;&#xff0c;并通过交通和城市政务服务的…

三周精通FastAPI:27 使用使用SQLModel操作SQL (关系型) 数据库

官网文档&#xff1a;https://fastapi.tiangolo.com/zh/tutorial/sql-databases/ SQL (关系型) 数据库 FastAPI不需要你使用SQL(关系型)数据库。 但是您可以使用任何您想要的关系型数据库。 这里我们将看到一个使用SQLModel的示例。 SQLModel是在SQLAlchemy和Pydantic的基础…

专业140+总分430+四川大学854信号与系统考研川大原951电子信息与通信工程,真题,大纲,参考书。

川大854(原951)信号与系统140&#xff0c;总分430&#xff0c;顺利上岸&#xff0c;目前已经研究生在读&#xff0c;群里不少同学希望分享一下我的考研经历&#xff0c;回首考研这一年的复习经历&#xff0c;历历在目&#xff0c;好像就在昨天&#xff0c;期间有过迷惑&#xf…

蓝桥杯第21场小白入门赛补题

5.蓝桥派对 思路 &#xff1a;一个区间与多少个其他区间有关联&#xff0c;先对所有区间左端点和右端点从小到大排序&#xff0c;对于每个询问&#xff0c;我们先算出[1,r]这个区间里有多少个区间的起点即区间总数&#xff0c;使用upper_bound函数&#xff0c;然后使用lower_bo…

【再谈设计模式】原型模式~复制的魔法师

一、引言 在软件工程、软件开发中&#xff0c;创建对象的过程常常涉及复杂的初始化和配置。在某些情况下&#xff0c;直接复制现有对象比从头开始创建新对象更为高效。原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;允许我们通过复制现有…

技术分享 —— JMeter接口与性能测试实战!

前言 在软件开发和运维过程中&#xff0c;接口性能测试是一项至关重要的工作。JMeter作为一款开源的Java应用&#xff0c;被广泛用于进行各种性能测试&#xff0c;包括接口性能测试。本文将详细介绍如何使用JMeter进行接口性能测试的过程和步骤。 JMeter是Apache组织开发的基…

Data+AI━━数据安全的警钟:智能化分类分级治理

DataAI━━数据安全的警钟&#xff1a;智能化分类分级治理 前言数据的分类体系数据分级与智能化实践深度案例解析与未来展望 前言 OpenAI数据泄露事件让数据安全再次成为科技圈的热门话题。2024年3月,一名研究员发现OpenAI的API存在安全漏洞,导致部分用户的对话记录泄露。 这一…

【K8S问题系列】Kubernetes Pod节点CrashLoopBackOff 状态【已解决】

在 Kubernetes 中&#xff0c;Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃&#xff0c;Kubernetes 尝试重启该容器&#xff0c;但由于持续崩溃&#xff0c;重启的间隔时间逐渐增加。下面将详细介绍 CrashLoopBackOff 状态的原因、解决方案及相关命令的输出解释。 …

图像信号处理器(ISP,Image Signal Processor)详解

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 图像信号处理器&#xff08;ISP&#xff0c;Image Signal Processor&#xff09; 是专门用于处理图像信号的硬件或处理单元&#xff0c;广泛应用于图像传感器&#xff08;如 CMOS 或 CCD 传感器&a…

u盘怎么重装电脑系统_u盘重装电脑系统步骤和详细教程【新手宝典】

u盘怎么重装电脑系统&#xff1f;一个u盘怎么重装电脑系统呢&#xff0c;需要将u盘制作成u盘启动盘pe&#xff0c;然后通过U盘启动盘进入pe进行安装系统&#xff0c;下面小编就教大家u盘重装电脑系统步骤和详细教程。 u盘启动是什么意思&#xff1f; U盘启动盘是一种具有特殊功…

SpringBoot健身房管理:技术与实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Sigrity Power SI 3D-EM Inductance Extraction模式如何进行电感的提取操作指导(一)

Sigrity Power SI 3D-EM Inductance Extraction模式如何进行电感的提取操作指导(一) Sigrity Power SI使用3D-EM Inductance Extraction模式可以进行电感的提取,以下图为例 2D 视图 <

Fsm serialdata

现在您有了一个有限状态机&#xff0c;可以识别串行比特流中何时正确接收字节&#xff0c;添加一个数据路径&#xff0c;输出正确接收的数据字节。当done为1时&#xff0c;out_byte必须有效&#xff0c;否则为not。 请注意&#xff0c;串行协议首先发送最低有效位。 此题&#…

【GESP】C++一级真题练习(202309)luogu-B3863,买文具

GESP一级真题练习。为2023年9月一级认证真题。属于数值计算条件判断的问题。 题目题解详见&#xff1a;https://www.coderli.com/gesp-1-luogu-b3863/ 【GESP】C一级真题练习(202309)luogu-B3863&#xff0c;买文具 | OneCoderGESP一级真题练习。为2023年9月一级认证真题。属…

《Python游戏编程入门》注-第5章4

2.3 随机改变颜色 从图1中可以看出,当完全显示了一个大圆之后,会改变颜色继续显示该大圆。也就是当圆心角angle的值大于等于360度时,随机改变颜色,代码如图6所示。 图6 随机改变颜色的代码 其中,第18行代码判断是否完全显示了一个大圆,如果是,圆心角的角度设置为0,第…

健康生活,注重养生

在快节奏的现代生活中&#xff0c;健康养生已成为我们不可忽视的重要课题。它不仅仅关乎身体的强健&#xff0c;更涉及到心灵的平和与愉悦。以下是一些实用的健康养生建议&#xff0c;帮助我们在日常生活中&#xff0c;以自然和谐的方式&#xff0c;滋养身心&#xff0c;享受生…