使用llama.cpp量化模型

文章目录

    • 概要
    • 整体实验流程
    • 技术细节
    • 小结

概要

大模型量化是指在保持模型性能尽可能不变的情况下,通过减少模型参数的位数来降低模型的计算和存储成本。本次实验环境为魔搭社区提供的免费GPU环境(24G),使用Llama.cpp进行4bit量化可以大幅减少大语言模型的内存占用,并提高推理效率。本次采用的模型为前一篇博客所写的基准模型与LoRA微调后的合并模型。

整体实验流程

  1. 由于基准模型较大就直接在服务器上下载并上传LoRA参数合并。

    连不上huggingface,就用的魔搭社区的模型。
    
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
from modelscope import snapshot_download
#模型下载 
model_dir = snapshot_download('ChineseAlpacaGroup/llama-3-chinese-8b-instruct-v3')
tokenizer = AutoTokenizer.from_pretrained(model_dir)
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", torch_dtype=torch.float16)!pip install -q peft==0.3.0
from peft import PeftModel
# 载入预训练的 LoRA 模型
model_lora = PeftModel.from_pretrained(model,'lora',torch_dtype=torch.float16
)
# 合并和卸载模型
model_lora = model_lora.merge_and_unload()
# 保存模型
model_lora.save_pretrained('ddd/conbine')
tokenizer.save_pretrained('ddd/conbine')
  1. 下载Llama.cpp,用的github的。并make编译,接下来的代码部分均在Linux终端上操作。
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

在这里插入图片描述
make过程比较久,耐心等待一会。
在这里插入图片描述

  1. 模型文件类型为safetensors,需要将其转换成gguf格式,如果本身是gguf则跳过这一步。

    标记出来的这个三个为接下来使用到的文件或者文件夹。
    

在这里插入图片描述

python convert_hf_to_gguf.py  /原模型路径/     --outfile  ./输出路径/gguf格式文件名.gguf
python convert_hf_to_gguf.py  ../ddd/conbine/ --outfile  ./models/ggml-8b-f16.gguf

在这里插入图片描述
加载完后得到一个ggml-8b-f16.gguf的文件,大小为16.1G。

  1. 接下来开始量化操作,可以量化到8位,也可以4位,我就采用的4位。
./llama-quantize ./新模型路径/新模型名.gguf  ./输出路径/4位gguf格式文件名.gguf Q4_K_M 采用4位  如果8位就Q8_K_M
./llama-quantize ./models/ggml-8b-f16.gguf      ./models/ggml-8b-Q4.gguf         Q4_K_M

在这里插入图片描述
这个加载时间也久,加载完后得到一个ggml-8b-Q4.gguf文件,大小只有4685MB。

  1. 量化完成了部署试一下。
这里有很多参数设置比如top_k啥的,可以百度一下。如下图所示。
./llama-cli -m ./models/ggml-8b-Q4.gguf -c 512 -b 64 -n 256 -t 12 --repeat_penalty 1.0 --top_k 20 --top_p 0.5 --color -i -r "助手:" -f prompts/chat-with-baichuan.txt

在这里插入图片描述
结果展示:这个结果不太好,之前微调的模型还有很多问题,这里只是给大家演示一下。
在这里插入图片描述

技术细节

  • 如果是用的官方的Llama.cpp有时候需要注意库是否有更新,命令不正确可以去看看github是不是命令改了。

小结

Llama.cpp 是一个轻量级的C++库,旨在帮助用户在资源受限的环境中高效地运行大型语言模型。

  • 轻量级:Llama.cpp设计简单,代码库小,易于理解和修改,适合在嵌入式设备或移动设备上运行。

  • 高效:通过优化的内存管理和计算,Llama.cpp能够在性能有限的硬件上高效运行大模型。

  • 跨平台:支持多种操作系统,包括Linux、Windows和MacOS。

  • 量化支持:内置了对模型进行量化的支持,如4bit、8bit等,能够显著降低内存使用和计算需求。

  • 易用性:提供了简单的API,用户可以方便地加载模型并进行推理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/379033.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端书籍翻页效果

目录 前端书籍翻页效果前言代码示例创建模板页面css样式编写js代码 结论 前端书籍翻页效果 前端实现翻书效果,附带vue源码 源码下载地址 前言 实际业务开发中,有时候会遇到需要在前端页面内实现翻书效果的需求,本篇文章就为大家介绍如何使…

N Puzzle (数字推盘游戏)

N Puzzle [数字推盘游戏] 1. 15 Puzzle2. N PuzzleReferences puzzle /ˈpʌzl/:n. 谜,智力游戏,疑问,不解之谜,令人费解的事 vt. 迷惑,使困惑1. 15 Puzzle https://en.wikipedia.org/wiki/15_puzzle The…

C#开发:Git的安装和使用

一、安装git 二、如何克隆代码? 1.找到某个本地目录,右键-gitbash 2. 输入以下命令(红色是地址,在gitlab获取或联系管理员获取,下图为复制地址的方式): git clone http://xxxxxxxxx.git 输入帐…

MySQL双主双从实现方式

双主双从(MM-SS) 前言 避免单一主服务器宕机,集群写入能力缺失 从 1 复制 主1 ,从 2 复制 主 2 主 1 复制 主 2,主 2 复制主 1 也就是 主 1 和主 2 互为主从。主1主2互为主从, 是为了以下情景&#xff0c…

C#字符串基本操作

1、代码 //1、创建字符串(获取长度)string str "Hello, World!";Console.WriteLine($"string:{str},length:{str.Length}");//2、字符串连接string str1 "Hello, ";string str2 "World!";Console.WriteLine…

datahub安装部署

作者:恩慈 背景:由于某客户需要建立sparksql的血缘关系,于是提出了datahub,由于网上关于datahub资料较少,因此这里做以记录。 datahub作为一个元数据管理平台,可以对数据资产进行有效的组织,还…

HarmonyOS 开发者联盟高级认证最新题库

本篇文章包含 Next 版本更新后高级认证题库中95%的题目。 答案正确率 50-60%,答案仅做参考。 请在考试前重点看一遍题目,勿要盲目抄答案。 欢迎在评论留言正确答案和未整理的题目。 1、下面关于方舟字节码格式PREF_IMM16_v8_v8描述正确的是 16位前缀操作…

中间件的理解

内容来源于学习网站整理。【一看就会】什么是前端开发的中间件?_哔哩哔哩_bilibili 每日八股文~白话说mq,消息中间件_哔哩哔哩_bilibili 例如: 1)两个人打电话,中间的通信网络就是中间件。 2)菜鸟驿站&…

Java.Net.UnknownHostException:揭开网络迷雾,解锁异常处理秘籍

在Java编程的浩瀚宇宙中,java.net.UnknownHostException犹如一朵不时飘过的乌云,让开发者在追求网络畅通无阻的道路上遭遇小挫。但别担心,今天我们就来一场说走就走的探险,揭秘这个异常的真面目,并手把手教你几招应对之…

巧用通义灵码助力护网面试

前言 前几年护网还算是一个比较敏感的话题,但是随着近段时间的常态化开始,护网行动也是逐渐走进了大众的视野,成为了社会各界共同关注的安全盛事。本篇也是受通义灵码备战求职季活动的启发,结合近期要开始的护网行动&#xff0c…

每日一题,力扣leetcode Hot100之128. 最长连续序列

题目理解: 从示例1可以看出简单的连续数字就算,从示例2可以看出当有重复数字时,是不算长度的 解法一: 第一个想到的解法,就是对nums排序,然后双层循环遍历进行判断,当前一个和后一个相减等于…

Yolov8网络结构学习

详解YOLOv8网络结构/环境搭建/数据集获取/训练/推理/验证/导出/部署 深入解析YOLOv8:网络结构与推理过程 YOLO? You Know! --YOLOV8详解 一:yolov8总体结构 1.Backbone:它采用了一系列卷积和 反卷积层只来提取特征,同时也使用了残差连接和…

广联达Linkworks ArchiveWebService XML实体注入漏洞复现

0x01 产品简介 广联达 LinkWorks(也称为 GlinkLink 或 GTP-LinkWorks)是广联达公司(Glodon)开发的一种BIM(建筑信息模型)协同平台。广联达是中国领先的数字建造技术提供商之一,专注于为建筑、工程和建筑设计行业提供数字化解决方案。 0x02 漏洞概述 广联达 LinkWorks…

小程序图片下载保存方法,图片源文件保存!

引言 现在很多时候我们在观看到小程序中的图片的时候,想保存图片的原文件格式的话,很多小程序是禁止保存的,即使是让保存的话,很多小程序也会限制不让保存原文件,只让保存一些分辨率很低的,非常模糊的图片…

【.NET全栈】ASP.NET开发web应用——ASP.NET中的样式、主题和母版页

文章目录 前言一、在ASP.NET中应用CSS样式1、创建CSS样式(1)内联样式(2)内部样式表(3)外部样式表 2、应用CSS样式(1)菜鸟教程-简单例子(2)菜鸟教程-用户界面&…

详解:adobe国际认证有多少种

Adobe国际认证,作为全球公认的数字媒体和创意设计技能认证,涵盖了多个专业领域和软件应用。这一认证体系为专业人士提供了展示自己技能水平的平台,并帮助他们在职场中脱颖而出。那么,Adobe国际认证到底有多少种呢? Ado…

【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)

目录: 目录: 一、 Base64概述和应用场景 1.1 概述 1.2 应用场景 二、Base16 2.1 Base16编码 2.2 Base16编解码 三、Base64 四、OpenSSL BIO接☐ 4.1 Filter BIOs: 4.2 Source/Sink BIOs: 4.3 应用场景: 4.4 具体使用&…

从挑战到实战!TDengine 新能源行业研讨会要点回顾

近年来,随着全球对可再生能源需求的不断增长,新能源行业迎来了前所未有的发展机遇。然而,伴随着行业的快速发展,海量数据的管理和高效利用成为了行业面临的重要挑战。如何通过先进的数据管理技术提升新能源系统的效率和可靠性&…

前端vue3 实现pdf 生成的 类插件

前端 PDF 打印插件,基于 jspdf 和 html2canvas 开发 jspdfhtml2canvas 安装依赖 jspdf、html2canvas npm i jspdf html2canvas直接上代码 hooks

Hadoop3:MR程序的数据倾斜问题处理

一、数据倾斜 什么是数据倾斜? 学过Redis集群的都知道数据倾斜这个问题。 就是大量数据,分配不均匀的现象。 二、MR数据倾斜 1、怎么判断出现数据倾斜? 数据频率倾斜——某一个区域的数据量要远远大于其他区域。 数据大小倾斜——部分记…