社区供稿 | 源大模型的快速部署与高效推理——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

相关文章
|
8月前
|
数据采集 存储 人工智能
TripoSR开源!从单个图像快速生成 3D 对象!(附魔搭社区推理实战教程)
近期,VAST团队和Stability AI团队合作发布了TripoSR,可在一秒内从单个图像生成高质量3D对象。
|
8月前
|
人工智能 物联网 PyTorch
SCEdit:轻量级高效可控的AI图像生成微调框架(附魔搭社区训练实践教程)
SCEdit是一个高效的生成式微调框架,由阿里巴巴通义实验室基础视觉智能团队所提出。
|
8月前
魔塔社区的模型支持使用DJL 进行推理吗?
想使用DJL 加载魔塔社区的模型并进行推理
|
1月前
|
自然语言处理 资源调度 并行计算
从本地部署到企业级服务:十种主流LLM推理框架的技术介绍与对比
本文深入探讨了十种主流的大语言模型(LLM)服务引擎和工具,涵盖从轻量级本地部署到高性能企业级解决方案,详细分析了它们的技术特点、优势及局限性,旨在为研究人员和工程团队提供适合不同应用场景的技术方案。内容涉及WebLLM、LM Studio、Ollama、vLLM、LightLLM、OpenLLM、HuggingFace TGI、GPT4ALL、llama.cpp及Triton Inference Server与TensorRT-LLM等。
242 7
|
2月前
|
弹性计算 人工智能 自然语言处理
魔搭社区与函数计算:高效部署开源大模型的文本生成服务体验
在数字化时代,人工智能技术迅速发展,开源大模型成为重要成果。魔搭社区(ModelScope)作为开源大模型的聚集地,结合阿里云函数计算,提供了一种高效、便捷的部署方式。通过按需付费和弹性伸缩,开发者可以快速部署和使用大模型,享受云计算的便利。本文介绍了魔搭社区与函数计算的结合使用体验,包括环境准备、部署应用、体验使用和资源清理等步骤,并提出了改进建议。
|
2月前
|
自然语言处理 监控 API
"阿里云ModelScope深度测评:从预训练模型到一键部署,揭秘高效模型开发背后的秘密,开发者必备利器!"
【10月更文挑战第23天】阿里云ModelScope是一款便捷的模型开发、训练、部署和应用平台。它提供丰富的预训练模型,涵盖自然语言处理、计算机视觉等领域,支持一键式模型训练和部署,具备模型版本管理和监控功能,显著降低开发门槛,提高模型应用效率。
136 0
|
5月前
|
机器学习/深度学习 自然语言处理 TensorFlow
迁移学习入门指南超棒!教你如何利用预训练模型加速 TensorFlow 项目开发,开启高效之旅!
【8月更文挑战第31天】在深度学习领域,迁移学习是种在资源有限的情况下快速开发高性能模型的技术。本指南介绍如何在TensorFlow中利用预训练模型实现迁移学习,包括选择、加载预训练模型、自定义顶层、冻结预训练层及训练模型等内容,以帮助提升模型性能和训练速度。
108 0
|
5月前
|
机器学习/深度学习 人工智能 算法
跨平台AI模型部署神器:FastDeploy实战Yolov5
跨平台AI模型部署神器:FastDeploy实战Yolov5
173 1
|
8月前
|
机器学习/深度学习 缓存 算法
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
预训练驱动的统一文本表示-GTE魔搭社区最佳实践
文本表示是自然语言处理(NLP)领域的核心问题, 其在很多NLP、信息检索的下游任务中发挥着非常重要的作用。

热门文章

最新文章