大模型开发实战,使用 LLaMA Factory 微调与量化模型并部署至 Ollama

大模型机器学习数据库

picture.image

向AI转型的程序员都关注公众号 机器学习AI算法工程

LLaMA Factory 是一个开源的全栈大模型微调框架,简化和加速大型语言模型的训练、微调和部署流程。它支持从预训练到指令微调、强化学习、多模态训练等全流程操作,并提供灵活的配置选项和高效的资源管理能力,适合开发者快速定制化模型以适应特定应用场景。下面通过一个简单的示例来展示如何使用 LLaMA Factory 进行模型微调并部署至 Ollama。

环境搭建与配置

克隆 LLaMA Factory 的 Git 仓库(https://github.com/hiyouga/LLaMA-Factory),创建 Python 虚拟环境并安装依赖。

  
git clone https://github.com/hiyouga/LLaMA-Factory.git  
cd LLaMA-Factory  
pip install -e ".[torch,metrics,gptq]"  

安装完成后,在 Python 终端执行以下代码,检查 PyTorch 是否为 GPU 版本,如果不是则需要手动安装。

  
import torch  
print(torch.\_\_version\_\_)    # '2.6.0+cu126'  
print(torch.cuda.is\_available())    # True  

在命令行中使用以下命令运行 LLaMA Factory。

  
llamafactory-cli webui  

picture.image

数据集准备

微调数据集使用“弱智吧数据集”(https://github.com/FunnySaltyFish/Better-Ruozhiba),从百度弱智吧上收集的一系列帖子,旨在启发人们娱乐性使用 ChatGPT 等 LLM 时的思路。微调模型使用阿里的 Qwen2.5:7B 模型。

  
// 数据集示例  
[  
{  
"instruction":"只剩一个心脏了还能活吗?",  
"output":"能,人本来就只有一个心脏。"  
},  
{  
"instruction":"爸爸再婚,我是不是就有了个新娘?",  
"output":"不是的,你有了一个继母。\"新娘\"是指新婚的女方,而你爸爸再婚,他的新婚妻子对你来说是继母。"  
}  
]  

数据集和模型可以在魔塔社区(https://www.modelscope.cn)上搜索并下载,下载可以使用魔塔社区提供的 SDK 或者 Git 命令行下载。

picture.image

下面的命令可以直接下载弱智吧数据集和 Qwen2.5:7B 模型。

  
git clone https://www.modelscope.cn/datasets/AI-ModelScope/Better-Ruozhiba.git    # 弱智吧数据集  
git clone https://www.modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git    # Qwen2.5:7B 模型  

下载好的数据集还需要在 LLaMA Factory 中进行配置。LLaMA Factory 支持 Alpaca 和 ShareGPT 两种数据格式,分别适用于指令监督微调和多轮对话任务。

  • Alpaca 格式

:适用于单轮任务,如问答、文本生成、摘要、翻译等。结构简洁,任务导向清晰,适合低成本的指令微调。

  
{  
"instruction":"计算这些物品的总费用。",  
"input":"输入:汽车 - $3000,衣服 - $100,书 - $20。",  
"output":"汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"  
}  

  • ShareGPT 格式

:适用于多轮对话、聊天机器人等任务。结构复杂,包含多轮对话上下文,适合高质量的对话生成和人机交互任务。

  
[  {  "instruction":"今天的天气怎么样?",  "input":"",  "output":"今天的天气不错,是晴天。",  "history":[  [  "今天会下雨吗?",  "今天不会下雨,是个好天气。"  ],  
[  "今天适合出去玩吗?",  "非常适合,空气质量很好。"  ]  
]  
}  
]  

数据集中的字段含义如下:

  • instruction(必填):明确的任务指令,模型需要根据该指令生成输出。
  • input(可选):与任务相关的背景信息或上下文。
  • output(必填):模型需要生成的正确回答。
  • system(可选):系统提示词,用于定义任务的上下文。
  • history(可选):历史对话记录,用于多轮对话任务。

将下载好的 JSON 数据集放入 LLaMA-Factory/data 目录下,并在 LLaMA-Factory/data/data\_info.json 中注册数据集。

picture.image

WebUI 配置微调参数

访问 http://localhost:7860/ ,进入 LLaMA Factory 的 WebUI 界面。WebUI 主要分为四个界面:训练(Train)、评估与预测(Evaluate & Predict)、对话(Chat)、导出(Export)。

先设置页面上半部分的内容。

picture.image

模型名称选择为待训练的模型名称,这里设置为 Qwen2.5-7B-Instruct。模型路径设置为上面下载的模型路径,例如在 LLaMA-Factory 目录下新建一个 models 文件夹,将下载的模型移动到此文件夹内,可设置路径为 models/Qwen2.5-7B-Instruct。微调方法支持 lora/freeze/full 方法,这里选择 lora 方法,其他方法对计算机配置要求较高,对个人电脑来说一般不适用。

  • LoRA(Low-Rank Adaptation):通过在模型的某些层中添加低秩矩阵来实现微调。
  • 全量微调(Full Fine-Tuning):对模型的所有参数进行微调。
  • 冻结微调(Freeze Fine-Tuning):冻结模型的某些层或全部层,仅微调特定的参数。

下表描述了在训练或推理不同规模的大模型(如 7B、13B 参数模型)时,所需硬件的显存需求。例如使用 LoRA 微调 Qwen2.5:7B 模型时,显存需求为 16GB。

| 方法 | 精度 | 7B | 14B | 30B | 70B | x

B | | --- | --- | --- | --- | --- | --- | --- | | Full ( bf16 or fp16 ) | 32 | 120GB | 240GB | 600GB | 1200GB | 18x

GB | | Full ( pure\_bf16 ) | 16 | 60GB | 120GB | 300GB | 600GB | 8x

GB | | Freeze/LoRA/GaLore/APOLLO/BAdam | 16 | 16GB | 32GB | 64GB | 160GB | 2x

GB | | QLoRA | 8 | 10GB | 20GB | 40GB | 80GB | x

GB | | QLoRA | 4 | 6GB | 12GB | 24GB | 48GB | x/2

GB | | QLoRA | 2 | 4GB | 8GB | 16GB | 24GB | x/4

GB |

下面设置 Train 选项卡中的参数。

picture.image

训练阶段设置为 Supervised Fine-Tuning

  • Supervised Fine-Tuning:监督微调是最常见的微调方法,使用标注好的数据对预训练模型进行进一步训练,以适应特定任务(如分类、问答等)。
  • Reward Modeling:奖励建模是一种用于优化模型输出质量的方法,通常用于强化学习的上下文中。
  • PPO(Proximal Policy Optimization):PPO 是一种基于强化学习的微调方法,用于优化模型的输出策略。
  • DPO (Direct Preference Optimization):DPO 是一种基于人类偏好的直接优化方法,用于训练模型以生成更符合人类偏好的输出。
  • Pre-Training:预训练是指从头开始训练一个大模型,通常使用大量的无监督数据(如文本语料库)。预训练的目标是让模型学习通用的语言知识和模式。

数据集选择上文注册的数据集名称,这里设置为 ruozhiba。训练轮次根据数据集大小调整,这里设置为 100。学习率通常设置为 1e-4 或 5e-5。计算类型设置为 bf16,如果你的硬件不支持,可以选择 fp16,基本上 2020 年之后的 GPU 都支持 bf16

picture.image

接着对 LoRA 参数进行设置。其中关键的参数是秩(rank) ,秩的大小直接影响模型的性能和资源消耗。秩越大,引入的可训练参数越多,模型对新数据的适应能力越强,但也增加了计算和内存的需求,可能导致过拟合。秩越小,引入的可训练参数较少,减少了计算和内存的需求,但可能不足以充分适应新数据,影响模型性能。可以从较小的值开始(如8、10、12),逐步增加,观察模型性能的变化。

参数配置好后,点击开始,即可进行训练。训练时可以观察右侧的损失曲线,曲线长时间不下降时,即可考虑退出训练。

picture.image

模型训练好后,会保存至 LLaMA-Factory 的 saves 文件夹中。

picture.image

模型导出与量化

下面切换至 Export 选项卡,设置导出参数。补全检查点路径与导出目录,点击开始导出。到此为止,模型已经具备了使用能力。

picture.image

大语言模型的参数通常以高精度浮点数(如32位浮点数,FP32)存储,这导致模型推理需要大量计算资源。量化技术通过将高精度数据类型存储的参数转换为低精度数据类型(如8位整数,INT8)存储,可以在不改变模型参数量和架构的前提下加速推理过程。这种方法使得模型的部署更加经济高效,也更具可行性。

量化前需要先将模型导出后再量化。修改模型路径为导出后的模型路径,导出量化等级一般选择 8 或 4,太低模型会答非所问。

picture.image

导入 Ollama

新版的 Ollama 可以直接导入 safetensors 模型,首先需要准备 Modelfile 文件。Modelfile 文件是一个文本文件,包含了模型的基本信息和配置参数。可以在命令行中执行下面的命令,看看 Ollama 中对应的模型是怎么写的。

  
ollama show --modelfile qwen2.5:7b  

picture.image

当然 LLaMA Factory 导出时也已经生成了 Modelfile 文件,直接使用即可。

picture.image

将命令行切换到导出模型的目录,执行下面的命令,导入模型。

  
ollama create qwen2.5-ruozhi:7b -f Modelfile  

最后运行微调前和微调后的模型,比较一下效果

picture.image

机器学习算法AI大数据技术

搜索公众号添加: datanlp

picture.image

长按图片,识别二维码

阅读过本文的人还看了以下文章:

实时语义分割ENet算法,提取书本/票据边缘

整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主

《大语言模型》PDF下载

动手学深度学习-(李沐)PyTorch版本

YOLOv9电动车头盔佩戴检测,详细讲解模型训练

TensorFlow 2.0深度学习案例实战

基于40万表格数据集TableBank,用MaskRCNN做表格检测

《基于深度学习的自然语言处理》中/英PDF

Deep Learning 中文版初版-周志华团队

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

《深度学习:基于Keras的Python实践》PDF和代码

特征提取与图像处理(第二版).pdf

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

搜索公众号添加: datayx

picture.image

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论