随着大型语言模型(LLM)的规模不断增长,需要有效的方法来存储,部署和运行它们在低资源设备上。尽管这些模型具有强大的功能,但它们的大小和内存需求可能会使部署成为挑战,尤其是在消费者硬件上。这是模型量化和专门的存储格式(例如GGUF)(通用GPT统一格式)开始发挥作用的地方。
在本指南中,我们将深入研究GGUF格式,探索其好处,并为将模型转换为GGUF提供逐步的教程。在此过程中,我们将介绍模型量化的历史以及GGGUF如何发展以支持现代LLM。最后,您将对GGUF为何重要以及如何开始为自己的模型开始使用它有深刻的了解。
本文作为数据科学博客马拉松的一部分发表。
GGUF的旅程始于了解模型量化的演变。量化降低了模型参数的精度,有效地压缩了它们以减少记忆和计算需求。这是一个快速概述:
在早期,深度学习模型存储在Tensorflow和Pytorch等框架的天然格式中。使用.pb文件的TensorFlow模型,而Pytorch使用.pt或.pth。这些格式用于较小的模型,但提出了局限性:
跨框架的互操作性的兴起导致了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或通用GPT统一格式是为GGML的扩展而开发的,以支持更大的模型。这是用于存储用于使用GGML推理和基于GGML的执行者的模型的文件格式。 GGUF是一种二进制格式,旨在快速加载和节省模型,并易于阅读。传统上是使用Pytorch或其他框架开发的模型,然后转换为GGUF以用于GGML。
GGUF是GGML,GGMF和GGJT的连续文件格式,并且通过包含加载模型所需的所有信息而设计为明确的。它也被设计为可扩展的,因此可以将新信息添加到模型中而不会破坏兼容性。 它的设计有三个目标:
GGUF格式为需要在有限的硬件上部署大型,资源丰富的模型的开发人员而不会牺牲性能。以下是一些核心优势:
GGUF格式采用特定的命名惯例来浏览一下关键的模型信息。该约定可以帮助用户确定重要的模型特征,例如体系结构,参数大小,微调类型,版本,编码类型和碎片数据 - 制造模型管理和部署更容易。
GGUF命名约定遵循以下结构:
名称中的每个组件都提供了对模型的见解:
命名示例
在进行转换之前,请确保您有以下先决条件:
量化技术通过降低其大小和计算要求在优化神经网络中起关键作用。通过将高精度权重和激活转换为较低的位表示,这些方法可以有效地部署模型,而不会显着损害性能。
以下是您可以将模型转换为GGGUF格式的方式。
在这种情况下,我们正在选择Google的Flan-T5模型来量化。您可以按照命令直接从huggingface下载该命令
!PIP安装拥抱面板 从huggingface_hub导入snapshot_download model_#替换为要下载的模型的ID snapshot_download(repo_id = model_id,local_dir =“ t5”)
我们正在使用Llama.cpp将模型量化为GGUF格式
!git克隆https://github.com/ggerganov/llama.cpp
如果在Google协作中,请按以下代码进行操作,否则您可以导航到要求目录以安装“ unigess-convert_hf_to_gguf.txt”
!
量化水平决定了模型大小和准确性之间的权衡。较低位量化(如4位)可节省内存,但可能会降低准确性。例如,如果您针对仅CPU的部署,并且不需要最高的精度,那么INT4可能是一个不错的选择。在这里,我们选择“ Q8_0”。
如果在Google合作中,请运行以下脚本,否则请按照注释。
#!python {通往convert_hf_to_gguf.py的路径} {路径hf_model} - outfile {name_of_of_outputfile.gguf} - outtype {量化类型} !
当部署机器学习模型时,了解原始版本和量化版本之间的尺寸差异至关重要。该比较强调了量化如何显着降低模型大小,从而提高了效率和更快的推理时间,而不会大大损失准确性。
#检查原始模型和量化模型的尺寸 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这样的格式将在使大规模AI访问中发挥越来越重要的作用。我们很快可能会看到更高级的量化技术,这些技术可以保留更准确性,同时进一步降低内存需求。目前,GGUF仍然处于最前沿,可以在CPU和Edge设备上有效地部署大型语言模型。
GGUF格式是一种改变游戏规则的人,用于在限量资源设备上有效地部署大型语言模型。从模型量化的早期努力到GGUF的开发,AI模型存储的景观已经发展为使更广泛的受众访问强大的模型。通过遵循本指南,您现在可以将模型转换为GGUF格式,从而更容易将它们部署到现实世界的应用程序中。
量化将继续发展,但是GGUF支持各种精确水平和有效的元数据管理的能力确保它将保持相关性。尝试将您的模型转换为GGUF并亲身探索好处!
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中文网其他相关文章!