gguf-tools 项目介绍
gguf-tools 是一个正在开发的库,旨在处理GGUF文件。这项工作的目标不仅是提供有用的功能,还希望通过代码来记录如何使用这些文件。GGUF文件逐渐在本地机器学习领域变得越发重要,因此,拥有多种解析器和文件生成器的实现将非常有用。这个库的一个主要目的是支持llama.cpp项目中使用的GGUF文件。
gguf-tools的主要功能
gguf-tools这个程序使用该库实现了一些现实世界中有意义的功能。当前,它包括以下几个子命令:
gguf-tools show
这个命令用于展示GGUF文件的详细信息。它会显示文件内的所有键值对,包括数组和详尽的张量信息。张量的偏移量是基于文件开始的位置,因此它们是绝对偏移量,而不是像GGUF格式中从数据段开始的偏移。
示例输出:
./gguf-tools show models/phi-2.Q8_0.gguf | head -20
models/phi-2.Q8_0.gguf (ver 3): 20 key-value pairs, 325 tensors
general.architecture: [string] phi2
general.name: [string] Phi2
phi2.context_length: [uint32] 2048
...
gguf-tools compare
该功能用于比较两个LLM(或者其他以GGUF文件形式分发的模型)是否有关联,例如看看其中一个是否是另一个的微调版,或它们是否都来自同一个父模型。它通过计算匹配的张量(名称和参数数量相同)之间的平均权重差异来确定它们的关系,这对于了解模型的微调程度非常有用。
示例输出:
./gguf-tools compare mistral-7b-instruct-v0.2.Q8_0.gguf solar-10.7b-instruct-v1.0-uncensored.Q8_0.gguf
[token_embd.weight]: avg weights difference: 44.539944%
...
gguf-tools inspect-tensor
此命令用于显示指定张量的权重值。如果未指定计数(count),则显示全部权重值,否则只显示前几个。这对于一些低级别的检查,比如验证量化是否正常工作、识别模型指纹等非常有用。
gguf-tools split-mixtral
该命令用于从Mixtral 7B MoE模型中提取一个7B模型。需要指出的是,通过这种方式得到的模型并没有实际用途。这更多是为了展示如何使用这个库的实验性功能,很可能在将来会被更有意思和实用的例子所替代。
gufflib API
目前,gufflib API的唯一文档是其实现代码:可以通过查看gguf-tools.c文件了解其使用信息。这个库仍在积极开发中,代码注释丰富,API设计简单易用。
目前的局限性
目前,gguf-tools 缺少许多量化格式的支持。