【AI大模型微调实战】Qwen2-0.5B+Lora+alpaca_zh 微调实战,附完整可运行源代码

预训练大模型在训练过程中,虽然学到了很多通用知识,但是很多时候,大模型本身并不能在专业领域表现得非常好。

比如你让 Qwen 模型回答“量子力学中的叠加态是什么”,它可能会给出一个笼统的解释。

但要是让模型严格按照某一格式(比如论文格式)回答时,可能就不太行。

除非你在上下文聊天中给他一些例子让他先自我学习。

这也被称为“上下文学习能力 + Few-shot”的方式,但这并不改变模型的本质。

一旦你切换了与模型聊天的上下文,模型又会恢复到它原来的样子。

因此,对这种需要改变模型回答模式的需求,我们一般对预训练模型进行微调。

这是因为微调“真正的”会改变模型的参数。

大模型微调的方法有很多。

比如“全参数微调”、Lora及各种Lora的变种、P-Tuning 等等。

但大部分情况下我们都会使用 LoRA 的技术方法对模型进行微调。

这是因为 Lora 只会改变模型原有参数的“一部分”,并且改变的是比较对模型表现比较重要的部分,并且取得非常不错的结果。

如下图,微调只会修改全部参数中的部分参数。

img

这样做的好处之一,就是节省资源。

和全参数微调那种模型的所有参数都要更新不同的是,LoRA 只会更新模型中一小部分参数。

比如原本0.5亿参数的模型,Lora 微调时可能只需要更新几千个参数。

这样就会是的微调过程中对显存的依赖非常低,即使是普通开发者也能玩一玩 Lora 微调。

这篇文章,我假定你对 Lora 微调的技术背景有了一定的认识。

如果你还不懂 Lora 的技术细节,欢迎关注下面的📌AI 学习路线图:从小白到大神的爬天梯之路中的“微调小课”。

在这个路线图中,还有完整的 Transformer 架构的原理解析和《从零手写大模型(炸裂实战)》,都会帮助你更好的学习和理解微调技术。

这篇文章我将带你从头开始,以代码实战的方式,使用 Qwen2-0.5B 模型和中文指令数据集 alpaca_zh,手把手教你如何微调模型。

希望阅读完本文后,你可以了解微调的原理,并且真正能自己动手完成实战!

PS:本文代码实操时最好有一块可用的GPU卡,不然如果用CPU的话,要等多久可能只有天知道了。

下面我将边讲解相关知识,边展示关键代码并对其进行解释。

第一步:准备环境,加载模型

首先,我们需要加载Qwen2-0.5B模型,并准备好后续要用的工具。

代码如下:
在这里插入图片描述

这段代码的作用是加载模型和分词器。

AutoModelForCausalLM

这是 Hugging Face transformers 库提供的函数,专门用于加载因果语言模型(即逐词生成文本的模型)。

AutoTokenizer

负责将文本转换成模型能理解的 token id。

这里我们选择本地路径加载模型,是因为直接从互联网下载模型可能遇到网络问题,本地加载更快也更稳定。

device 变量会检测你的计算机是否有GPU,有就用GPU加速,没有就用CPU。

为什么选择Qwen2-0.5B?

因为它参数量只有0.5亿,比其他规模参数的Qwen大模型小很多,适合资源有限的场景。

如果你有GPU且GPU很给力(内存足够),你也可以选择其他规模的模型来进行微调,还有一个原因是 Qwen 是阿里推出的大模型,对中文语句的理解会更精准。

第二步:加载数据集,格式化数据

接下来,我们准备微调需要的数据集,这里用的是 alpaca_zh 数据集。

这个数据集是一个中文版本的指令微调数据集,通常用于训练或微调大语言模型(LLMs),使其能够更好地理解和执行中文指令。

这个数据集是基于英文的 Alpaca 数据集翻译和改编而来的。

它包含了很多“指令→输入→输出”的三元组问答对,比如:

  • 指令:解释量子力学中的叠加态
  • 输入:无
  • 输出:叠加态是指量子系统同时处于多个状态的组合,直到被观测时才会坍缩到一个确定状态……

加载并格式化数据集的代码如下:

在这里插入图片描述

加载数据集

通过MsDataset.load()从ModelScope平台加载中文指令数据集alpaca_zh,并转换成Hugging Face的格式,方便后续处理。

当然你也可以使用 transformers 库从 huggingface 上下载数据集。

格式化数据

通过map()函数遍历每条数据,将指令、输入和输出拼接成统一格式的字符串。

例如,如果一条数据的输入为空(比如用户直接问“讲个笑话”),则只保留“Instruction”和“Output”部分,但整体格式保持一致。

这能让模型明确学习到“看到某个指令和输入后,生成对应的输出”。

为什么选择alpaca_zh数据集?

因为它专门用于“指令对齐”,教模型按照用户给定的格式回答问题。

比如,用户希望模型严格按照“Output: …”的格式输出答案,而不是随意发挥。

此外,这个数据集是中文社区优化的,更适合国内用户的提问习惯。

第三步:数据处理和分词

分词是把文本转换为 token ID 的过程。比如把“量子力学”变成 [2345, 6789, ...]

代码如下:

在这里插入图片描述

这段代码分为两个部分:

数据分割

将数据集分成训练集(80%)和验证集(20%)。

这里只用了原始数据 1% 的数据,是为了快速验证代码逻辑。实际使用时建议用全部数据,但需要确保显存足够。

分词与填充

通过tokenizer()将文本转换为 token ID。

truncation=True 表示如果文本超过512个token(约100-200字),就截断到512。

padding=“max_length” 表示用特殊符号填充到512长度,确保所有输入长度一致。这能让模型在训练时批量处理数据,提升效率。

remove_columns=[“text”] 是删除原始文本列,只保留分词后的数值数据。

为什么只用1%的数据?

因为完整数据集可能有成千上万条,微调需要时间。

这里用小数据先跑通流程,再用全量数据进行训练效果会更好。

此外,如果显存较小(比如8GB GPU),小数据集也能避免爆显存。

第四步:配置LoRA,开始微调

现在,我们开始配置 LoRA 参数并开始训练!

在这里插入图片描述

这段代码配置了 LoRA 的关键参数:

r=8

这是 Lora 技术中低秩分解的“秩”。

数值越大,需要修改的模型参数就越多,微调效果理论上越好,但计算成本也会越高。

8是一个大众经验的平衡点,既能保证效果,又不至于太耗资源。当然你也可尝试其他值。

target_modules=[“q_proj”, “v_proj”]

表示选择模型中对任务影响最大的模块——注意力层的Q(Query)和V(Value)矩阵。

这些模块决定了模型如何“关注”输入中的关键信息。

例如,当模型处理“量子力学”问题时,Q帮助它关注关键词,V决定如何生成回答。

这里没有微调 K 矩阵,也是根据大部分人的经验得来的。

很多实验表明,K矩阵对于模型最终输出的效果影响不大,因此可以不对其进行微调。

当然,你也可以在上述代码中添加 k_proj 来启动 K 矩阵的微调。

task_type=“CAUSAL_LM”

指定任务类型为因果语言模型,确保 LoRA 参数适配生成任务。

通过get_peft_model()将LoRA配置应用到原始模型,此时模型中只有LoRA的参数是可训练的,其他参数保持冻结。

这样既能节省显存,又能加速训练。

第五步:训练与保存模型

在这里插入图片描述

这段代码展示了完整的模型训练过程的参数配置和流程:

num_train_epochs=1

这里设置训练只跑1个epoch(遍历数据集一次)。

对于小数据集来说,1个epoch足够测试流程是否正确,正式训练时可以增加到3-5个甚至更多的 epoch。

per_device_train_batch_size=4

每个 GPU 设备的批量大小。批量越大,显存占用越高,但训练速度可能更快。

如果你的显存不够,可以将这个值降低到 2 甚至 1。

evaluation_strategy=“epoch”

每完成一个 epoch 后评估模型效果。

load_best_model_at_end=True

训练结束后自动加载验证集表现最好的模型,避免手动选择。

通过Trainer.train()启动模型的训练。

启动训练后,模型会开始根据微调数据集中的回答样式,学习如何生成正确的输出。

最后通过save_model()保存微调后的 LoRA 参数。

注意此时保存的仅仅是 LoRa 参数,而不是整个微调后的模型,用来节省存储空间,你可以认为这个 Lora 参数是一个微调后的“补丁”。

第六步:测试模型效果

在这里插入图片描述

这段代码演示了如何加载微调后的模型并生成回答:

加载模型

首先加载原始 Qwen2-0.5B 模型,再通过PeftModel.from_pretrained()合并 LoRA 参数,这就给原始模型打上了补丁。

生成回答

输入一个指令(如“可再生能源的影响”),通过generate()生成文本。max_new_tokens=200限制生成长度,避免输出过长。

使用“原始模型+微调补丁”产生的新模型进行对话,你会发现模型的回答方式就和微调数据集中的非常相似了。

此时就说说明你已经通过微调的方式,调整了模型的回答样式。

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

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

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

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

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

### Qwen 源代码结构及实现细节 #### 1. **Qwen 的整体架构** Qwen 是一个大型语言模型家族,其设计涵盖了多个子模块和功能扩展。这些模块共同构成了 Qwen 的核心能力和应用场景支持。以下是几个主要方面的概述: - **基础大模型**:作为整个系列的核心部分,Qwen 提供了强大的自然语言理解和生成能力[^1]。 - **多模态支持 (Qwen-VL)**:通过引入视觉感知技术,Qwen 不仅可以处理纯文本数据,还能够结合图像等多媒体信息完成复杂的交互任务[^3]。 - **增强型工具集 (Qwen-Agent)**:内置有专门用于执行编程逻辑的功能组件——比如代码解释器,它允许系统动态生成并运行 Python 脚本以解决实际问题。 #### 2. **具体实现中的关键技术点** ##### a) **代码解释器集成机制** Qwen-Agent 中的代码解释器是一个非常重要的特性,使得该平台具备自动化数据分析的能力。当接收到包含数值或者表格形式的数据请求时,此部件会自动生成相应的 Python 程序片段来满足需求。下面展示了一个简单的例子说明如何利用此类服务来进行基本统计运算: ```python import pandas as pd def analyze_data(file_path): df = pd.read_csv(file_path) summary_stats = { 'mean': df.mean(), 'median': df.median() } return summary_stats result = analyze_data('example.csv') print(result) ``` 上述脚本展示了读取 CSV 文件之后计算平均数与中位数的过程;值得注意的是,在真实部署环境下,这类操作完全由 AI 自动生成而无需人工干预。 ##### b) **参数高效微调方法的应用** 针对特定领域内的定制化需求,可以通过 LoRA(Low-Rank Adaptation)以及 ALPACA_ZH 这样的先进技术手段对预训练好的通用版本进一步优化调整,从而获得更加贴合业务场景的表现效果[^2]。这种方法不仅保留了原有模型的知识积累,同时也大幅降低了重新训练所需的成本开销。 ##### c) **跨模态融合策略** 为了达成更好的用户体验,特别是在涉及图文混排的内容创作过程中,Qwen 开发团队采用了先进的交叉注意力网络结构,确保文字描述能精准映射到对应的图形特征之上,反之亦然。这种双向关联的设计思路极大地提升了最终输出的质量水平。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值