随着大型语言模型(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) 打印(“量化模型输出:”,输出)
检查原始模型和量化模型的大小
在使用大型语言模型时,了解原始版本和量化版本之间的尺寸差异至关重要。这种比较不仅强调了模型压缩的好处,而且还为部署策略提供了有效资源使用的信息。
导入操作系统 #保存模型的路径 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}%”)
但是,即使是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命名约定遵循以下结构:
名称中的每个组件都提供了对模型的见解:
- Basename:模型基本类型或体系结构的描述性名称,源自元数据(例如Llama或Mixtral)。
- Sizelabel:使用X格式IE
指示模型大小:专家数量(例如8), :模型参数刻度,例如Q的Q Quadrillions,t,数万亿美元,数十亿美元,数十亿美元,m for Million,k对于千参数。 - Finetune:模型微调目标,例如“聊天”或“指示”。
-
版本: V
。 格式中的模型版本号,如果未指定,则默认为v1.0。 - 编码:重量编码方案,每个项目可自定义。
- 类型:指示GGGUF文件类型,例如适配器的LORA或用于词汇数据的词汇。
-
碎片:表示一个模型分为部分,格式为
-of- 。
命名示例
设置转换为GGUF格式
在进行转换之前,请确保您有以下先决条件:
- 系统上安装了Python 3.8。
- 模型源文件:通常是Pytorch或Tensorflow模型(例如,Llama,Falcon)或来自拥抱面的模型。
- GGUF转换工具:这些工具通常基于GGML库或特定的模型转换脚本。
一些值得注意的量化技术
量化技术通过降低其大小和计算要求在优化神经网络中起关键作用。通过将高精度权重和激活转换为较低的位表示,这些方法可以有效地部署模型,而不会显着损害性能。
将模型转换为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}%”)
使用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中文网其他相关文章!

嘿,编码忍者!您当天计划哪些与编码有关的任务?在您进一步研究此博客之前,我希望您考虑所有与编码相关的困境,这是将其列出的。 完毕? - 让&#8217

AI增强食物准备 在新生的使用中,AI系统越来越多地用于食品制备中。 AI驱动的机器人在厨房中用于自动化食物准备任务,例如翻转汉堡,制作披萨或组装SA

介绍 了解Python功能中变量的名称空间,范围和行为对于有效编写和避免运行时错误或异常至关重要。在本文中,我们将研究各种ASP

介绍 想象一下,穿过美术馆,周围是生动的绘画和雕塑。现在,如果您可以向每一部分提出一个问题并获得有意义的答案,该怎么办?您可能会问:“您在讲什么故事?

继续使用产品节奏,本月,Mediatek发表了一系列公告,包括新的Kompanio Ultra和Dimenty 9400。这些产品填补了Mediatek业务中更传统的部分,其中包括智能手机的芯片

#1 Google推出了Agent2Agent 故事:现在是星期一早上。作为AI驱动的招聘人员,您更聪明,而不是更努力。您在手机上登录公司的仪表板。它告诉您三个关键角色已被采购,审查和计划的FO

我猜你一定是。 我们似乎都知道,心理障碍包括各种chat不休,这些chat不休,这些chat不休,混合了各种心理术语,并且常常是难以理解的或完全荒谬的。您需要做的一切才能喷出fo

根据本周发表的一项新研究,只有在2022年制造的塑料中,只有9.5%的塑料是由回收材料制成的。同时,塑料在垃圾填埋场和生态系统中继续堆积。 但是有帮助。一支恩金团队


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

禅工作室 13.0.1
功能强大的PHP集成开发环境