GGUF与GGML有什么区别?AI时代你应该了解的大模型文件格式

查理谈科技 2024-05-26 20:54:47

一、大模型的发展以及GGML、GGUF的由来

随着OpenAI、Meta、Google等头部AI公司在AI 方面的不断研究, 不断有最新的大语言模型发布, 功能也越来越强大, 而与之相伴随的,就是模型的日益复杂,参数的数量,或权重和激活,即其学习和处理数据的能力,也在快速增加例如,GPT-3.5 拥有大约 1750 亿个参数,而当前最先进的 GPT-4 拥有超过 1 万亿个参数。而这些参数不断增加的背后,意味着部署和运行大模型的硬件要求也越来越高, 相应地IT支持也会快速增加。

难道就没有办法来应对大模型的参数的不断增加,而保持大模型在消费级硬件上运行吗? 当然可以, 很多AI 研究人员也在设计越来越多的解决方案来应对模型规模不断扩大的挑战。

随着Meta AI 推出了LlaMa (Large Language Model Meta AI)系列模型之后, 受到了AI 研究人员和应用开发人员的大力欢迎, 除了LlaMa 模型本身优异的表现、开放特性之外, LlaMa 模型的另外一个特点是,提供了一系列的参数大小不一的模型, LaMA按照参数量的大小分为四个型号:LLaMA-7B、LLaMA-13B、LLaMA-30B与LLaMA-65B。这里的B是billion的缩写,指代模型的参数规模, 因此最小的模型7B包含70亿个参数,而大的一款65B则包含650亿个参数。这使得LlaMa 模型有着更好的适应性, 开发人员可以根据不同的硬件水平来选择不同参数量级的Llama 模型。

一般地说, 专业的AI 研究人员都会使用Python语言、Pytorch、CUDA等框架来运行llama模型, 但是如果仅仅是用来做本地推理, 使用Python和Pytorch 有非常繁琐的环境要求和库依赖, Python 语言本身的执行效率也不如传统的C/C++语言。

Georgi Gerganov

在这种背景下, 国外出现了一个开源大神 Georgi Gerganov, 在 2023 年 3 月 10 日, 他在 GitHub 上发布了 llama.cpp项目,一个开源的、使用纯粹的C/C++语言开发, 用 C++ 重新实现 LLaMA,它运行具有 4 位量化的 LLaMa 模型的推理,允许没有强大 GPU 的系统在本地运行模型。

llama.cpp 项目引入了GGML、 GGUF等文件格式,这是一种存储张量和元数据的二进制格式。 该格式侧重于支持不同的量化类型,这可以减少内存使用,并以较低的模型精度为代价提高速度。

二、GGML 是什么

GGML 是 Georgi Gerganov 在开发llama.cpp项目中使用到的量化模型的文件格式。 要与这些文件交互,就需要使用 llama.cpp。 这些格式可以从单个文件进行高效推理,从而使 LLM 部署过程更加简单且更具成本效益。 llama.cpp 可以加载 GGML 模型并在 CPU 上运行它们。 最初,这是与 GPTQ 模型的主要区别,GPTQ 模型在 GPU 上加载和运行。 不过,现在也可以使用 llama.cpp 将 LLM 的某些层运行到到 GPU。

GGML 主要是一个张量库,为这些文件格式奠定了基础,允许 LLM 进行初始存储和处理,具有一下特点:

GGML 支持 16 位浮点和整数量化格式,这可以减少模型的内存占用和计算成本。GGML 还提供自动微分和基于梯度的优化算法,例如 ADAM 和 L-BFGS,帮助开发人员高效地训练模型。GGML 针对 Apple M1 和 M2 处理器以及 x86 架构进行了优化,使用 AVX / AVX2 来加速进程。GGML没有第三方依赖,运行时不分配任何内存,易于集成和部署。

GGML 是 LLM 文件格式演变的早期迭代,并作为未来改进的基础。 由于开发人员为保持向后兼容性而刻意努力,这些早期版本现在大多仅与 KoboldCCP 等遗留系统兼容。 然而,在当代的使用中,尤其是 llama.cpp 的版本中,GGML 的相关性已经减弱。

主要原因是与 GGUF 相比,其处理能力较慢且缺乏高级功能。 值得注意的是,llama.cpp 中已经不再提供对GGML 支持。 结果就是,当前最新的llama.cpp将无法再加载它们。 因此,即使遇到有些应用程序提示下载 GGML 模型,开发人员也应该选择 GGUF 版本。 无论应用程序的文档如何编写,GGUF 版本都将正常运行。

三、GGUF的出现

GGUF(GPT-Generated Unified Format)是llama.cpp 团队于 2023 年 8 月 21 日推出的新的文件格式, GGUF 不仅仅是另一个标准,而且是对 GGML 的直接而实质性的改进。

GGUF格式

这是一种更高效、更灵活的存储和使用 LLM 进行推理的方式。 虽然 GGML 是一项有价值的基础工作,但 GGUF 解决了其局限性,并在 AI 领域开辟了新的可能性,有可能塑造模型处理和部署的未来。 GGUF 发布后,立即淘汰了旧的 GGML 格式,开创了 LLM 处理的新时代。 这一转变得到了强大的开发者社区、模型维护者、theBloke 等从业者以及其他有望快速调整现有模型并将其转换为 GGUF 格式的知名人物的支持。

这种二进制格式专为快速加载和保存模型而设计,并采用用户友好的方法来读取和处理模型文件。 围绕其发布的热情反映了人们对其显著增强模型开发和部署的能力寄予厚望。 GGUF 作为一种用户友好的解决方案的推出降低了生产成本。

Hugging Face Hub 支持所有文件格式,但内置了对于 GGUF 格式模型文件的支持,GGUF 是一种二进制格式,针对快速加载和保存模型进行了优化,使其能够高效地进行推理。 GGUF 设计用于与 GGML 和其他执行器一起使用。

在Hugging Face 平台,通过https://huggingface.co/models?library=gguf , 可以查找平台上的所有gguf 格式的模型

四、Ollama 对于GGUF 格式的支持

Ollama是目前一个比较流行的在本地运行开源LLM的本地管理工具,主要包括 Mistral 和 Llama 2。Ollama 的特点是,将模型权重、配置和数据集捆绑到由模型文件管理的统一包中,通过类似于Docker的命令方式, 简化了本地运行LLM的操作,因此受到了很多开发人员的喜爱。

Ollama 支持各种 LLM,包括 LLaMA-2、未经审查的 LLaMA、CodeLLaMA、Falcon、Mistral、Vicuna 模型、WizardCoder 和未经审查的 Wizard, 同时, Ollama 也支持在本地导入GGUF 格式, 具体做法:

(1)、创建一个Modelfile文件, 并在文件中使用FROM 来引入GGUF 文件:

FROM ./vicuna-33b.Q4_0.gguf

(2)、Ollama 创建基于GGUF的模型:

ollama create ggufexample -f Modelfile

最后, 就可以像其他模型一样,在Ollama中运行这个模型啦:

ollama run ggufexample

总结

本文从产生式人工智能的发展角度,介绍了GGML、GGUF等大模型格式的产生背景, 并对于GGML、GGUF的基本特点进行了介绍,最后介绍了在Ollama中如何导入和使用GGUF格式的大模型文件。

 

0 阅读:8

查理谈科技

简介:感谢大家的关注