当前位置: 首页 > 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

相关文章:

  • 核心概念解析:AI、数据挖掘、机器学习与深度学习的关系
  • Linux(3)
  • 数学:初步了解什么是“向量”
  • HarmonyOS NEXT端侧工程调用云侧能力实现业务功能
  • 扫雷中的数学原理
  • ToolsSet之:歌词编辑器
  • 【期末速成】编译原理
  • 【期末笔记】高频电子线路
  • 从零开始手写redis(16)实现渐进式 rehash map
  • 云侧工程云函数开发
  • 测试工程师实战:用 LangChain+deepseek构建多轮对话测试辅助聊天机器人
  • Effective C++学习笔记
  • DeepSeek15-揭密模型上下文协议(MCP)
  • [学习] C语言<string.h>中字符串函数全解析
  • java专题漏洞总结 + 靶场练习
  • 开源 python 应用 开发(二)基于pyautogui、open cv 视觉识别的工具自动化
  • 关于程序的基本要素的详细讲解(从属GESP一级内容)
  • 端侧调用云存储实现头像存储
  • 查看shell选项状态命令详解
  • CentOS7.6 yum无法下载
  • 网站大全官网/宜昌网站seo收费
  • 1000学习做网站贵吗/海淀区seo全面优化
  • 怎么问客户做不做网站/黑帽seo技术有哪些
  • 网站推广自己可以做吗/今天的新闻是什么
  • 电脑可以做服务器部署网站吗/先做后付费的代运营
  • 海口网红美食餐厅/aso优化工具