llama3 微调教程之 llama factory 的 安装部署与模型微调过程,模型量化和gguf转换。
本文记录了从环境部署到微调模型、效果测试的全过程,以及遇到几个常见问题的解决办法,亲测可用(The installed version of bitsandbytes was compiled without GPU support. NotImplementedError: Architecture ‘LlamaForCausalLM’ not supported!,RuntimeError: Internal: could not parse ModelProto from E:\my\ai\llama3\models\my-llama-3-8b-0517\tokenizer.json)
一 安装开发环境
1 创建环境
首先请确报你已经安装好了conda工具
在命令行中键入如下指令创建python环境
conda create -n llama_factorypython=3.10 -y
创建成功后切换到新环境
conda activate llama_factory
安装cuda pytorch等核心工具
conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=11.8 -c pytorch -c nvidia
pip3 install torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install llmtuner
2 下载可微调的模型
- 创建用于存放模型的文件夹,取名为models
- 将llama3 8b的模型文件项目下载到此处。下载时间稍微有点长,请耐心等待
git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git
3 安装llama factory
- 回到上层目录,将llama factory源代码拉到此处
git clone https://github.com/hiyouga/LLaMA-Factory.git - 完成后进入项目目录,
cd LLaMA-Factory - 安装环境依赖
pip install -e .[metrics,modelscope,qwen]
pip install -r requirements.txt --index-url https://mirrors.huaweicloud.com/repository/pypi/simple
4 运行llama factory
- 回到上层目录,修改下面的代码,将刚才下载的模型目录替换进来,然后把这一堆代码复制后,在命令行中敲入
python src/web_demo.py
–model_name_or_path E:\my\ai\llama3\models\Meta-Llama-3-8B-Instruct(模型目录)
–template llama3
–infer_backend vllm
–vllm_enforce_eager - 如果看到下面这个图就说明成功了。复制里面的端口号组成地址:localhost:7860,复制到浏览器打开


成功打开训练页面。
如果运行失败,提示The installed version of bitsandbytes was compiled without GPU support.,那说明你的环境出现了问题。请查看这篇文章解决The installed version of bitsandbytes was compiled without GPU support ,亲测可用
二 数据微调
1 制作训练数据
进入llama-factory/data目录
新建一个json文件起名为my_data_zh.json

按下面的格式填入你的训练数据后保存即可,条数不限哦
数据集参数说明:
instruction:该数据的说明,比如“你是谁”这种问题就属于“自我介绍”,“你吃屎么”这种问题属于“业务咨询”
input:向他提的问题
output:他应该回答的内容
[{"instruction": "自我介绍", // 问题说明"input": "你是谁", // 问题"output": "我是奇葩大人最忠实的仆人,奇葩大人万岁万万岁" // 答案},{"instruction": "自我介绍","input": "谁制造了你","output": "llama给与我骨骼,奇葩大人赋予我灵魂,你就是我的再生父母梦中爹娘,我愿意匍匐在你脚下奉你为神明"}
]
完成后保存
2 注册数据集
首先找到数据集的管理文件,打开llamafactory/data目录下的dataset_info.json文件

这个文件里面放的是所有数据集的名称和对应的数据文件名,里面已经存在的是factory自带的数据集

我们在这里新加一条数据集,把刚才创建的文件名搞进去:
"a_my_data": { "file_name": "my_data_zh.json"},

别忘了保存好。 接下来回到管理页面,看看是否成功添加
打开浏览器地址:http://localhost:7860,按f5刷新一下先
找到数据集输入框点击


已经看到了我们的自定义数据集,点击即可选定。
如果想看具体内容,可以点击右侧的预览数据集按钮,查看数据是否有问题。

3 开始微调训练
回到浏览器的管理页面:http://localhost:7860,如图所示这是我们最需要关心的几个参数设置

模型名称:由于我们在上文下载的模型是llama3-8b,所以这里要选择同名模型llama3-8b。这里将决定采用何种网络结构解析模型。
模型路径:这里就是上文下载的模型文件目录。
微调方法:这里可选择lora、full、freeze三种模式,普通用户请选择lora。
full:全量模型训练。该模型将消耗大量显存。以8B模型为例,8b等于80亿参数,占用显存约8*2+8 = 24G,所以普通显卡就不要考虑这个模式了
lora:微调模型训练:这个占用显存较小,经测试4080显卡可以跑起来
数据集:因为我们刚才注册了自己的数据,所以这里点框后就会弹出数据列表,选中我们的自定义数据即可。注意这里允许数据集多选。

其他设置视你的实际情况而定,最主要的设置已经完成了。
接下来拉到页面最下方,点击“开始”按钮就可以开始训练了

可以看到控制台中已经开始跑起来了

完成训练后,我们回到页面上方,点击“刷新适配器”按钮,然后点击“适配器路径”就可以看到我们刚刚训练好的记录了,点击选中。

回到上级目录,创建用于存放模型的文件夹,起名为my-llama-3-8b

回到管理页面,设置“最大分块大小”为4,这个选项会把过大的模型分割为几个文件,我们设置每个文件最大为4GB
设置“导出设备”为“cuda”,这个选项决定你的模型会使用什么硬件资源。如果是在高性能显卡主机上使用建议选择cuda
设置“导出目录”为刚才我们新建的文件夹。

最后点击“开始导出”按钮等待导出结束


4 合并模型
为了让ollama可以执行该模型,我们需要量化模型,对模型进行合并转换。最终导出扩展名为gguf的模型文件
首先下载ollama源代码
git clone https://github.com/ollama/ollama.git
然后下载llama.cpp源代码
git clone https://github.com/ggerganov/llama.cpp.git
如果上面那个下不了就用这个:git clone https://github.com/Rayrtfr/llama.cpp
进入llama.cpp目录,cd llama.cpp
接下来就可以对模型进行转转换了
#注释: python convert.py --outfile 要导出的文件地址.gguf 微调后的模型来源目录
python convert.py --outfile E:\my\ai\llama3\models\my-llama-3-8b-0517\my8b.gguf E:\my\ai\llama3\models\my-llama-3-8b-0517
注意:是convert.py不是convert-hf-to-gguf.py。我相信这也是你能来看我这篇教程的原因。网上大部分都教大家用convert-hf-to-gguf.py,但这个会报错NotImplementedError: Architecture ‘LlamaForCausalLM’ not supported!,该脚本已经不支持llama的最新组件了。一定要用convert.py
如果执行上面指令报错RuntimeError: Internal: could not parse ModelProto from E:\my\ai\llama3\models\my-llama-3-8b-0517\tokenizer.json

就在指令后面加上 --vocab-type hfft 就可以解决问题开始转换模型
python convert.py --outfile E:\my\ai\llama3\models\my-llama-3-8b-0517\my8b.gguf E:\my\ai\llama3\models\my-llama-3-8b-0517 --vocab-type hfft

当看到模型输出地址字符,就说明已经成功转换了。
5 模型量化
说明一下什么是量化

我们看别人弄好的模型后面都有个q的字符,q表示存储权重(精度)的位数
q2、q3、q4… 表示模型的量化位数。例如,q2表示2位量化,q3表示3位量化,以此类推。量化位数越高,模型的精度损失就越小,模型的磁盘占用和计算需求也会越大。
模型量化可以帮助我们控制模型的精度、计算量和模型文件大小。比如之前我导出的模型约16G,对于一个7B的模型来说这个文件太大运算量太高太不方便了,一般家用电脑根本就跑不起来呀。。我们在这里可以通过量化手段降低模型精度,从而降低模型的性能消耗和占用容量。
下面我们开始量化操作。首先在llama.cpp目录下创建一个名为build的目录
cd llama.cpp
mkdir build
cd build
然后使用cmake构建量化工具
cmake ..
cmake --build . --config Release

构建完成后,进入到llama.cpp\build\bin\Release目录下cd \build\bin\Release

我们看到该有的都有啦,接下来通过命令行使用quantize工具来量化模型
# 注释:quantize 源文件路径 导出文件路径 量化参数
quantize E:\my\ai\llama3\models\my8b.gguf E:\my\ai\llama3\models\my8b_q4.gguf q4_0
接下来就是漫长的等待了

6 测试训练结果
使用ollama来测试我们自己微调的模型。
ollama run 注册的模型名
如果你还没部署好ollama请看这个文章ollama的本地部署
将模型导入ollama的步骤请看我这篇短文ollama 导入gguf模型
相关文章:
llama3 微调教程之 llama factory 的 安装部署与模型微调过程,模型量化和gguf转换。
本文记录了从环境部署到微调模型、效果测试的全过程,以及遇到几个常见问题的解决办法,亲测可用(The installed version of bitsandbytes was compiled without GPU support. NotImplementedError: Architecture ‘LlamaForCausalLM’ not sup…...
C++三剑客之std::any(二) : 源码剖析
目录 1.引言 2.std::any的存储分析 3._Any_big_RTTI与_Any_small_RTTI 4.std::any的构造函数 4.1.从std::any构造 4.2.可变参数模板构造函数 4.3.赋值构造与emplace函数 5.reset函数 6._Cast函数 7.make_any模版函数 8.std::any_cast函数 9.总结 1.引言 C三剑客之s…...
【C语言】8.C语言操作符详解(2)
文章目录 6.单⽬操作符7.逗号表达式8.下标访问[]、函数调⽤()8.1 [ ] 下标引⽤操作符8.2 函数调⽤操作符 9.结构成员访问操作符9.1 结构体9.1.1 结构的声明9.1.2 结构体变量的定义和初始化 9.2 结构成员访问操作符9.2.1 结构体成员的直接访问9.2.2 结构体成员的间接访问 6.单⽬…...
vivado 物理约束KEEP_HIERARCHY
KEEP_HIERARCHY Applied To Cells Constraint Values • TRUE • FALSE • YES • NO UCF Example INST u1 KEEP_HIERARCHY TRUE; XDC Example set_property DONT_TOUCH true [get_cells u1] IOB Applied To Cells Constraint Values IOB_XnYn UCF Examp…...
Linux 三十六章
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要…...
ntsd用法+安装包
ntsd是一个强大的进程终止软件,除了少数系统进程之外一律杀掉 用法 1.ntsd -c q -p 进程的pid 2.ntsd -c q -pn 进程名 记得解压到System32里面 当然,资源管理器的进程是可以杀的所以也可以让电脑黑屏 同样可以让电脑黑屏的还有taskkill /f /im 进程…...
Nacos 微服务管理
Nacos 本教程将为您提供Nacos的基本介绍,并带您完成Nacos的安装、服务注册与发现、配置管理等功能。在这个过程中,您将学到如何使用Nacos进行微服务管理。下方是官方文档: Nacos官方文档 1. Nacos 简介 Nacos(Naming and Confi…...
Kubernetes集群上的Etcd备份和恢复
在本教程中,您将学习如何在Kubernetes集群上使用etcd快照进行etcd备份和恢复。 在Kubernetes架构中,etcd是集群的重要组成部分。所有集群对象及其状态都存储在etcd中。为了更好地理解Kubernetes,有几点关于etcd的信息是您需要了解的。 它是…...
创建型模式 (Python版)
单例模式 懒汉式 class SingleTon:# 类属性_obj None # 用来存储对象# 创造对象def __new__(cls, *args, **kwargs):# 如果对象不存在,就创造一个对象if cls._obj is None:cls._obj super().__new__(cls, *args, *kwargs)# 返回对象return cls._objif __name__…...
【收录 Hello 算法】9.4 小结
目录 9.4 小结 1. 重点回顾 2. Q & A 9.4 小结 1. 重点回顾 图由顶点和边组成,可以表示为一组顶点和一组边构成的集合。相较于线性关系(链表)和分治关系(树),网络关系(图&am…...
MYSQL数据库基础语法
目录 友情提醒第一章:数据库简述1)数据库简述2)常见的数据库软件3)MySQL数据库安装和连接4)SQL语句分类①DDL(Data Definition)②DML(Data Manipulation)③DQL࿰…...
R实验 参数检验(二)
实验目的:掌握正态分布和二项分布中,功效与样本容量之间的关系;学会利用R软件完成一个正态总体方差和两个正态总体方差比的区间估计和检验。 实验内容: (习题5.28)一种药物可治疗眼内高压,目的…...
【Linux】进程信号及相关函数/系统调用的简单认识与使用
文章目录 前言一、相关函数/系统调用1. signal2. kill3. abort (库函数)4. raise (库函数)5. alarm 前言 现实生活中, 存在着诸多信号, 比如红绿灯, 上下课铃声…我们在接收到信号时, 就会做出相应的动作. 对于进程也是如此的, 进程也会收到来自 OS 发出的信号, 根据信号的不同…...
Spring (14)什么是Spring Boot
Spring Boot是一个开源的Java基础框架,旨在简化Spring应用的创建和开发过程。Spring Boot通过提供一套默认配置(convention over configuration),自动配置和启动器(starters)来减少开发者的开发工作量和配置…...
区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测
区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测 目录 区间预测 | Matlab实现CNN-KDE卷积神经网络结合核密度估计多置信区间多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-KDE卷积神经网络结合…...
Java集合框架全景解读:从源码到实践精通指南
1. Java集合框架简介 在Java中,集合框架是用于存储和处理数据集合的一组类和接口。它提供了一系列的数据结构,比如列表(List)、集(Set)和映射(Map)。这些数据结构为开发者处理数据提…...
Python | Leetcode Python题解之第107题二叉树的层序遍历II
题目: 题解: class Solution:def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:levelOrder list()if not root:return levelOrderq collections.deque([root])while q:level list()size len(q)for _ in range(size):node q.popl…...
H4vdo 台湾APT-27视频投放工具
地址:https://github.com/MartinxMax/H4vdo 视频 关于 H4vdo RTMP lock 屏播放视频工具,可以向目标发送有效载荷,播放目标的屏幕内容。目标无法曹作计算机 使用方法 安装依赖 根据你的操作系统选择一个安装程序 RTMP 服务端 ./rtsp-simple-server.…...
数据结构(树)
1.树的概念和结构 树,顾名思义,它看起来像一棵树,是由n个结点组成的非线性的数据结构。 下面就是一颗树: 树的一些基本概念: 结点的度:一个结点含有的子树的个数称为该结点的度; 如上图&#…...
HTML静态网页成品作业(HTML+CSS)——川西旅游介绍网页(2个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有2个页面。 二、作品演示 三、代…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
