拼搏

拼搏

大模型训练入门必备技术,llama.cpp助力模型转换及量化

admin
大模型训练入门必备技术,llama.cpp助力模型转换及量化-第1张-游戏相关-拼搏

前言:

现在姐妹们对“魔兽世界模型升级”大体比较关切,看官们都想要分析一些“魔兽世界模型升级”的相关内容。那么小编同时在网络上搜集了一些关于“魔兽世界模型升级””的相关资讯,希望你们能喜欢,朋友们快快来学习一下吧!

我们在huggingface上看到很多.safetensors和.bin格式的模型文件我们在使用LM Studio 、Jan、ollama等客户端模型整合工具都会使用到GGUF格式模型文件。

1.GGUF 由来

Georgi Gerganov(https://github.com/ggerganov)是著名开源项目llama.cpp(https://github.com/ggerganov/llama.cpp)的创始人,它最大的优势是可以在CPU上快速地进行推理而不需要 GPU。

创建llama.cpp后作者将该项目中模型量化的部分提取出来做成了一个用于机器学习张量库:GGML(https://github.com/ggerganov/ggml),项目名称中的GG其实就是作者的名字首字母。它与其他张量库(tensor library)最大的不同,就是支持量化模型在CPU中执行推断。从而实现了低资源部署LLM。

而它生成的文件格式最初只存储了张量,这就是GGML工具,后来由于一些不足:

它无法有效地识别不同的模型架构, 对超参数的添加和移除具有破坏性,这使得模型的迭代和升级变得复杂。

为此,在2023年8月份,Georgi Gerganov推出了GGUF作为后续的替代者,即:GGUF格式标准:

https://github.com/ggerganov/ggml/blob/master/docs/gguf.md

GGUF (GPT-Generated Unified Format) 是一种二进制模型文件格式,专为GGML及其执行器快速加载和保存模型而设计。GGUF 是 GGML、GGMF 和 GGJT 的后继文件格式,通过包含加载模型所需的所有信息来确保明确性。GGUF 被设计为可扩展的,以便可以在不破坏兼容性的情况下将新信息添加到模型中。

2 GGUF 的特点

大语言模型的开发通常使用PyTorch等框架,其预训练结果通常也会保存为相应的二进制格式,如pt后缀的文件通常就是PyTorch框架保存的二进制预训练结果。

但是,大模型的存储一个很重要的问题是它的模型文件巨大,而模型的结构、参数等也会影响模型的推理效果和性能。

将原始模型预训练结果转换成GGUF之后,有下面优势:

一、可以更加高效的使用

原始的大模型预训练结果经过转换后变成GGUF格式可以更快地被载入使用,也会消耗更低的资源。

原因在于GGUF采用了多种技术来保存大模型预训练结果,包括采用紧凑的二进制编码格式、优化的数据结构、内存映射等。

1、二进制格式

GGUF作为一种二进制格式,相较于文本格式的文件,可以更快地被读取和解析。

二进制文件通常更紧凑,减少了读取和解析时所需的I/O操作和处理时间,这对于需要频繁加载不同模型的场景尤为重要。

2、优化的数据结构

GGUF采用了特别优化的数据结构,这些结构为快速访问和加载模型数据提供了支持。例如,数据可能按照内存加载的需要进行组织,以减少加载时的处理。

3、全面的信息包含

GGUF包含加载模型所需的所有信息,无需依赖外部文件。这大大简化了模型部署和共享的过程。

这就可以跨平台和跨设备地加载和运行模型,无需安装任何额外的依赖库。

二、量化技术,降低资源消耗

模型量化是一种将浮点计算转成低比特定点计算的技术,它可以有效的降低模型计算强度、参数大小和内存消耗,从而提高模型的推理速度和效率。

llama.cpp官方提供了转换脚本,可以将pt格式的预训练结果以及safetensors模型文件转换成GGUF格式的文件。转换的时候也可以选择量化参数,降低模型的资源消耗。这个过程性能损失很低!

GGML支持将模型权重量化为较低位数的整数,进一步减小模型大小并提高计算效率,同时也是一种平衡性能和精度的手段。

以上我们简单介绍了一下GGUF文件格式相关信息。

有时候刚出来的模型,我们希望下载到本地使用LM Studio 、Jan、ollama来运行,但是他们的托管模型又没有那么怎么办呢?

这时候我们需要将原始模型进行转换。这个时候就用到了模型量化技术。今天给大家介绍的就是模型量化技术。

模型量化我们用到llama.cpp来实现模型量化,下面我们就以windows 为例介绍使用llama.cpp 来实现量化。在使用llama.cpp之前我们需要用到cmake编译工具。

3 模型量化

3.1 cmake工具安装

首先我们需要到https://cmake.org/download/#/ 网站上下载cmake


这里我们就下载解压版cmake-3.29.2-windows-x86_64.zip ,下载完成后电脑中解压。


接下来我们把cmake 设置一下环境变量

编辑系统环境变量-系统属性-高级-环境变量-系统变量

path-添加环境变量,我的cmake路径是 E:\soft\cmake-3.29.2-windows-x86_64\bin,设置完成后。关闭环境变量设置窗口。在cmd窗口测试一下cmake是否生效。

出现以上画面,说明cmake 安装及环境配置设置完成。

3.2 克隆和编译llama.cpp

下载llama.cpp项目

git clone https://github.com/Rayrtfr/llama.cpp

可以用 git 下载源码。当然如果电脑上没有安装git,也可以下载llama.cpp的源码压缩包


对llama.cpp项目进行编译,生成./main(用于推理)和./quantize(用于量化)二进制文件

cd F:\temp\llama.cpp-master


执行cmake F:\temp\llama.cpp-master 命令


3生成量化版本模型

因为llama.cpp是C++的项目,所以运行这个项目就需要上面make 等命令编译打包。因为我们今天重点是讲解模型量化不需要使用二进制模型文件加载运行,关于llama.cpp使用就介绍了。

llama.cpp项目在模型转换中用到了几个PY 脚本convert.py、convert-hf-to-gguf.py、convert-llama-ggml-to-gguf.py、convert-lora-to-ggml.py、convert-persimmon-to-gguf.py。这里我们需要保证运行的这台电脑上已经安装好python运行环境。



关于python环境的安装这里就不过多介绍了。

在执行convert.py 模型转换脚本之前我们需要将执行该脚本的python 依赖包安装,所以我们需要执行以下命令

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn


这里需要注意torch 安装是需要带cuda 版本的,否则是不能带GPU加速的

建议在上面执行后在执行依赖安装依赖包命令

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
4 模型下载

我们这里在始智AI模型托管平台上找一个safetensors模型文件。这里我们就以Qwen1.5-7B-Chat项目为案例模型地址 https://huggingface.co/Qwen/Qwen1.5-7B-Chat/tree/main#/


模型文件下载到本地


3.5 模型转换

目前llama.cpp已支持.safetensors文件以及huggingface格式.bin转换为GGUF的FP16格式

我们执行如下脚本实现模型格式转换

python convert-hf-to-gguf.py --outfile F:\AI\GGUF\\Qwen1.5-7B-Chat.GGUF F:\\AI\\Qwen1.5-7B-Chat


模型开始转换,大概几分钟后模型转换完成


我们查找模型转换后文件输出F:\AI\GGUF


已经生成的后缀名称gguf文件格式了。

4模型测试

4.1 Jan工具测试

通过以上步骤我们就将 safetensors格式模型文件转换gguf文件格式的模型文件了,下面我们以Jan工具加载模型测试。关于Jan 软件使用和安装这里就不做详细介绍了,感兴趣小伙伴可以官方搜索,我这里顺便提一下它的下载链接地址https://github.com/janhq/jan/releases

打开jan

这里因为我电脑显卡12GB显存,前面Qwen1.5-7B-Chat可能运行不了,我们这里测试的时候使用1.8模型

点开jan 设置计入模型列表页面

我们这里是导入我们转换模型,所以点击右上角“import Model”


设置完成后,我们进入聊天对话


通过以上方式我们验证了模型转换后是可以运行的。

4.2 ollama 测试

这里我们需要编写Modelfile

FROM ./qwen1.5-1.8b-chat.ggufTEMPLATE """{{ if .System }}<|im_start|>system{{ .System }}<|im_end|>{{ end }}<|im_start|>user{{ .Prompt }}<|im_end|><|im_start|>assistant"""PARAMETER stop "<|start_header_id|>"PARAMETER stop "<|end_header_id|>"PARAMETER stop "<|eot_id|>"PARAMETER stop "<|reserved_special_token"

我们启动本地ollama 检查一下目前是否qwen1.5-1.8b-chat 模型


上面截图是没有的。

然后再模型当前目录下执行如下命令

ollama create qwen1.5-1.8b-chat -f Modelfile


我们加载模型进行对话聊天


通过以上方式ollama也实现了我们模型转换后模型运行。

总结:GGUF 模型是一种二进制模型文件格式,专为在CPU上快速加载和保存模型而设计。我们通过以上方式就能够体会最新模型,而不需要依赖别人制作好的gguf 文件格式模型了。因为windows电脑上make 支持不是很好。量化部分这块没有做介绍,感兴趣的小伙伴可以持续关注,我们下个文章会给大家介绍这块。

标签 魔兽世界模型升级