微调框架Llama-factory和Unsloth:应该选择哪个?

大模型(如GPT系列和Meta-Llama系列)在自然语言处理方面表现出色,但要实现最佳效果,仍需通过精细化处理。提示词工程、微调和RAG增强检索是三种关键技术,帮助提升大模型的应用性能。

提示词工程,通过设计精准的输入提示,引导模型生成符合预期的输出。就像教孩子识别苹果一样,单一描述往往不够,需要通过多样化的例子提供上下文,让孩子更好理解。同样,提示词工程通过上下文示例让模型理解并生成更准确的回应。

RAG增强检索,则用于弥补大模型知识局限的问题,将模型与外部知识库连接,使其在生成回答时可以检索到相关信息,确保在未知领域也能提供准确答案。微调则是对模型的定制训练,使其在特定领域的任务中表现更优,类似于演员为特定角色做排练训练。

微调,将大模型比作一位多才多艺的演员,他可以扮演各种角色。但是,要想让演员完美诠释一个特定角色,需要进行针对性的训练和排练。微调的过程类似于演员的排练过程。它利用特定领域的数据对大模型进行进一步训练,使其更擅长处理该领域的任務。例如,将大模型用于医学诊断,就需要使用医疗文本数据进行微调,使其能够理解医学术语并做出准确的诊断。

今天我们重点来介绍一下微调框架的选择:

  • 微调的重要性:解锁模型潜能

  • 如何选择大模型微调框架

微调的重要性:解锁模型潜能

微调是将预训练模型适应特定下游任务的过程。它类似于一个已经接受过良好教育的学生学习新技能,比如演奏乐器或学习一门外语。

预训练模型就像那个已经接受过良好教育的学生,他们已经掌握了大量的知识和能力,例如理解语言、识别图像等。但是,要想在特定的任务上表现出色,还需要针对性的训练。

举个例子,假设有一个预训练的语言模型,它能够理解文本并生成文字。如果我们想用这个模型来进行情感分析,就需要对它进行微调。具体来说,我们需要提供大量的带标签数据,例如评论文本和它们的情绪标签(正面、负面或中性)。通过在这些数据上训练,模型就能学习到识别不同情绪的特征,从而提高情感分析的准确率。

微调的好处在于:

  • 节省时间和资源:与从头开始训练模型相比,微调只需要较少的训练数据和计算资源,能够显著缩短模型开发周期。

  • 提升性能: 微调可以帮助模型更好地适应特定任务,从而提高模型的性能和准确率。

因此,微调是将预训练模型应用于实际场景的重要手段,它能够有效地提高模型的性能,并降低模型开发成本。

如何选择大模型微调框架

LLaMA-Factory

支持多种先进的微调算法和模型,包括但不限于:多种模型:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。

在应用领域有广泛的社区支持,从任何搜索引擎都可以找到大把的入门和学习资料。

可以基于图形的WEBUI界面或通过命令行两种方式来进行大模型的微调,非常方便,我们所要关注的就是对参数进行不断探索和调整。如下图所示,是一个典型的操作界面:

Unsloth:

UNSLOTH 这个易用微调框架让任何即使没有算法经验的人,在简单了解大模型基础之后,也能轻松微调主流大模型,开启你的 AI 应用之旅。

官方网站提供丰富示例: 你可以参考各种模型的使用案例,只需稍微调整参数即可完成微调过程。https://github.com/unslothai/unsloth,如下图所示:

同样支持绝大多数主流大模型:在 HUGGING FACE 上搜索 UNSLOTH,即可找到对 Llama、mistral、国内大模型等主流大模型的全面支持,如下图所示:

也有大量的主流社区提供支持。

LLAMA-FACTORY vs. UNSLOTH: 微调速度的对比

最近,我分别使用了LLAMA-FACTORYUNSLOTH对一个大型语言模型进行了微调。在微调过程中,UNSLOTH的微调速度给我留下了深刻的印象。本文将简要介绍这两个框架,并重点对比它们在微调速度上的差异,以帮助大家更好地理解和选择合适的工具。

微调业务背景及数据说明:

为了提升模型将现代汉语翻译为古文的能力,我使用了一份包含中国古代所有古文与现代文对照的数据集。经过数据预处理,最终的数据集包含约1140万条对照记录,示例如下:

[`  `{`    `"instruction": "请把现代汉语翻译成古文",`    `"input": "世界及其所产生的一切现象,都是来源于物质。",`    `"output": "天地与其所产焉,物也。"`  `},`  `{`    `"instruction": "请把现代汉语翻译成古文",`    `"input": "以概念来称谓事物而不超过事物的实际范围,只是概念的外延。",`    `"output": "物以物其所物而不过焉,实也。"`  `}`  `]

实测结果对比:

由于4090计算资源有限,针对两种不同的微调工具进行了实际测试。具体情况如下:

  • 微调设置

  • Llama - factory:

  • 数据量:约2万条

  • 微调步长:2940

  • unsloth:

  • 数据量:约45万条(考虑其对GPU加速的支持)

  • 微调步长:3000

  • 耗时对比

  • llama-factory:

  • 预测时间:3.5小时

  • 实际时间:5小时

  • unsloth:

  • 预测时间:约37分钟

  • 实际时间:约37分钟

从对比的结果来看,Unsloth 在数据量大幅增加的情况下,实际耗时与预测几乎一致,耗时仅为37分钟,且相较于Llama - factory的速度快了约10倍。这意味着,Unsloth 对GPU的加速效果显著,能大幅提升微调速度。

总结

测试表明,UNSLOTH和LLAMA-FACTORY在社区支持、模型种类和易用性上相近,但UNSLOTH在微调速度上表现突出。尽管处理的数据量是LLAMA-FACTORY的20倍,UNSLOTH的速度仍快约10倍,极大优化了时间成本,尤其在大规模数据处理中的效率优势显著。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

在这里插入图片描述

/root/autodl-tmp/ai/models/DeepSeek-R1-Distill-Qwen-1.5B does not have a padding token! Will use pad_token = <|vision_pad|>. [INFO|2025-03-04 19:29:52] llamafactory.model.model_utils.checkpointing:157 >> Gradient checkpointing enabled. [INFO|2025-03-04 19:29:52] llamafactory.model.adapter:157 >> Upcasting trainable params to float32. [INFO|2025-03-04 19:29:52] llamafactory.model.adapter:157 >> Fine-tuning method: LoRA [INFO|2025-03-04 19:29:52] llamafactory.model.model_utils.misc:157 >> Found linear modules: q_proj,gate_proj,up_proj,o_proj,k_proj,v_proj,down_proj [WARNING|logging.py:329] 2025-03-04 19:29:54,381 >> Unsloth 2025.2.15 patched 28 layers with 28 QKV layers, 28 O layers and 28 MLP layers. [INFO|2025-03-04 19:29:55] llamafactory.model.loader:157 >> trainable params: 9,232,384 || all params: 1,786,320,384 || trainable%: 0.5168 [INFO|trainer.py:746] 2025-03-04 19:29:55,961 >> Using auto half precision backend [WARNING|<string>:181] 2025-03-04 19:29:56,296 >> ==((====))== Unsloth - 2x faster free finetuning | Num GPUs = 1 \\ /| Num examples = 56 | Num Epochs = 30 O^O/ \_/ \ Batch size per device = 2 | Gradient Accumulation steps = 4 \ / Total batch size = 8 | Total steps = 210 "-____-" Number of trainable parameters = 9,232,384 swanlab: swanlab version 0.4.10 is available! Upgrade: `pip install -U swanlab` swanlab: Tracking run with swanlab version 0.4.9 swanlab: Run data will be saved locally in /root/autodl-tmp/ai/LLaMA-Factory/swanlog/run-20250304_192958-a3b1799d swanlab: 👋 Hi chrisfang, welcome to swanlab! swanlab: Syncing run dragon-6 to the cloud swanlab: 🌟 Run `swanlab watch /root/autodl-tmp/ai/LLaMA-Factory/swanlog` to view SwanLab Experiment Dashboard locally swanlab: 🏠 View project at https://swanlab.cn/@chrisfang/llamafactory-test swanlab: 🚀 View run at https://swanlab.cn/@chrisfang/llamafactory-test/runs/l0n927vfjxvq6iclvs3a8 2%|███▍ | 5/210 [00:17<07:34, 2.22s/it][INFO|2025-03-04 19:30:17] llamafactory.train.callbacks:157 >> {'loss': 4.6313, 'learning_rate': 2.5000e-06, 'epoch': 0.71, 'throughput': 737.83} {'loss': 4.6313, 'grad_norm': 0.6764227747917175, 'learning_rate': 2.5e-06, 'epoch': 0.71, 'num_input_tokens_seen': 15344} 5%|██████▊ | 10/210 [00:28<05:33, 1.67s/it][INFO|2025-03-04 19:30:28] llamafactory.train.callbacks:157 >> {'loss': 4.3760, 'learning_rate': 5.0000e-06, 'epoch': 1.43, 'throughput': 1091.49} {'loss': 4.376, 'grad_norm': 0.6041202545166016, 'learning_rate': 5e-06, 'epoch': 1.43, 'num_input_tokens_seen': 34624} 7%|██████████▏ | 15/210 [00:33<03:49, 1.18s/it][INFO|2025-03-04 19:30:33] llamafactory.train.callbacks:157 >> {'loss': 4.1816, 'learning_rate': 7.5000e-06, 'epoch': 2.14, 'throughput': 1398.99} {'loss': 4.1816, 'grad_norm': 0.44446107745170593, 'learning_rate': 7.5e-06, 'epoch': 2.14, 'num_input_tokens_seen': 51360}
03-08
<think>嗯,用户给了一段日志信息,想让我解释一下里面的内容。首先,我需要仔细看看这些日志到底说了什么。看起来是在训练一个深度学习模型,可能用的是LLaMA-Factory这样的框架。 首先,注意到模型路径是/root/autodl-tmp/ai/models/DeepSeek-R1-Distill-Qwen-1.5B,这个模型没有padding token,所以系统自动用了<|vision_pad|>作为填充符。这可能是因为模型配置里没有指定pad_token,或者原来的tokenizer里没有,所以框架自动选择一个。需要确认这个pad_token是否合适,会不会影响后续的任务,比如NLP任务中的填充位置可能会影响模型处理序列的能力。 接下来,启用了梯度检查点(Gradient checkpointing),这个技术是为了节省显存,用计算换内存,可能会让训练速度变慢一些,但能处理更大的batch size。用户可能是在资源有限的情况下进行的训练,所以启用了这个选项。 然后看到Fine-tuning的方法用的是LoRA,也就是低秩适应,这是一种参数高效的微调方法,只训练部分参数,而不是整个模型。这样可以节省计算资源时间,适合在资源有限的情况下进行微调。这里列出了被LoRA调整的线性模块,比如q_proj、k_proj等,这些通常是Transformer中的注意力层前馈层的部分。 之后有个关于Unsloth的警告,说patched了28层,可能是指Unsloth这个优化库对模型做了一些修改,以加速训练。Unsloth可能优化了某些层的计算,提升训练速度。用户可能使用了这个库来加速微调过程,需要确认这些修改是否兼容当前模型结构。 参数统计显示可训练参数约923万,总参数约17.86亿,可训练比例0.5168%,这符合LoRA的特点,只调整少量参数。用户可能是在进行轻量级的微调,避免过大的计算开销。 自动混合精度训练(auto half precision)被使用,这通常能加速训练并减少显存占用,但需要硬件支持,比如NVIDIA的GPU。可能用户开启了FP16或BF16来提升训练效率。 还有SwanLab的日志,显示实验数据被记录同步到云端,用户可能在使用SwanLab进行实验跟踪,方便后续分析可视化。需要提醒用户注意数据隐私,如果涉及敏感数据的话。 训练过程中,损失从4.63降到4.18,学习率逐渐增加,可能是用了学习率预热(warm-up)策略。吞吐量在提升,说明训练速度变快了,可能模型逐渐适应了数据,或者优化器调整有效。 用户可能想知道这些日志的含义,特别是警告错误信息是否需要关注,比如padding token的问题是否会影响结果,或者Unsloth的patch是否安全。另外,他们可能关心训练配置是否合理,比如LoRA的设置、梯度检查点、混合精度等,以及如何优化训练过程。 总结一下,用户可能在用LLaMA-Factory框架微调一个DeepSeek的模型,遇到了自动填充token的设置,启用了LoRA梯度检查点,使用Unsloth加速,并通过SwanLab监控训练。需要解释这些日志条目的意义,可能的优化点,以及潜在的问题。</think>这个日志片段展示了使用LLaMA-Factory框架对DeepSeek-R1-Distill-Qwen-1.5B模型进行微调的过程。以下是关键信息的逐层解析: --- ### 一、模型配置相关 1. **缺失填充符处理** $$ \text{[WARNING] /root/... does not have a padding token!} $$ - 系统检测到模型缺少padding token,自动使用`<|vision_pad|>`作为替代 - 可能影响:需验证该替代符在分词器中的有效性 2. **梯度检查点启用** $$ \text{Gradient checkpointing enabled} $$ - 通过牺牲20%计算速度换取显存优化,适用于显存受限场景 --- ### 二、微调方法 1. **LoRA配置** $$ \text{Fine-tuning method: LoRA} $$ -微调以下投影层: ```math \{ q\_proj, k\_proj, v\_proj, o\_proj, gate\_proj, up\_proj, down\_proj \} ``` - 可训练参数占比: $$ \frac{9,232,384}{1,786,320,384} \approx 0.5168\% $$ 2. **Unsloth优化** $$ \text{Unsloth patched 28 layers} $$ - 使用Unsloth库加速训练(宣称2倍速度提升) - 修改了28个QKV层、O层MLP层 --- ### 三、训练监控 1. **硬件资源** - GPU数量:1 - 总batch size:8(单卡batch=2 × 梯度累积步数=4) 2. **训练指标** | Epoch | Loss | 学习率 | 吞吐量(tokens/s) | |-------|--------|------------|----------------| | 0.71 | 4.6313 | 2.5e-6 | 737.83 | | 1.43 | 4.3760 | 5.0e-6 | 1091.49 | | 2.14 | 4.1816 | 7.5e-6 | 1398.99 | 3. **SwanLab监控** - 实验数据同步至:https://swanlab.cn/@chrisfang/llamafactory-test --- ### 四、潜在优化建议 1. **填充符验证**:检查`<|vision_pad|>`在分词器中的实际表现 2. **混合精度配置**:日志显示使用`auto half precision`,可尝试显式指定`bfloat16` 3. **LoRA层级扩展**:当前仅修改了注意力层,可尝试包含更多层类型 4. **吞吐量监控**:观察到吞吐量持续提升,建议关注硬件利用率曲线 需要进一步分析训练曲线验证集表现时,可通过SwanLab的实时看板进行可视化监控。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值