这篇文章主要介绍了如下内容:
- 模型量化,包括转换为gguf格式
- 如何通过Ollama部署运行模型
通过这篇文章,你可以将一个很大的模型文件转换为一个相对很小的模型文件,并部署运行起来,运行速度可以大大提升,消费级显卡也可以无压力运行。
为什么要模型量化?
从智能语音助手到图像识别,大模型虽然在各个领域中展现了强大的能力,但是,这玩意需要大量的计算资源才能运行。为了降低模型的计算量和内存占用,模型量化应运而生。
模型量化通过模型中的参数表示从高精度(如 32 位浮点数)转换为低精度(如 8 位整数),从而大幅减少模型的大小和计算量。这意味着我们可以在资源有限的设备上,如家用消费级显卡,顺利运行大模型,而无需依赖昂贵的专业硬件。
模型量化有助于提高模型的运行速度。减少了参数的精度和计算量,使得模型在推理阶段能够更快地给出结果。对于一些对实时性要求较高的应用,如在线聊天机器人、实时图像识别等,模型量化带来的速度提升至关重要。
再者,模型量化能够降低能耗。在大规模的模型部署中,能耗是一个不可忽视的问题。量化后的模型在运行时消耗的电能更少,不仅有利于节约成本,还有助于减少对环境的影响。
此外,模型量化还便于模型的部署和传播。更小、更高效的量化模型更容易在不同的设备和平台上进行部署,促进了大模型技术的广泛应用和普及。
如何快速实现模型量化
llama.cpp
目前要实现模型量化,不得不说一个开源框架- llama.cpp,我主要说明如何通过这个框架实现将模型权重文件转为一个gguf格式的文件,以便后续可以通过Ollama进行模型量化。
这个框架的功能:在各种硬件(本地和云端)上以最少的设置和最先进的性能实现 LLM 推理。
详细介绍可以参考 github 地址: GitHub - ggerganov/llama.cpp: LLM inference in C/C++
根据官网介绍,这个框架的功能还是比较强大的,不仅可以对话模式运行模型、还可以作为网络服务器等,不过,我这里只介绍了如何转换为gguf格式的功能。
这里首先介绍下gguf格式:
GGUF(GPT-Generated Unified Format)是一种二进制格式,具有以下特点:
- 单文件部署:将模型的所有相关信息包含在一个文件中,便于分发和加载,无需额外的外部文件提供附加信息。
- 可扩展性:可以向基于 GGML 的执行器添加新功能或向 GGUF 模型添加新信息,同时不会破坏与现有模型的兼容性。
- mmap 兼容性:支持使用 mmap(内存映射)加载模型,从而实现快速加载和保存,提高了数据访问的效率。
- 易于使用:不论使用何种编程语言,都可以通过少量代码轻松实现模型的加载和保存,而无需使用外部库。
- 包含完整信息:加载模型所需的全部信息都被包含在模型文件内,用户无需再提供其他额外信息。
1、要使用llama.cpp,首先我们去github地址去下载项目代码
git clone --depth=1 https://github.com/ggerganov/llama.cpp.git
2、下载完之后,进入 llama.cpp 目录,运行如下命令:
python convert_hf_to_gguf.py 原始模型文件夹路径 --outfile 输出模型的路径
注意:要自己替换两个路径为你自己的,比如:
python convert_hf_to_gguf.py /home/jack/Documents/modelcode/LLaMA-Factory/export --outfile /home/jack/mnt/models/gguf/qwen2_15.gguf
你会看到如下结果就表示成功了
模型转换已经成功,下面我将介绍如何通过Ollma将这个转换后的gguf格式的二进制模型 进行量化。
Ollama
1、首先是下载,进入官网:https://ollama.com/ ,点击Download 按钮,你会看到如下界面
根据自己的系统,拷贝命令到命令行执行即可,等待安装完毕。
2、安装完之后,创建一个文件名称为 Modelfile,在文件内输入:
FROM gguf模型文件地址
注意:要将 gguf模型文件地址 改为你自己的地址。然后保存文件,命令行输入:
ollama create -q Q4_K_M 自定义模型名称
注意:自定义模型名称 要改为自己的,随便起一个名称就行。Q4_K_M 表示进行4 bit量化,也是比较常用的方式。这条命令的作用就是通过Modelfile 创建一个模型给Ollama管理。
3、查看模型,使用如下命令:
ollama list
如果看到你自定义的模型名词就代表成功, 下面 myqwen15 就是我自定义的模型名称。
4、检查、运行模型,使用如下命令
ollama run 你用的模型名称
然后你就可以和模型进行对话了,检查这个模型的效果如何。如果模型的效果不好,可以参考我之前写的文章 《LLaMA-Factory 大模型微调超简单,从零开始开始玩转大模型微调》,通过 LLaMA-Factory 进行模型的微调。
总结:
本篇文章只是抛砖引玉,浅谈了大模型的转换、量化、运行等知识,更多细节知识,如果有兴趣,可以查看官方文档,本人也还在学习过程中,看到这里了,不妨点个关注,一起学习,一起交流呀~
关于我:
资深程序员,曾在北京某AI公司从事智能对话问答平台研发,也曾在大厂历练过,对AI场景应用充满热情。