社区供稿 | 源大模型的快速部署与高效推理——GGUF格式模型介绍与使用教程

简介: 在人工智能领域,大型语言模型的发展日新月异,它们在自然语言处理、机器翻译、智能助手等多个领域展现出了前所未有的能力。

GGUF简介

在人工智能领域,大型语言模型的发展日新月异,它们在自然语言处理、机器翻译、智能助手等多个领域展现出了前所未有的能力。然而,随着模型规模的不断扩大,这些庞大的神经网络模型在存储、传输和加载上面临着一系列挑战。传统的文件格式在处理这些庞大的数据集时显得力不从心,不仅效率低下,而且兼容性和扩展性也难以满足日益增长的需求。

在这样的背景下,GGUF(GPT-Generated Unified Format)应运而生。由开发者Georgi Gerganov提出,GGUF格式是专为大型语言模型设计的二进制文件格式,旨在解决当前大模型在实际应用中遇到的存储效率、加载速度、兼容性和扩展性等问题。GGUF通过优化数据结构和编码方式,显著提升了模型文件的存储效率,同时保证了快速的加载性能。此外,它的设计考虑了跨平台和跨框架的兼容性,使得模型能够无缝地在不同的硬件和软件环境中运行,极大地促进了大型模型的广泛应用和进一步发展。

当前,GGUF格式广泛应用于各类大模型的部署和分享,特别是在Hugging Face等开源社区中广受欢迎。GGUF格式模型在实际使用中体现出的主要特点和优势包括:

  1. 高效存储:GGUF格式优化了数据的存储方式,减少了存储空间的占用,这对于大型模型尤为重要,因为它们通常包含大量的参数。
  2. 快速加载:GGUF格式支持快速加载模型数据,这对于需要即时响应的应用场景非常有用,比如在线聊天机器人或实时翻译系统。
  3. 兼容性:作为一种统一的格式,GGUF旨在提高不同平台和框架之间的兼容性,使得模型可以在不同的环境和硬件上无缝运行。
  4. 可扩展性:随着模型规模的不断扩大,GGUF格式设计时考虑到了未来的扩展性,以适应更大规模的模型和更复杂的数据结构。

本文以下部分将着重介绍当下源大模型对于GGUF格式的支持情况以及开发者在实际使用体验过程中如何使用GGUF格式的模型进行部署、推理、量化等技术细节。

Yuan2.0-2B模型的GGUF应用

Yuan2.0模型简介

源2.0 是浪潮信息发布的新一代基础语言大模型。我们开源了全部的3个模型源2.0-102B,源2.0-51B和源2.0-2B。并且我们提供了预训练,微调,推理服务的相关脚本,以供研发人员做进一步的开发。源2.0是在源1.0的基础上,利用更多样的高质量预训练数据和指令微调数据集,令模型在语义、数学、推理、代码、知识等不同方面具备更强的理解能力。

更多详情请参考Yuan2.0模型

  • 技术报告

https://arxiv.org/ftp/arxiv/papers/2311/2311.15786.pdf

  • Github

https://github.com/IEIT-Yuan/Yuan-2.0

 

本项目基于llama.cpp(version:b1742)在Windows系统(CPU Only)上对源2.0-2B模型的适配。本项目的Github地址为:

llamacpp for Yuan

https://github.com/IEIT-Yuan/3rd_party/

由于源2.0模型结构与llama结构存在差异,针对源2.0模型(Yuan2.0-2B)模型LFA结构,进行如下修改:

  • llama计算图中添加LFA结构,修改ggml_conv_1d逻辑,以适配源2.0,保证前后序列长度不变;
  • llama计算图中添加q、k混合相关的逻辑;
  • 修改IM2COL算子,修改数组的读取方式;
  • 修改ADD算子,将卷积模块的输出进行转置,以适配后面的计算;
  • 修改concat算子,以适配q、k混合的逻辑;
  • 支持多线程推理,加速生成速率;

目前支持fp16精度模型的gguf文件转换,后续会持续进行其他精度的工作。

Yuan2.0-2B模型的GGUF应用

实现对Yuan2.0-2B模型的GGUF格式转换需要克隆llamacpp for Yuan项目到本地并进入工作目录。

格式转化

对已有的hf格式模型转化为GGUF格式

python convert.py --model yuan2b-hf\yuan2-2B --outfile zh-models/Yuan2-2B-Februa-hf-GGUF.gguf

image.gif

编译

下一步为了使用对GGUF格式模型调用并部署推理,我们需要编译该项目,同样在该项目的工作目录执行编译。

对于Linux和MacOS系统,可以使用make工具,在工作目录下执行

make

image.gif

对于Windows系统,可以使用cmake工具,在工作目录下执行

mkdir build
cd build
cmake ..
cmake --build . --config Release

image.gif

模型测试

成功完成上述编译后,工作目录会生成编译好的可执行文件 main.exe,下一步我们就使用该文件进行GGUF格式模型的调用和推理测试。

我们使用的测试环境配置如下:

  • python3.9
  • 11th Gen Intel(R) Core(TM) i5-1145G7 @2.60GHz 2.61GHz
  • 8.00GB RAM
  • Windows 10专业版(21H1)

我们以”北京简介“为prompt对先前转化出来的GGUF格式Yuan2.0-2B模型进行测试,记得将下方代码中的模型路径替换为您设备上GGUF格式模型存储的路径。

main.exe -m D:\\llama-cpp\\llama.cpp\\zh-models\\Yuan2-2B-Februa-hf-GGUF.gguf -p "北京简介" -n 400  --top-k  5 --threads 4

image.gif

在我们的测试环境下得到的终端输出如下所示

llama_new_context_with_model: n_ctx      = 512
llama_new_context_with_model: freq_base  = 10000.0
llama_new_context_with_model: freq_scale = 1
llama_new_context_with_model: KV self size  =   96.00 MiB, K (f16):   48.00 MiB, V (f16):   48.00 MiB
llama_build_graph: non-view tensors processed: 628/820
llama_build_graph: ****************************************************************
llama_build_graph: not all non-view tensors have been processed with a callback
llama_build_graph: this can indicate an inefficiency in the graph implementation
llama_build_graph: build with LLAMA_OFFLOAD_DEBUG for more info
llama_build_graph: ref: https://github.com/ggerganov/llama.cpp/pull/3837
llama_build_graph: ****************************************************************
llama_new_context_with_model: compute buffer total size = 270.94 MiB
Model metadata: {'tokenizer.ggml.add_eos_token': 'true', 'tokenizer.ggml.padding_token_id': '77185', 'tokenizer.ggml.seperator_token_id': '77185', 'tokenizer.ggml.eos_token_id': '77185', 'general.architecture': 'llama', 'llama.context_length': '8192', 'general.name': 'E:\\ckpts\\yuan2b-hf', 'tokenizer.ggml.add_bos_token': 'true', 'llama.embedding_length': '2048', 'llama.feed_forward_length': '8192', 'llama.attention.layer_norm_rms_epsilon': '0.000001', 'llama.rope.dimension_count': '64', 'llama.attention.head_count': '32', 'tokenizer.ggml.bos_token_id': '77185', 'llama.block_count': '24', 'llama.attention.head_count_kv': '32', 'tokenizer.ggml.model': 'llama', 'general.file_type': '1'}
北京是中国的首都,是华北地区的中心城市。它是中国政治、文化和经济的中心,也是中国最大的城市之一。北京具有悠久的历史和丰富的文化遗产,包括长城、故宫、天坛等世界闻名的古迹,以及现代化的摩天大楼和购物中心。
北京也是中国的教育和科研中心,拥有众多高等院校和科研机构,为中国培养了许多杰出人才。此外,北京还是中国重要的商业和交通中心,拥有众多的商业区和购物中心。
北京还是一个旅游胜地,吸引着大量的国内外游客前来参观和旅游。著名的景点包括故宫博物院、颐和园、天坛公园、八达岭长城等。这些景点都有着独特的历史文化背景和壮观的自然风光,给人们带来了不同的体验。
总的来说,北京是一个历史悠久、文化底蕴丰富、旅游胜地众多的城市,值得一游。无论是对于艺术爱好者、历史文化爱好者还是自然探索者,北京都有着不可多得的体验。
llama_print_timings:        load time =     579.04 ms
llama_print_timings:      sample time =     126.74 ms /   193 runs   (    0.66 ms per token,  1522.81 tokens per second)
llama_print_timings: prompt eval time =     578.98 ms /     4 tokens (  144.74 ms per token,     6.91 tokens per second)
llama_print_timings:        eval time =   20562.87 ms /   192 runs   (  107.10 ms per token,     9.34 tokens per second)
llama_print_timings:       total time =   22961.55 ms

image.gif

此外,我们还对比了在相同任务下GGUF格式和原始hf格式模型的推理性能和内存占用情况,结果如下表格所示:

推理性能

GGUF格式(C++)

HF格式(Python)

加速比

9.16 tokens/s

1.21 tokens/s

7.57

内存占用

GGUF格式(C++)

HF格式(Python)

内存占比(GGUF/HF)

~0.4 GB

~8.6 GB

4.65%

从上方表格的结果我们不难看出使用GGUF格式模型可以显著提升模型部署后的推理速度,同时可以有效降低模型使用时对于内存的占用。

结论

本文深入探讨了GGUF(GPT-Generated Unified Format)格式在大型语言模型领域的应用,及其在提高模型存储效率、加载速度、兼容性和可扩展性方面的重要性。通过对Yuan2.0-2B模型的适配和测试,我们验证了GGUF格式在实际应用中的高效性和稳定性。测试结果表明,使用GGUF格式的模型在推理速度和内存占用方面均优于传统的HF格式,这不仅提高了模型的运行效率,也降低了资源消耗。

最后,GGUF格式的可扩展性为未来更大规模模型的发展提供了支持,确保了格式能够适应不断进步的技术需求。随着开源社区和开发者的不断贡献,GGUF格式有望成为大型语言模型部署和分享的新标准,进一步推动人工智能技术的创新和发展。Yuan2.0系列模型也将持续支持GGUF格式,为开发者带来更好的使用体验。

关于源大模型的更多信息

更多信息,请访问以下页面

YuanChat Github 项目主页:

GitHub - IEIT-Yuan/YuanChat

Yuan 2.0 Github 项目主页:

GitHub - IEIT-Yuan/Yuan-2.0: Yuan 2.0 Large Language Model

Yuan 2.0-M32 Github 项目主页:

Github Yuan2.0-M32

Yuan 2.0 系列模型Hugging Face 主页:

https://huggingface.co/IEITYuan

Yuan 2.0 系列模型Modelscope 主页:

https://modelscope.cn/organization/IEITYuan

相关文章
|
3月前
|
数据采集 存储 人工智能
TripoSR开源!从单个图像快速生成 3D 对象!(附魔搭社区推理实战教程)
近期,VAST团队和Stability AI团队合作发布了TripoSR,可在一秒内从单个图像生成高质量3D对象。
|
3月前
|
机器学习/深度学习 编解码 Shell
|
3月前
|
人工智能 物联网 PyTorch
SCEdit:轻量级高效可控的AI图像生成微调框架(附魔搭社区训练实践教程)
SCEdit是一个高效的生成式微调框架,由阿里巴巴通义实验室基础视觉智能团队所提出。
|
3月前
魔塔社区的模型支持使用DJL 进行推理吗?
想使用DJL 加载魔塔社区的模型并进行推理
|
6天前
|
存储 人工智能 JSON
|
3月前
|
数据采集 自然语言处理 前端开发
社区供稿 | 猎户星空百亿参数大模型 Orion-14B系列开源,一张3060就能跑(附魔搭社区推理微调最佳实践)
1月21日,傅盛在猎户星空大模型发布会上宣布,“为企业应用而生” 的开源百亿参数猎户星空大模型正式发布。猎户星空大模型(Orion-14B)是由猎户星空研发的预训练多语言大语言模型,以其140亿参数规模展现出了卓越的性能。
|
12天前
|
存储 Linux 开发工具
告别Hugging Face模型下载难题:掌握高效下载策略,畅享无缝开发体验
【8月更文挑战第2天】告别Hugging Face模型下载难题:掌握高效下载策略,畅享无缝开发体验
告别Hugging Face模型下载难题:掌握高效下载策略,畅享无缝开发体验
|
2月前
|
人工智能 Linux Docker
一文详解几种常见本地大模型个人知识库工具部署、微调及对比选型(1)
近年来,大模型在AI领域崭露头角,成为技术创新的重要驱动力。从AlphaGo的胜利到GPT系列的推出,大模型展现出了强大的语言生成、理解和多任务处理能力,预示着智能化转型的新阶段。然而,要将大模型的潜力转化为实际生产力,需要克服理论到实践的鸿沟,实现从实验室到现实世界的落地应用。阿里云去年在云栖大会上发布了一系列基于通义大模型的创新应用,标志着大模型技术开始走向大规模商业化和产业化。这些应用展示了大模型在交通、电力、金融、政务、教育等多个行业的广阔应用前景,并揭示了构建具有行业特色的“行业大模型”这一趋势,大模型知识库概念随之诞生。
132234 29
|
16天前
|
人工智能 开发工具 git
尝试一下,在本地使用 ChatGLM3 模型搭建离线 AI 聊天系统
尝试一下,在本地使用 ChatGLM3 模型搭建离线 AI 聊天系统
28 0
|
3月前
|
机器学习/深度学习 缓存 算法
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]