初学者如何对大模型进行微调?

大模型微调实战
部署运行你感兴趣的模型镜像

粗略地说,大模型训练有四个主要阶段:预训练、有监督微调、奖励建模、强化学习。

预训练消耗的时间占据了整个训练pipeline的99%,其他三个阶段是微调阶段,更多地遵循少量 GPU 和数小时或数天的路线。预训练对于算力和数据的要求非常高,对于普通开发者来说基本上不用考虑了。

对于开发者来说,如果你有几块GPU显卡,那么就可以尝试微调了。不过在微调之前,我们要弄明白为什么要微调,大模型为什么不能直接用?

一、为什么要微调?

大语言模型的预训练的目标很简单:文字接龙,通过前面的词语预测下一个字也就是预测token序列的下一个token。

预训练基于大规模无监督数据集训练,得到的大语言模型可以保存很多知识,但是可能无法充分利用这些知识来回答问题。

我的理解是预训练就是一个班上学习很好的学霸,不过只会死记硬背,脑袋里记忆了很多知识,但是不会灵活应用这些知识。一般预训练的数据格式如下所示:

在这里插入图片描述

如果将“中国的首都是”输入大模型,大模型做文字接龙,可以很轻松的补全“北京”作为回答。但是如果问题的形式是“中国的首都是哪个城市?”这种疑问句形式的时候,虽然只进行了预训练的大模型大概率也能回答这个简单问题,比如采用Few-shot prompt等方法。

但这种形式的问题如果内容更复杂一些,大模型可能无法很好的作答(尽管预训练语料中可能包含了问题的答案)。这时我们就需要指令微调来挖掘大语言模型的潜力。让大模型不仅仅满足于文字接龙,而是要真正具备逻辑推理、文案总结等能力。

一般来说我们可以在modelscope中搜索最新的大模型,以Llama系列为例子。其中

图片

  • Meta-Llama-3-8B不包含Instruct关键词,说明它只有预训练,未经过指令微调。
  • Meta-Llama-3-8B-Instruct包含Instruct关键词,经过预训练、指令微调。

二、初学者如何微调?

对于初学者来说,我们不需要指令微调来挖掘大语言模型的潜力,虽然这个时候的指令微调相比预训练资源消耗小很多,但是对于初学者来说还是很困难的,在微调过程中会碰到灾难性遗忘、复读机等问题。

我建议初学者做微调是在指令微调模型的基础加入特定领域的数据,比如法律文档、医疗诊断等领域,模型需要调整其参数以更好地理解和执行这些特定任务的要求,微调允许大语言模型在特定任务的数据集上进一步学习,从而提高其在该领域的准确性和表现。

比如我在Qwen1.5-7B-Chat的基础上(Qwen1.5-7B-Chat是一个预训练、指令微调后的大模型),准备训练数据集45366条,测试数据集5032条,再微调大模型来实现商品评论情感分析,准确率高达91.70****%,具体实现方法如下:

微调大模型来实现商品评论情感分析

学习微调最好的办法就是自己亲身实践一遍。在去年的时候微调大模型还是一件比较困难的事情。微调工具链不太成熟,碰到了问题只能一个接一个去提issue,费时费力效果还一般。

不过随着大厂在大模型领域真金白银的投入,适合大模型微调的工具链组件快速发展,从初学者入门的角度出发。我推荐使用LLaMA-Factory统一微调框架,它能够支持数百种大模型的微调,并且集成了大量训练加速算法,比很多大模型repo主页训练方法还要快。下面我们来看一看如何使用它。

1.依赖下载

在这里插入图片描述

如果依赖有问题,可以。

2.大模型下载

这里以Baichuan2-13B-Chat为例。

在这里插入图片描述

默认模型会下载到~/.cache/modelscope/hub中,如果需要修改下载目录,可以手动指定环境变量:MODELSCOPE_CACHE,modelscope会将模型和数据集下载到该环境变量指定的目录中

比如更改默认位置:

export MODELSCOPE_CACHE=/home/test/models

3.数据集构建

(1)使用开源数据集

llama_factory中的 data文件夹提供了大量整理好的开源数据集

(2)构建自己的数据集 比如我我按照alpaca 格式准备数据集,包括 instruction, input, output,history 4条内容,其中instruction、 input 为输入,output 为输出标注,数据文件存储格式一般为json。

在这里插入图片描述

例子如下:

在这里插入图片描述

(3)引入自己的数据集

构建自己的数据集后,需更新 data/dataset_info.json 文件,并将数据集放置data文件夹

比如我构建了一个数据集test.json,需更新data/dataset_info.json 文件,并将test.json放置于data文件夹

在这里插入图片描述

4.微调

建议初学者采用web可视化页面微调,启动命令如下:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui

其中:CUDA_VISIBLE_DEVICES 指定使用哪块显卡

启动后,微调就更简单了。llamafactory集成了多种微调算法,比如

  • Lora
  • QLora
  • LoRA+
  • Mixture-of-Depths
  • GaLore

等等微调算法,在这里我不想深究它们的具体原理。我建议初学者首先使用Lora微调的方式,只需配置3个参数即可开始微调

在这里插入图片描述

5.推理

由于采用的是Lora微调,我们需要将原有大模型的权重与自己训练出来的权重合并。

llamafactory也内置了推理模块,只需调1个参数,即可推理,如下图所示:

在这里插入图片描述

下面这张图,是我基于llamafactory做的商品评论情感预测,其中1代表好评,0代表差评。可以看到大模型输出1,代表它认为这条评论是好评。

在这里插入图片描述

三、最后

现在大模型微调的门槛越来越低,市场上有大量开源微调框架。只要你会部署、有机器就能出个结果,赶紧动手玩起来吧!

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

大模型微调是通过在特定任务或领域数据上进一步训练预训练模型,以提升其在该任务或领域上的性能。微调的核心在于利用已有模型的强大表示能力,并通过少量任务相关的数据调整模型参数,使其更好地适应具体应用场景。 ### 大模型微调的基本方法 1. **全量微调(Full Fine-tuning)** 在全量微调中,所有模型参数都会根据目标任务的数据进行更新。这种方法适用于数据量较大、计算资源充足的情况。然而,对于非常大的模型来说,全量微调的成本较高,训练时间和计算资源需求显著增加。 2. **参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)** 为了降低微调成本,参数高效微调方法被提出,其中最常见的是 **LoRA(Low-Rank Adaptation)** 和 **Prompt Tuning**。LoRA 通过在权重矩阵中引入低秩矩阵进行参数调整,仅更新少量额外参数,从而显著减少计算资源和内存占用。Prompt Tuning 则是通过在输入中添加可学习的提示向量来引导模型输出,无需修改原有模型参数 [^3]。 3. **指令微调(Instruction Tuning)** 指令微调是在指令-响应对的数据集上进行的微调,使模型能够更好地理解自然语言指令并生成符合预期的输出。这种方法特别适用于构建对话系统或执行特定任务的模型 [^1]。 ### 数据集的规模要求 数据集的质量和规模对微调效果具有决定性影响。数据集应具有代表性,并与目标任务高度相关 [^2]。一般而言: - **问答类任务(SFT)**:通常需要数百到数千条高质量的指令-响应对。若数据量较少,可结合数据增强或合成数据方法进行补充 。 - **多轮对话任务**:建议使用包含上下文信息的对话历史数据,每条样本应包含完整的对话轮次。 - **结构化输出任务**:如生成 SQL 或产品介绍文案,需要明确的输入指令和格式化输出,数据集规模建议在 1000 条以上以保证泛化能力 。 - **情绪风格迁移或代码生成任务**:通常需要成对的输入输出样本,数据量建议在数千条以上,以确保模型能够准确捕捉语义和风格特征 [^3]。 此外,对于资源有限或数据量较小的场景,可以结合 **RAG(Retrieval-Augmented Generation)** 技术,通过检索外部知识库增强模型的推理能力,从而弥补数据量不足的问题 [^3]。 ### 示例数据格式(JSONL) ```json {"instruction": "售后流程是怎样的?", "output": "请通过官网提交售后申请,客服将在24小时内联系您。"} {"instruction": "实现多租户隔离方案", "output": "可以采用数据库分库、租户ID标识、独立部署等方式实现多租户隔离。"} ``` ### 数据生成与标注工具 为了构建高质量的数据集,可以使用 AI 数据集生成和模型微调框架,如 **Distilabel**。该框架支持自动化数据生成和标注,适用于多种自然语言处理任务和生成式 AI 场景,能够有效提升数据质量和微调效率 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值