大模型转换为 GGUF

一、GGUF介绍

GGUF 格式的全名为(GPT-Generated Unified Format),提到 GGUF 就不得不提到它的前身 GGML(GPT-Generated Model Language)。GGML 是专门为了机器学习设计的张量库,最早可以追溯到 2022/10。其目的是为了有一个单文件共享的格式,并且易于在不同架构的 GPU 和 CPU 上进行推理。但在后续的开发中,遇到了灵活性不足、相容性及难以维护的问题。

二、为什么要转换 GGUF 格式

在传统的 Deep Learning Model 开发中大多使用 PyTorch 来进行开发,但因为在部署时会面临相依 Lirbrary 太多、版本管理的问题于才有了 GGML、GGMF、GGJT 等格式,而在开源社群不停的迭代后 GGUF 就诞生了。

GGUF 实际上是基于 GGJT 的格式进行优化的,并解决了 GGML 当初面临的问题,包括:

1)可扩展性:轻松为 GGML 架构下的工具添加新功能,或者向 GGUF 模型添加新 Feature,不会破坏与现有模型的兼容性。

2)对 mmap(内存映射)的兼容性:该模型可以使用mmap 进行加载(原理解析可见参考),实现快速载入和存储。(从 GGJT 开始导入,可参考 GitHub)

3)易于使用:模型可以使用少量代码轻松加载和存储,无需依赖的 Library,同时对于不同编程语言支持程度也高。

4)模型信息完整:加载模型所需的所有信息都包含在模型文件中,不需要额外编写设置文件。

5)有利于模型量化:GGUF 支持模型量化(4 位、8 位、F16),在 GPU 变得越来越昂贵的情况下,节省 vRAM 成本也非常重要。

三、GGUF模型转换

执行以下命令下载模型转换项目,执行项目中requirements.txt文件安装项目依赖。

	git clone https://github.com/ggerganov/llama.cpp.git
	pip install -r requirements.txt

执行以下命令,进行模型转换

python /root/llama.cpp-master/convert_hf_to_gguf.py /root/.cache/instructlab/models/instructlab/granite-7b-lab  --outtype f16 --verbose --outfile granite-7b-lab_f16.gguf

这里--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: 不量化,保留原始精度。

 

本文参考文档:https://zhuanlan.zhihu.com/p/715841536

将模型转换gguf格式通常是指将机器学习模型保存为通用格式,以便在不同的编程语言或平台之间进行迁移或共享。虽然“gguf”格式不是一个广泛认可的标准格式,但您可能是想要提到的是“ggplot”风格的可视化方法,或者更常见的“guf”格式,但目前没有名为“gguf”的标准模型保存格式。这里我将假设您是在询问如何将模型保存为通用格式。 在Python中,一个常用的通用模型保存格式是PMML(Predictive Model Markup Language),它是一个基于XML的标准格式,用于描述和交换预测模型。另一个广泛使用的通用格式是ONNX(Open Neural Network Exchange),它允许不同机器学习框架之间的模型转换和共享。 以下是将Python中的scikit-learn模型保存为PMML格式的大致步骤: 1. 安装必要的转换库,例如`pmml`库。 2. 使用该库提供的函数将训练好的模型转换为PMML格式。 示例代码如下: ```python from sklearn2pmml import pmml_exporter from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier # 加载数据 iris = load_iris() X = iris.data y = iris.target # 训练模型 clf = RandomForestClassifier() clf.fit(X, y) # 将模型导出为PMML pmml_exporter = pmml_exporter.PMMLExporter( model=clf, name="iris_model", version=1.0, description="Iris classification", input_fields=[ # 这里定义输入字段,对应于模型的特征 ], output_fields=[ # 这里定义输出字段,对应于模型的预测结果 ] ) pmml_exporter.export_to_zipped_file("iris_model.pmml.zip") ``` 如果是ONNX格式,转换过程类似,但需要使用不同的库和函数,例如使用`onnx`和`sklearn-onnx`库。 请注意,不同的模型类型和框架可能需要不同的转换方法和工具。建议查阅相关框架和模型的具体文档来获取详细的转换指南。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑中的小象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值