首页 > 科技周边 > 人工智能 > 如何将模型转换为GGUF格式?

如何将模型转换为GGUF格式?

尊渡假赌尊渡假赌尊渡假赌
发布: 2025-03-20 11:04:13
原创
833 人浏览过

随着大型语言模型(LLM)的规模不断增长,需要有效的方法来存储,部署和运行它们在低资源设备上。尽管这些模型具有强大的功能,但它们的大小和内存需求可能会使部署成为挑战,尤其是在消费者硬件上。这是模型量化和专门的存储格式(例如GGUF)(通用GPT统一格式)开始发挥作用的地方。

在本指南中,我们将深入研究GGUF格式,探索其好处,并为将模型转换为GGUF提供逐步的教程。在此过程中,我们将介绍模型量化的历史以及GGGUF如何发展以支持现代LLM。最后,您将对GGUF为何重要以及如何开始为自己的模型开始使用它有深刻的了解。

学习目标

  • 理解GGUF格式的目的和结构及其从GGML演变。
  • 定义量化并描述其在减少模型大小和提高部署效率方面的重要性。
  • 认识GGUF命名约定的组成部分以及它们如何帮助模型识别和管理。
  • 使用Llama.CPP将模型定量为GGUF格式。
  • 将GGUF和量化的概念与实际用例相关联,从而有效地部署了资源受限环境中的AI模型。

本文作为数据科学博客马拉松的一部分发表

目录

  • 模型量化的演变
  • 什么是GGUF?
  • 为什么要使用GGUF?
  • GGUF格式结构和命名约定
  • 设置转换为GGUF格式
  • 将模型转换为GGUF
  • GGUF转换的最佳实践
  • GGUF和模型存储格式的未来
  • 结论
  • 常见问题

模型量化的演变

GGUF的旅程始于了解模型量化的演变。量化降低了模型参数的精度,有效地压缩了它们以减少记忆和计算需求。这是一个快速概述:

早期格式和挑战

在早期,深度学习模型存储在Tensorflow和Pytorch等框架的天然格式中。使用.pb文件的TensorFlow模型,而Pytorch使用.pt或.pth。这些格式用于较小的模型,但提出了局限性:

  • 尺寸:型号以32位浮点格式存储,使文件大小较大。
  • 记忆使用:完整的重量重量要求大量内存,使RAM不切实际的设备上部署。

ONNX(开放神经网络交换)

跨框架的互操作性的兴起导致了ONNX的发展,这使模型可以在环境之间移动。但是,尽管ONNX提供了一些优化,但它仍然主要围绕完整的重量构建,并提供了有限的量化支持。

需要量化

随着模型的增长,研究人员转向量化,将重量从32位浮子(FP32)压缩到16位(FP16)甚至更低,例如8位整数(INT8)。这种方法大大削减了内存需求,使得可以在更多的硬件类型上运行模型。例如:

 #导入必要的库
导入火炬
导入Torch.nn作为nn
导入火炬。

#步骤1:在Pytorch中定义一个简单的神经网络模型
类SimpleModel(nn.Module):
    def __init __(自我):
        超级(SimpleModel,self).__ Init __()
        self.fc1 = nn.linear(10,50)#第一个完全连接的层
        self.fc2 = nn.linear(50,20)#第二完全​​连接层
        self.fc3 = nn.linear(20,5)#输出层

    def向前(self,x):
        x = torch.relu(self.fc1(x))#在第一层之后激活
        x = torch.relu(self.fc2(x))#第二层之后的relu激活
        x = self.fc3(x)#输出层
        返回x

#步骤2:初始化模型并切换到评估模式
model = SimpleModel()
model.eval()

#在量化之前保存模型以供参考
TORCH.SAVE(模型,“ Simple_model.pth”)

#步骤3:将动态量化应用于模型
#在这里,我们仅量化线性层,将其重量更改为int8
量化_model = pont.quantize_dynamic(
    型号,{nn.linear},dtype = therch.qint8
)

#保存量化的模型
TORCH.SAVE(Quantized_Model,“量化_simple_model.pth”)

#用虚拟数据量化模型的示例用法
dummy_input = torch.randn(1,10)#带有10个功能的示例输入张量
输出=量化_model(dummy_input)
打印(“量化模型输出:”,输出)
登录后复制

如何将模型转换为GGUF格式?

检查原始模型和量化模型的大小

在使用大型语言模型时,了解原始版本和量化版本之间的尺寸差异至关重要。这种比较不仅强调了模型压缩的好处,而且还为部署策略提供了有效资源使用的信息。

导入操作系统

#保存模型的路径
Original_model_path =“ simple_model.pth”
量化_model_path =“量化_simple_model.pth”

#功能以获取KB中的文件大小
def get_file_size(路径):
    size_bytes = os.path.getSize(路径)
    size_kb = size_bytes / 1024#转换为kb
    返回size_kb

#检查原始模型和量化模型的尺寸
Original_size = get_file_size(oinartion_model_path)
量化= get_file_size(量化_model_path)

打印(f“原始型号大小:{oilter_size:.2f} kb”)
打印(f“量化的型号大小:{量化_size:.2f} kb”)
print(f“尺寸减小:{(((原始_size -jentalized_size) / oinartion_size) * 100:.2f}%”)
登录后复制

如何将模型转换为GGUF格式?

但是,即使是8位精度也不足以用于GPT-3或Llama等极大的语言模型,后者刺激了GGML和GGGUF等新格式的开发。

什么是GGUF?

GGUF或通用GPT统一格式是为GGML的扩展而开发的,以支持更大的模型。这是用于存储用于使用GGML推理和基于GGML的执行者的模型的文件格式。 GGUF是一种二进制格式,旨在快速加载和节省模型,并易于阅读。传统上是使用Pytorch或其他框架开发的模型,然后转换为GGUF以用于GGML。

GGUF是GGML,GGMF和GGJT的连续文件格式,并且通过包含加载模型所需的所有信息而设计为明确的。它也被设计为可扩展的,因此可以将新信息添加到模型中而不会破坏兼容性。 它的设计有三个目标:

  • 效率:使大型型号能够在CPU和消费级硬件上有效运行。
  • 可伸缩性:支持非常大的型号,通常是100GB或更多。
  • 灵活性:允许开发人员在不同的量化水平,平衡模型大小和准确性之间进行选择。

为什么要使用GGUF?

GGUF格式为需要在有限的硬件上部署大型,资源丰富的模型的开发人员而不会牺牲性能。以下是一些核心优势:

  • 量化支持: GGUF支持一系列量化水平(4位,8位),可以在保持模型精度的同时节省大量内存。
  • 元数据存储: GGUF可以存储详细的元数据,例如模型架构,令牌化方案和量化水平。此元数据使加载和配置模型变得更加容易。
  • 推理优化: GGUF优化了内存使用,从而可以更快地推断基于CPU的系统。

GGUF格式结构和命名约定

GGUF格式采用特定的命名惯例来浏览一下关键的模型信息。该约定可以帮助用户确定重要的模型特征,例如体系结构,参数大小,微调类型,版本,编码类型和碎片数据 - 制造模型管理和部署更容易。

GGUF命名约定遵循以下结构:

如何将模型转换为GGUF格式?

名称中的每个组件都提供了对模型的见解:

  • Basename:模型基本类型或体系结构的描述性名称,源自元数据(例如Llama或Mixtral)。
  • Sizelabel:使用X格式IE 指示模型大小:专家数量(例如8), :模型参数刻度,例如Q的Q Quadrillions,t,数万亿美元,数十亿美元,数十亿美元,m for Million,k对于千参数。
  • Finetune:模型微调目标,例如“聊天”或“指示”。
  • 版本: V 格式中的模型版本号,如果未指定,则默认为v1.0。
  • 编码:重量编码方案,每个项目可自定义。
  • 类型:指示GGGUF文件类型,例如适配器的LORA或用于词汇数据的词汇。
  • 碎片:表示一个模型分为部分,格式为 -of-

命名示例

如何将模型转换为GGUF格式?

设置转换为GGUF格式

在进行转换之前,请确保您有以下先决条件:

  • 系统上安装了Python 3.8。
  • 模型源文件:通常是Pytorch或Tensorflow模型(例如,Llama,Falcon)或来自拥抱面的模型。
  • GGUF转换工具:这些工具通常基于GGML库或特定的模型转换脚本。

一些值得注意的量化技术

量化技术通过降低其大小和计算要求在优化神经网络中起关键作用。通过将高精度权重和激活转换为较低的位表示,这些方法可以有效地部署模型,而不会显着损害性能。

如何将模型转换为GGUF格式?

将模型转换为GGUF

以下是您可以将模型转换为GGGUF格式的方式。

步骤1:选择要量化的模型

在这种情况下,我们正在选择Google的Flan-T5模型来量化。您可以按照命令直接从huggingface下载该命令

!PIP安装拥抱面板

从huggingface_hub导入snapshot_download

model_#替换为要下载的模型的ID
snapshot_download(repo_id = model_id,local_dir =“ t5”)
登录后复制

步骤2:克隆Llama.cpp存储库

我们正在使用Llama.cpp将模型量化为GGUF格式

!git克隆https://github.com/ggerganov/llama.cpp
登录后复制

步骤3:安装所需的依赖项

如果在Google协作中,请按以下代码进行操作,否则您可以导航到要求目录以安装“ unigess-convert_hf_to_gguf.txt”

登录后复制

步骤4:选择量化级别

量化水平决定了模型大小和准确性之间的权衡。较低位量化(如4位)可节省内存,但可能会降低准确性。例如,如果您针对仅CPU的部署,并且不需要最高的精度,那么INT4可能是一个不错的选择。在这里,我们选择“ Q8_0”。

步骤5:运行转换脚本

如果在Google合作中,请运行以下脚本,否则请按照注释。

 #!python {通往convert_hf_to_gguf.py的路径} {路径hf_model}  -  outfile {name_of_of_outputfile.gguf}  -  outtype {量化类型}

!
登录后复制
  • 通往HF_MODEL的路径:模型目录的路径。
  • name_of_outputfile.gguf:将保存GGGUF模型的输出文件的名称。如果将量化的模型推回拥抱的脸部,请使用GGUF命名约定。
  • 量化类型:指定量化类型(在这种情况下,量化8位整数)。

比较原始模型的大小

当部署机器学习模型时,了解原始版本和量化版本之间的尺寸差异至关重要。该比较强调了量化如何显着降低模型大小,从而提高了效率和更快的推理时间,而不会大大损失准确性。

 #检查原始模型和量化模型的尺寸
Original_model_path =“/content/t5/model.safetensors”
量化_model_path =“ t5.gguf”
Original_size = get_file_size(oinartion_model_path)
量化= get_file_size(量化_model_path)

打印(f“原始型号大小:{oilter_size:.2f} kb”)
打印(f“量化的型号大小:{量化_size:.2f} kb”)
print(f“尺寸减小:{(((原始_size -jentalized_size) / oinartion_size) * 100:.2f}%”)
登录后复制

如何将模型转换为GGUF格式?

使用GGGUF量化技术,我们可以看到惊人的73.39%的尺寸降低。

GGUF转换的最佳实践

为了获得最佳结果,请记住这些技巧:

  • 实验量化水平:测试多个级别(例如,4位,8位),以在模型准确性和记忆效率之间找到最佳平衡。
  • 使用元数据来提高您的优势: GGUF的广泛元数据存储可以简化模型加载并减少运行时配置需求。
  • 基准推断:始终基准目标硬件上的GGGUF模型,以确保其符合速度和准确性要求。

GGUF和模型存储格式的未来

随着模型的不断增长,像GGUF这样的格式将在使大规模AI访问中发挥越来越重要的作用。我们很快可能会看到更高级的量化技术,这些技术可以保留更准确性,同时进一步降低内存需求。目前,GGUF仍然处于最前沿,可以在CPU和Edge设备上有效地部署大型语言模型。

结论

GGUF格式是一种改变游戏规则的人,用于在限量资源设备上有效地部署大型语言模型。从模型量化的早期努力到GGUF的开发,AI模型存储的景观已经发展为使更广泛的受众访问强大的模型。通过遵循本指南,您现在可以将模型转换为GGUF格式,从而更容易将它们部署到现实世界的应用程序中。

量化将继续发展,但是GGUF支持各种精确水平和有效的元数据管理的能力确保它将保持相关性。尝试将您的模型转换为GGUF并亲身探索好处!

关键要点

  • 通用GPT统一格式(GGUF)可在低资源设备上有效地存储和部署大型语言模型(LLMS),以解决与模型大小和内存需求相关的挑战。
  • 量化可以通过压缩参数大大降低模型大小,从而使模型可以在消费级硬件上运行,同时保持基本的性能水平。
  • GGUF格式具有结构化的命名约定,可帮助识别关键模型特征,促进更轻松的管理和部署。
  • 使用Llama.cpp之类的工具,用户可以轻松地将模型转换为GGUF格式,并在不牺牲准确性的情况下优化它们进行部署。
  • GGUF支持高级量化水平和广泛的元数据存储,使其成为有效部署日益大型AI模型的前瞻性解决方案。

常见问题

Q1。 GGUF是什么,它与GGML有何不同?

A. GGUF(通用GPT统一格式)是一种高级模型存储格式,旨在有效地存储和运行量化的大型语言模型。与其前身GGML(对于超过100GB的模型的可伸缩性)不同,GGUF支持广泛的4位和8位量化选项,并提供了丰富的元数据存储能力,增强了模型管理和部署。

Q2。量化如何影响模型性能?

答:量化降低了模型参数的精度,大大降低了其大小和内存使用情况。虽然它可以导致精确度略有下降,但设计良好的量化技术(例如GGUF的技术)可以保持可接受的性能水平,从而使在资源受限设备上部署大型模型是可行的。

Q3。 GGUF命名约定的主要组成部分是什么?

答:GGUF命名约定包括几个组件,包括Basename(模型体系结构),Sizelabel(参数权重类),Finetune(微调目标),版本(模型版本编号),编码(重量编码方案),类型(类型(文件)(文件目的)和Shard(用于拆分型号)。这些组件一起提供了有关模型的基本信息。

Q4。如何验证GGUF文件名?

答:您可以使用正则表达式验证GGUF文件名,该表达式至少以正确的顺序检查Basename,sizelabel和版本。这样可以确保文件遵守命名约定,并包含用于模型标识的必要信息。

本文所示的媒体不由Analytics Vidhya拥有,并由作者酌情使用。

以上是如何将模型转换为GGUF格式?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板