大模型领域的GGML是什么?GGML格式的大模型文件与原有文件有什么不同?它是谁提出的?如何使用?
GGML是在大模型领域常见的一种文件格式。HuggingFace上著名的开发者Tom Jobbins经常发布带有GGML名称字样的大模型。通常是模型名+GGML后缀,那么这个名字的模型是什么?GGML格式的文件名的大模型是什么样的大模型格式?如何使用?不过需要注意的是,GGML文件格式已经被抛弃,最新的文件格式为GGUF,本文将简单介绍。

经过本文你应该会了解到如下信息:
- 大模型领域的GGML是什么?
- GGML格式的大模型文件与原有文件有什么不同?
- 它是谁提出的?
- 如何使用?
GGML简介
GGML全称是Georgi Gerganov Machine Learning,是由Georgi Gerganov开发的一个张量库(tensor library),Georgi Gerganov是著名的开源项目llama.cpp的创建者。最早在2023年2月份在GitHub上提交更新。
GGML是用C编写的,为大型语言模型提供了基础设施。它定义了一个用于分发LLMs的二进制格式,并提供了Rust语言绑定,以及一系列原生Rust助手函数,以便安全、符合习惯地访问这些绑定。
简单总结就是GGML本身是一个C写的库,用它转换的大模型文件结果就是GGML格式的大模型文件,通常是原有的模型名+GGML。它的目标是让大模型在消费级硬件上产生高性能的工具。GGML起作用的原因有2个:一个是采用量化技术,将原有大模型预训练结果量化(即将原有大模型FP16精度压缩成INT8、INT6精度);另一个是二进制文件编码,即将量化后的预训练结果通过一种指定的格式变成一个二进制文件。凡是遵从这种二进制格式文件和量化方式的库都可以直接载入这个模型使用。
这里说一下,GGML定义的二进制文件格式包括GGML版本号、模型的超参数、词汇表和模型预训练结果,是按照这个顺序排列的二进制编码数据。很固定的格式。
由于量化和二进制文件格式后,原有的与训练结果文件将大大减少其物理文件大小和显存大小,所以可以用更低的硬件资源运行。
GGML库的特点
Georgi Gerganov在开发完这个库之后还成立了一家公司试图推广这个工具。在官网中,他描述了GGML工具(大模型文件格式)的优点:
用C语言编写:GGML是用C语言开发的,这意味着它可能具有高性能和低资源消耗的特点。
支持16位浮点:GGML支持16位浮点数,这可以减少模型的存储空间和计算资源需求,同时保持合理的精度。
整数量化支持(例如INT4位、INT5位、INT8位):GGML支持将模型权重量化为较低位数的整数,进一步减小模型大小并提高计算效率,同时也是一种平衡性能和精度的手段。
自动微分:GGML具有自动微分功能,这对于机器学习模型的训练和优化非常重要。
内置优化算法(例如ADAM, L-BFGS):GGML包含了多种优化算法,这些算法对于训练高效、精确的模型至关重要。
针对苹果芯片(Apple Silicon)优化:GGML针对苹果的芯片进行了优化,这意味着在苹果硬件上运行时,它能提供更好的性能。
在x86架构上利用AVX/AVX2内置函数:在x86架构上,GGML利用AVX和AVX2指令集来提升性能,这些指令集能够加速某些类型的计算。
通过WebAssembly和WASM SIMD支持Web:GGML可以通过WebAssembly(WASM)在Web环境中运行,增加了其在不同平台的可用性。
无第三方依赖:GGML不依赖于任何第三方库,这降低了使用的复杂性和潜在的兼容性问题。
运行时零内存分配:GGML在运行时不进行任何内存分配,这有助于减少内存消耗和提高性能。
支持引导式语言输出:GGML支持引导式语言输出,这可能意味着它能在生成文本时提供更多的控制和灵活性。
综上所述,GGML是一个高效、灵活且适用于多种平台的机器学习工具,特别适用于处理大型语言模型。它的这些特点使其在资源有限的环境中仍能保持良好的性能。
此外还需要注意的是,GGML是支持X86硬件和苹果硬件两种生态的。
GGML的性能
Georgi Gerganov在其网站上公布了GGML格式文件的性能(主要是苹果硬件):
模型名称 | GGML格式文件大小 | 硬件配置 | 性能评测结果 |
---|---|---|---|
Whisper Small Encoder | / | M1 Pro, 7 CPU threads | 600 ms/run |
Whisper Small Encoder | / | M1 Pro, ANE via Core ML | 200 ms /run |
7B LLaMA,4-bit量化 | 3.5 GB | M1 Pro, 8 CPU threads | 每个token生成时间43ms |
13B LLaMA,4-bit量化 | 6.8 GB | M1 Pro, 8 CPU threads | 每个token生成时间73ms |
7B LLaMA,4-bit量化 | 3.5 GB | M2 Max GPU | 每个token生成时间25ms |
13B LLaMA,4-bit量化 | 6.8 GB | M2 Max GPU | 每个token生成时间42ms |
可以看到,即使在消费级硬件上运行这些大模型,速度依然很快。
三种GGML格式文件对比:GGML、GGMF和GGJT的说明
GGML文件格式有三个:GGML、GGMF和GGJT,都是为了解决原始GGML格式缺陷进化的:
您提供的GGML文件格式列表包括三种不同的格式,以下是它们的中文翻译和解释:
GGML(无版本):这是基础格式,没有版本控制或数据对齐。它可能是最简单的格式,适用于不需要考虑文件版本兼容性或内存对齐优化的场景。
GGMF(有版本):这个格式与GGML相同,但增加了版本控制功能。目前只存在一个版本。版本控制有助于管理文件格式的变化,确保不同版本的软件能够正确解析文件。
GGJT:这种格式对张量进行对齐,以便能够使用内存映射(mmap),这要求数据对齐。虽然v1、v2和v3版本在结构上相同,但后续版本采用了与之前版本不兼容的不同量化方案。这种改变可能是为了优化性能或减小文件大小,但也意味着需要不同的处理方式来读取这些不同版本的文件。
总结来说,这三种格式提供了不同级别的复杂性和功能:
- GGML是最基本的形式,适用于简单应用。
- GGMF引入了版本控制,增加了一些复杂性,但提高了文件的可管理性。
- GGJT则专注于性能优化,特别是在使用内存映射时的性能,但牺牲了与旧版本的兼容性。
可惜的是,这三个版本的GGML格式都没办法继续优化,对于需要模型架构等信息来说,依然是不足够的,因此导致了后续增加新功能的困难。
GGML项目被废弃
尽管GGML项目获得了很多的关注,也有很多人发布了相关的格式模型。但是这个格式有一些限制和缺点。例如,GGML模型难以包含额外的信息,而且在添加新功能时可能会出现与现有模型的兼容性问题。
因此,2023年8月份,Georgi Gerganov创建一个新的大模型文件格式GGUF,全称GPT-Generated Unified Format,用以取代GGML格式。而在最新的llama.cpp版本中,也已经抛弃了GGML格式,不再兼容。因此,GGML项目彻底被废弃。
关于GGUF的详细介绍参考DataLearnerAI的博客介绍:GGUF格式的大模型文件是什么意思?如何使用?为什么有GGUF格式的大模型文件?GGUF大模型文件与GGML的差异是啥?
GGML项目地址(archived):https://github.com/ggerganov/ggml
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
