引言

本文继续研究 LLaMA-Factory 微调数据的流程,侧重于微调结果与模型导出。

数据集准备

首先参考 LLaMA-Factory 核心开发者的文章[1],下载用于微调的公开的商品文案数据集 AdvertiseGen。

下载地址:https%3A//cloud.tsinghua.edu.cn/f/b3f119a008264b1cabd1/%3Fdl%3D1

其总共包含了10w+条这样的数据:

{"content": "类型#上衣*版型#h*材质#蚕丝*风格#复古*图案#条纹*图案#复古*图案#撞色*衣样式#衬衫*衣领型#小立领", "summary": "小女人十足的条纹衬衣,缎面一点点的复古,还有蓝绿色这种高级气质复古色,真丝材质,撞色竖条纹特别的现代感味道,直h型的裁剪和特别的衣长款式,更加独立性格。双层小立领,更显脸型。"}

LLaMA-Factory 内置了格式映射转换,因此实际上不需要像前文那样手动编写脚本进行格式转换,只需要在dataset_info.json里面按照如下方式进行注册:

"adgen_local": {"file_name": "AdvertiseGen_train.json","columns": {"prompt": "content","response": "summary"}
}

微调过程及结果测试

参数设置主要调节以下内容:

  • 预热步数从0上调到20
  • 训练轮数从3上调到5
  • 最大样本数从100000下调到1000
  • 验证集比例从0上调到0.1

这样调整意味着不会将所有的数据进行训练,训练的数据总数为1000 * 0.9 = 900条。

使用 DeepSeek-R1-7B 模型进行 LoRA 微调,差不多10分钟训练完成。

训练曲线

从结果看 loss 还是比较大,正常情况 < 1 会比较好,说明还有收敛空间。

显存占用情况

下面加载模型进行测试,微调前模型问答效果如下

微调前模型问答效果

选择检查点,载入训练完的 LoRA 适配器,

微调后模型问答效果如下:

微调后模型问答效果

看上去,微调完的有点意思,但效果不是特别明显。微调前模型会产生“可能”之类的不确定表述,微调之后模型会更“自信”。

结果导出到Ollama

后面我又用 easy dataset做了一个几十条规模的小数据集,尝试在DeepSeek-R1-32B的模型基础上微调,效果不达预期,这里就不放结果,只讨论如何进行模型导出。

首先在webui的export菜单中,将模型进行导出。需注意,使用 bf16 精度格式无法直接导出量化的模型版本。

同时,LoRA层会合并到原始模型中,大约会占据1B左右的参数。

之后安装 GGUF 库,用于模型的格式转换。

通过官方仓库安装,版本最新:

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp/gguf-py
pip install --editable .

将模型转换成 gguf 格式:

python convert_hf_to_gguf.py /home/zxy/code/LLaMA-Factory/output_model

转换时,参考其输出日志,可发现其会自动将某些层变成fp16和fp32。

INFO:hf-to-gguf:gguf: loading model part 'model-00001-of-00014.safetensors'
INFO:hf-to-gguf:token_embd.weight,         torch.bfloat16 --> F16, shape = {5120, 152064}
INFO:hf-to-gguf:blk.0.attn_norm.weight,    torch.bfloat16 --> F32, shape = {5120}
INFO:hf-to-gguf:blk.0.ffn_down.weight,     torch.bfloat16 --> F16, shape = {27648, 5120}
INFO:hf-to-gguf:blk.0.ffn_gate.weight,     torch.bfloat16 --> F16, shape = {5120, 27648}
INFO:hf-to-gguf:blk.0.ffn_up.weight,       torch.bfloat16 --> F16, shape = {5120, 27648}
INFO:hf-to-gguf:blk.0.ffn_norm.weight,     torch.bfloat16 --> F32, shape = {5120}
INFO:hf-to-gguf:blk.0.attn_k.bias,         torch.bfloat16 --> F32, shape = {1024}

转换完成后,会在模型原路径下得到gguf文件。

用 ollama 注册模型,执行以下命令,my_deepseek_r1_32b为模型名称。

ollama create my_deepseek_r1_32b -f /home/zxy/code/LLaMA-Factory/output_model/Modelfile

ollama会将模型再拷贝一份到其存储路径中。

注册完成后,就可以通过ollama list看到自己创建的模型。

导出为fp16+fp32的混合精度,比原本从ollama上拉取的int4精度大不少。

结论

实测发现,模型微调的主要功能是增强模型在某方面的能力。

如果通过信息查询对去微调模型,效果并不会很理想,RAG更加适合去查询信息。

当数据集较大时,模型微调时间可能会很长。本文中,选取900条数据进行微调,大约耗时10分钟。如果选取全部10w+条数据,估计需要耗时会在16小时左右。

如果微调参数量更大的模型,可能花费的时间会以天计。

此外,由于 LLaMA-Factory 封装得很好,实践过程中遇到的报错很难通过调代码解决,后面考虑研究vllm,探寻模型微调更为底层的相关原理。

参考资料

[1] LLaMA-Factory QuickStart:https://zhuanlan.zhihu.com/p/695287607

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

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

相关文章

3085. 成为 K 特殊字符串需要删除的最少字符数

3085. 成为 K 特殊字符串需要删除的最少字符数 给你一个字符串 word 和一个整数 k。 如果 |freq(word[i]) - freq(word[j])| < k 对于字符串中所有下标 i 和 j 都成立&#xff0c;则认为 word 是 k 特殊字符串。 此处&#xff0c;freq(x) 表示字符 x 在 word 中的出现频…

分布式系统中的 Kafka:流量削峰与异步解耦(二)

Kafka 在分布式系统中的应用案例 电商订单系统 在电商领域&#xff0c;订单系统是核心业务模块之一&#xff0c;涉及多个复杂的业务环节和系统组件之间的交互。以常见的电商购物流程为例&#xff0c;当用户在电商平台上下单后&#xff0c;订单创建服务会首先接收到用户的订单…

从事登高架设作业需要注意哪些安全事项?

从事登高架设作业&#xff08;如脚手架搭设、高空维修、外墙清洗等&#xff09;属于高风险特种作业&#xff0c;必须严格遵守安全规范。以下是关键安全注意事项&#xff0c;涵盖作业前准备、作业中操作、应急处理三大环节&#xff0c;符合国家《高处作业安全技术规范》&#xf…

RA4M2开发IOT(6)----涂鸦模组快速上云

RA4M2开发IOT.6--涂鸦模组快速上云 概述视频教学样品申请硬件准备参考程序涂鸦官网链接创建一个项目选择对应产品产品基本配置添加标准功能APP界面配置硬件选择产品配置硬件详情PCB原理图涂鸦调试文件下载进入调试涂鸦模块串口协议心跳检测查询产品信息查询工作模式AP配网APP链…

AI时代SEO关键词革新

内容概要 在人工智能&#xff08;AI&#xff09;技术快速发展的背景下&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;关键词策略正经历根本性变革。本文将系统阐述AI如何重塑关键词研究、优化及效果评估的全流程。具体而言&#xff0c;首先解析智能研究方法在挖掘用户意…

JavaEE初阶第三期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(一)

专栏&#xff1a;JavaEE初阶起飞计划 个人主页&#xff1a;手握风云 目录 一、认识线程 1.1. 概念 1.2. 为什么要使用线程 1.3. 进程和线程的关系 1.4. 多线程模型 二、多线程的创建 2.1. 继承Thread类 2.2. 实现Runnable接口 2.3. 匿名内部类 2.4. lambda表达式 一、…

【StarRocks系列】建表优化

目录 一、数据模型选择 (核心优化) 二、分区与分桶策略 (数据分布优化) 三、字段类型与压缩 四、索引策略 五、高级特性应用 六、建表示例&#xff08;关键优化整合&#xff09; 参考官网 优化性能 | StarRocks 在 StarRocks 中创建表时&#xff0c;合理的表设计是性能优…

linux-vim编辑器

linux-vim编辑器 前言一、命令模式1. 跳转功能2. 文本编辑3. 模式切换 二、输入模式1. 进入输入模式2. 快捷键 三、末行模式1. 进入末行模式2. 文件操作3. 查找与替换4. 行操作 四、替换模式五、可视模式1. 进入可视模式2. 文本操作 六、相关配置 前言 vim - Vi IMproved, a p…

SQL关键字三分钟入门: 表结构管理与分区设计。(ALTER、MODIFY、CHANGE、DEFAULT、VALUES、LESS THAN、RANGE)

前面我们已经学习了如何查询数据&#xff08;SELECT&#xff09;、筛选数据&#xff08;WHERE&#xff09;等操作。现在我们要进入数据库的另一个重要领域 —— 表结构管理与分区设计。 本文带你快速认识以下关键字&#xff1a; ✅ ALTER✅ MODIFY✅ CHANGE✅ DEFAULT✅ VALU…

深度剖析:RTTI轻量框架实现原理与架构(C++ 17 高级编程)

&#x1f680; C RTTI反射系统深度设计文档 &#x1f30c; 核心架构图 #mermaid-svg-aWkaWoFklq1ylap6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-aWkaWoFklq1ylap6 .error-icon{fill:#552222;}#mermaid-svg-a…

03-D3.js SVG text标签​

Data Visualization D3.js • SuperHiLearn how to create interactive, engaging experiences using HTML, CSS, SVG and Javascript.https://www.superhi.com/catalog/data-visualization-with-d3 text - SVG&#xff1a;可缩放矢量图形 | MDNtext元素定义了一个由文字组成…

Python 使用Gitlab Api

代码 REST API 见自带帮助文档 python 安装python-gitlab pip install --upgrade python-gitlab使用API 参考&#xff1a;https://python-gitlab.readthedocs.io/en/stable/api-usage.html import gitlab# anonymous read-only access for public resources (GitLab.com…

中医体质识别:理论、方法与应用的简要综述

中医体质识别&#xff1a;理论、方法与应用的简要综述 摘要 中医体质识别是中医“治未病”及个性化诊疗的关键环节。本文系统阐述中医体质识别&#xff0c;涵盖理论基础、常见体质类型、识别方法、现代技术应用及临床实践。中医体质理论源远流长&#xff0c;《黄帝内经》奠定…

稀疏表原理及应用场景

1 概述 稀疏表&#xff08;Sparse Table&#xff0c;ST&#xff09;是一种用于高效解决 静态区间查询&#xff08;Range Query&#xff09; 问题的数据结构&#xff0c;主要用于 可重复贡献问题&#xff08;Idempotent Range Queries&#xff09;&#xff0c;例如区间最小值&a…

【深度学习与机器学习的区别】从本质到应用的全景对比

目录 前言 一、三者关系&#xff1a;深度学习是机器学习的子集 1.1 概念关系 1.2 类比理解&#xff1a;动物 vs 哺乳动物 1.3 举个例子更清楚 1.4 为什么“机器学习 ≠ 深度学习”&#xff1f; 1.5 最容易搞混的地方 二、核心区别总览&#xff08;对比表&#xff09; …

Masscan常用命令详解

一、工具介绍 Masscan是一款开源、高速的网络端口扫描工具&#xff0c;设计目标是实现最快的扫描速度。它能够在极短的时间内完成大规模的网络扫描&#xff0c;适用于互联网级别的扫描任务。它采用异步传输和自定义TCP/IP协议栈技术&#xff0c;最快可实现每秒160万数据包的扫…

STM32的内部RC与外部晶振电路

内部RC是“能用”&#xff0c;外部晶振是“用得准”。 一、STM32芯片内部的“晶振电路”是什么&#xff1f; STM32内部确实集成了两个RC&#xff08;电阻-电容&#xff09;振荡器&#xff1a; HSI&#xff08;高速内部振荡器&#xff09;&#xff1a;通常8MHz&#xff0c;精…

为OneCode 开发TRea 开发插件,从环境搭建到生态融合

作为 AI 原生开发环境&#xff0c;TRea 的插件体系支持开发者基于其核心能力&#xff08;如自然语言代码生成、AI 代码分析&#xff09;进行功能扩展。本文以开发一个 "OneCode 组件生成插件" 为例&#xff0c;详解如何通过 TRea 开放接口实现自定义功能&#xff0c;…

Spring JDBC配置与讲解

目录 一、Spring JDBC概述1、Spring JDBC需要配置的依赖2、Spring配置项文件配置 二、Spring JDBC的使用1、Spring JDBC的增加操作2、Spring JDBC的修改操作3、Spring JDBC的删除操作4、Spring JDBC的查询操作 三、Spring JDBC的事务1、xml的形式进行事务2、Transactional注解 …

【AI智能体】Spring AI MCP 服务常用开发模式实战详解

目录 一、前言 二、MCP 介绍 2.1 MCP是什么 2.2 MCP 核心特点 2.3 Spring AI MCP 介绍 2.3.1 Spring AI MCP架构 2.3.2 Spring AI MCP分层说明 2.4 两种模式介绍 三、本地开发SSE模式 3.1 搭建mcp-server 3.1.1 导入工程核心依赖 3.1.2 添加配置文件 3.1.3 提供两个…