基于阿里qwen2.5的大模型微调

一、什么是大模型微调?

1、概念

        大模型微调(Fine-tuning)是指在一个预训练好的大规模机器学习模型(如GPT、BERT、ResNet等)的基础上,通过少量领域或任务相关的数据进一步调整模型参数,使其更适应特定任务或场景的技术。它是迁移学习的核心方法之一。

2、为什么要进行微调?

        基座模型具有“通才困境”。像ChatGPT、Llama这类预训练大模型,本质上是通过海量通用数据(书籍、网页、百科等)学习了“通识能力”——比如理解语法、基础逻辑、常见知识。但这也意味着:

  1. 缺乏垂直领域深度:对医学、法律、金融等专业术语的理解停留在表面,可能混淆概念。

  2. 无法适配特定格式:生成内容的结构可能不符合行业规范(如医疗报告需包含“主诉、病史、诊断”等固定模块)。

  3. 缺少私有信息:无法回答组织内部知识(如某医院独有的病历模板、科室术语缩写)。

3、微调的方法 

        大模型微调的常见方法可以根据参数调整的范围、资源消耗和实现方式分为以下几类:全参数微调(Full Fine-tuning)、部分参数微调(Partial Fine-tuning)、适配器微调(Adapter Tuning)、提示微调(Prompt Tuning)、LoRA(Low-Rank Adaptation)、前缀微调(Prefix Tuning)、知识蒸馏(Knowledge Distillation) 、SFT(有监督微调)等。

        接下来以SFT为例 → 通常语言模型的初始训练是无监督的,但微调是有监督的

二、基于阿里qwen2.5进行实操

1、环境配置

        为方便练习,我们选用免费的魔塔社区(首页 · 魔搭社区)进行大模型微调学习。成功创建账号登录后,我们可以进入模型库进行模型选择,本文以qwen2.5的7B模型作为实操用例。原因如下:① 下载等待时间不会太长;② 整体模型大小适中,不会超出持久化存储占用的100G限制。

当然,你也可以选择其他的模型,但记得提前查看估算模型总大小是否会超出100G的限制:
 之后我们选择右上角的Notebook快速开发 → 使用魔塔平台提供的免费实例

 并选择GPU环境,接着左下角启动。等GPU环境启动好以后点击"查看NoteBook"进入

进入如下界面视为成功,同时我们进入Notebook

 在代码块中先进行环境配置,输入如下:

!pip3 install --upgrade pip
!pip3 install bitsandbytes>=0.39.0

接着我们需要拉取LLaMA-Factory ,使用下面命令拉取:

!git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
![](https://mmbiz.qpic.cn/sz_mmbiz_png/4Dv7OhIhf6mckCc1haVHia9KweoxSDWrPIQbqjPNhgGG8l7dn2mANRB6rSlGowl1j0BWwNewvNkuK0OHqycI5dw/640?wx_fmt=png&from=appmsg)

LLaMA Factory是一款开源低代码大模型微调框架,集成了业界广泛使用的微调技术,想进一步深入了解的可以跳转:github.com

拉取成功后,我们左侧的目录中会出现名为LLaMA-Factory的文件夹,这时我们选择窗口栏的“+”回到Launcher 并打开一个新的Terminal

在Terminal中我们依次输入如下命令,安装依赖的软件:

cd LLaMA-Factory
pip3 install -e ".[torch,metrics]"

 当然,可能会出现如下报错:

error: invalid-installed-package

× Cannot process installed package omegaconf 2.0.6 in '/usr/local/lib/python3.11/site-packages' because it has an invalid requirement:
│ .* suffix can only be used with `==` or `!=` operators
│     PyYAML (>=5.1.*)
│             ~~~~~~^
╰─> Starting with pip 24.1, packages with invalid requirements can not be processed.

hint: To proceed this package must be uninstalled.

我们先执行升级omegaconf的命令,再重新执行前面的安装步骤即可:

pip install --upgrade omegaconf
pip3 install -e ".[torch,metrics]"

2、模型下载

        上述执行完成后,我们模型文件界面,选择下载模型,并复制git方式的链接:

回到Terminal输入链接命令,拉取模型文件,完成后,左侧文件栏会出现模型文件夹(请稍等片刻,让主要的四个模型文件都拉取完毕)

3、配置文件

从左侧文件列表的LLaMA-Factory/examples/train_qlora/ 来到配置文件放置的目录,根据自己的喜好,从任意yaml配置文件中复制一份模板至自己新建的配置文件中,例如我复制llama3_lora_sft_awq.yaml 中的 内容至我自己的 exercise.yaml文件中

现在开始修改里面的参数,第一行为我们之前下载模型的位置,默认为

/mnt/workspace/Qwen2.5-7B-Instruct

我的具体参数如下 :

### model
model_name_or_path: /mnt/workspace/Qwen2.5-7B-Instruct
trust_remote_code: true

### method
stage: sft
do_train: true
finetuning_type: lora
#lora_rank: 8
lora_target: all

### dataset
#dataset: identity,alpaca_en_demo
dataset: identity, hwtcm_deepseek_r1_distill_data
template: qwen
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16
#dataloader_num_workers: 4

### output
output_dir: saves/qwen-7b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true
#save_only_model: false
#report_to: none  # choices: [none, wandb, tensorboard, swanlab, mlflow]

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
#ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

 详细的参数解释可以参考调优算法 - LLaMA Factory下面是我的理解:

一、model(基础模型设置)

  • model_name_or_path
    指定要加载的预训练模型路径或名称,此处指向本地的 Qwen2.5-7B-Instruct

  • trust_remote_code
    是否信任来自 Hub 上数据集/模型的代码执行。


二、method(微调方式)

  • stage
    微调阶段,这里 sft 表示监督微调(Supervised Fine-Tuning)。

  • do_train
    是否执行训练流程,true 则会进入训练。

  • finetuning_type
    微调类型,此处为 lora,即使用 LoRA (低秩适配)参数高效微调。

  • lora_target
    指定应用 LoRA 的模块范围,all 表示对模型的所有部分都应用 LoRA 微调。


三、dataset(数据集与预处理)

  • dataset
    指定了使用的数据集 identityhwtcm_deepseek_r1_distill_data 两部分。

  • template
    数据输入的模板类型,qwen 表示采用 Qwen 系列推荐的 prompt 模板。

  • cutoff_len
    文本截断长度上限(Token 数),超过则裁剪,降低显存占用,此处为 1024。

  • max_samples
    从数据集中抽取的最大样本数,1000 表示本次训练最多取一千条。

  • overwrite_cache
    是否在预处理时强制重新生成缓存,true 可确保每次都用最新逻辑切分。

  • preprocessing_num_workers
    数据预处理时并行的子进程数,使用 16 进程以加快 tokenize 等操作。


四、output(输出与日志)

  • output_dir
    训练结果保存路径,此处为 saves/qwen-7b/lora/sft

  • logging_steps
    日志(如 loss)打印间隔,训练多少步记录一次,此处每 10 步。

  • save_steps
    模型检查点保存间隔,训练多少步保存一次,此处500步。

  • plot_loss
    是否实时绘制 loss 曲线;true 可生成训练可视化图。

  • overwrite_output_dir
    如果输出目录已存在,是否覆盖旧内容;true 表示直接覆盖。


五、train(训练超参数)

  • per_device_train_batch_size
    每个 GPU/每个设备上的训练批大小,此处设为 1。

  • gradient_accumulation_steps
    累积多少步梯度再做一次反向更新,相当于将有效 batch 大小 ×8。

  • learning_rate
    学习率,控制参数更新步长,此处为 1e-4。

  • num_train_epochs
    总训练轮数,此处训练 3.0 轮。

  • lr_scheduler_type
    学习率调度方式,cosine 表示余弦退火。这种策略可以在训练过程中逐渐降低学习率,有助于提高模型的收敛速度和性能。

  • warmup_ratio
    学习率预热比例,前 10% 步数线性升至最大学习率。

  • bf16
    使用 bfloat16 混合精度训练,可减小显存占用并加速。

  • (ddp_timeout)
    分布式训练时进程等待超时时间设定。


六、eval(评估策略)

  • val_size
    验证集占比,0.1 表示将 10% 的训练数据用作验证。

  • per_device_eval_batch_size
    每个设备的评估批大小,此处为 1。

  • eval_strategy
    评估触发方式,steps 表示按步数评估。

  • eval_steps
    多久进行一次评估,此处每 500 步执行一次。

因此,从上面可得,这次微调使用的数据集为 identityhwtcm_deepseek_r1_distill_data ,当然你也可以修改其中的内容、手动上传自己的数据集或从平台上获取他人分享的数据集进行训练

4、微调模型 

保存刚才对于 exercise.yaml 文件的更改,回到终端terminal 继续操作,输入如下训练命令:

llamafactory-cli train examples/train_qlora/exercise.yaml
![](https://mmbiz.qpic.cn/sz_mmbiz_png/4Dv7OhIhf6mckCc1haVHia9KweoxSDWrPw0CUbZE6DtpicWdqwnhWd935w2OdCTiakfZdNsJcGicHFWJFBS9f9a8Pw/640?wx_fmt=png&from=appmsg)

如果出现如下报错,

bash: llamafactory-cli: 未找到命令
bash: ![]: event not found

则先执行下面命令再重复操作依次训练:

pip install -e ".[torch,metrics]"

 当出现白色进度条时,就是正在进行微调了。当页面不在变化,且出现loading checkpoint字样,则代表微调结束。

5、测试模型

回到examples\inference下提供的任意yaml模板,复制一份,并重命名为exercise_sft.yaml,修改model_name_or_path 参数为之前下载的模型位置(本文为Qwen2.5-7B-Instruct),并保存。

model_name_or_path: /mnt/workspace/Qwen2.5-7B-Instruct
adapter_name_or_path: saves/qwen-7b/lora/sft
template: qwen
infer_backend: huggingface  # choices: [huggingface, vllm, sglang]
trust_remote_code: true

回到Terminal,cd 至LLaMA-Factory目录,并执行推理命令:

llamafactory-cli chat examples/inference/exercise_sft.yaml

等待加载完毕,会在Terminal中显示"User:",即可在后面输入内容开始聊天了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸢想睡觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值