当前位置: 首页 > news >正文

【大模型微调】6.模型微调实测与格式转换导出

引言

本文继续研究 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.lqws.cn/news/486181.html

相关文章:

  • 微服务中分布式事务:Saga模式、TCC模式与消息队列
  • MySQL学习(1)——基础库操作
  • 【时时三省】(C语言基础)指针变量例子
  • GO 语言学习 之 helloWorld
  • 开关电源:BUCK和BOOST
  • CentOS 7.9 系统安装 Percona XtraBackup(含 xtrabackup 和 innobackupex 工具)的详细步骤
  • webpack+vite前端构建工具 - 9 webpack技巧性配置
  • 柔性PZT压电薄膜在静态力与应力实时微测量方面的应用
  • uni-app项目实战笔记23--解决首次加载额外图片带来的网络消耗问题
  • Linux(3)
  • [论文阅读] 软件工程 + 教学 | 软件工程项目管理课程改革:从传统教学到以学生为中心的混合式学习实践
  • 《计算机网络:自顶向下方法(第8版)》Chapter 8 课后题
  • GetX 实现 MVVM 架构, 高效 路由管理 和 状态管理
  • Git使用总结
  • 【C++开发】CMake构建工具
  • Python打卡DAY34
  • leetcode:21. 合并两个有序链表
  • 系列一、windows中安装RabbitMQ
  • 【Comsol教程】如何求解指定范围的积分 或 在积分中去除奇异点/异常值
  • Spring JDBC配置与讲解
  • 逆向某物 App 登录接口:还原 newSign 算法全流程
  • C++ - 标准库之 <string> npos(npos 概述、npos 的作用)
  • Docker Desktop 4.42集成的MCP工具包
  • 【读代码】谷歌Agent-to-Agent (A2A) 协作框架深度解析
  • 微处理器原理与应用篇---常见基础知识(4)
  • 【教程】不同架构(armv7l等)下载Miniconda安装包
  • 65-Oracle Undo机制
  • Sass、Less、PostCSS
  • 读书笔记:《八次危机》
  • Windows防火墙指南大全:安全红线与科学替代方案