基于Pytorch深度学习——SFT微调任意大模型理论以及代码——代码/参数配置/Lora微调/SFTTrainer/Merge/推理

SFT

SFT(Supervised Fine-Tuning)是指在已预训练的模型基础上,使用带标签的训练数据进行监督微调。这种方法通常用于自然语言处理(NLP)或计算机视觉(CV)等领域,旨在通过适应特定任务来优化模型的性能。SFT是一种在预训练基础上进行细化调整的过程,目标是使模型在特定应用上表现更好。

SFT的基本流程

预训练(Pre-training): 在大量的无标签数据上训练模型,学习通用的特征和表示(如GPT系列、BERT等语言模型)。这一步并不专注于某一个特定的任务,而是让模型具备广泛的知识和技能。

监督微调(Supervised Fine-Tuning): 在预训练的基础上,使用带有标签的数据集进一步训练模型。通过调整模型参数,使得模型在目标任务(如文本分类、情感分析、问答系统等)上能够得到更好的效果。

评估和优化(Evaluation and Optimization): 微调后的模型通常会在特定任务的数据集上进行评估,并根据结果调整超参数、优化算法等,进一步提升模型性能。

SFT的优点

节省时间和计算资源: 与从头开始训练一个全新的模型相比,SFT只需要在少量的标签数据上进行训练,从而节省了大量的计算资源和训练时间。
利用预训练模型的强大能力: 预训练模型已经学习了大量的通用知识,SFT只需通过少量的任务特定数据来调整模型,使得其在特定任务上取得更好的表现。
灵活性: SFT可以应用于多种不同的任务和领域,如文本分类、命名实体识别、机器翻译等。

代码

我们可以采用SFT框架来微调任意一个大模型, 这里为了演示的方便,我们采用Qwen2.5-0.5B模型进行演示,在实际的应用中可以将其替换成任意的模型进行微调

导入数据集

在这里我们采用Huggingface上的一个文言文和白话文转换的数据集来举例子,我们可以通过下面的代码来自动获取以及导入该数据集

from datasets import load_dataset
import os
os.environ['HF_ENDPOINT'] = "https://hf-mirror.com"

test_dataset = load_dataset("YeungNLP/firefly-train-1.1M",split="train[:500]")

在这里为了保证下载的速度,我们采用了国内的Huggingface的镜像进行下载,以及使用数据集的前500条数据进行微调

在这里我们可以先看看导入后的效果如何

test_dataset[100]

{'kind': 'ClassicalChinese', 'input': '我当时在三司,访求太祖、仁宗的手书敕令没有见到,然而人人能传诵那些话,禁止私盐的建议也最终被搁置。\n翻译成文言文:', 'target': '余时在三司,求访两朝墨敕不获,然人人能诵其言,议亦竟寝。'}

转换目标格式

通过上面的可视化的例子,我们可以发现这个数据集和Qwen所要求的数据集的格式并不一样,所以我们需要将数据格式进行转换
这里以Qwen2的目标格式为例子,目标格式如下:

<|im_start|>system
你是一个人工智能助手 <|im_end|>
<|im_start|>user
苹果的英文是什么 <|im_end|>
<|im_start|>assistant
apple <|im_end|>

所以我们可以采用下面的代码进行转换:

from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
def format_prompt(example):
    chat 
### 使用 LLama-Factory 微调开源模型 #### 准备环境与安装依赖 为了使用 LLama-Factory 对开源模型进行微调,首先需要准备合适的开发环境并安装必要的软件包。这通常涉及到设置 Python 虚拟环境以及安装 PyTorch 和其他依赖项。 #### 配置训练参数文件 配置文件定义了用于微调的具体参数和选项。对于 `Llama3-8B-Instruct` 模型而言,可以通过 YAML 文件指定这些细节[^1]: ```yaml model_name_or_path: "path_to_model" output_dir: "./results" per_device_train_batch_size: 4 gradient_accumulation_steps: 2 learning_rate: 5e-6 num_train_epochs: 3 logging_dir: './logs' ``` 此配置示例展示了如何调整批量大小、学习率和其他超参数来优化训练过程。 #### 执行微调操作 一旦完成了上述准备工作,则可通过 CLI 命令执行实际的微调流程。具体来说,就是运行如下命令来进行基于 LoRA微调工作[^3]: ```bash CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_sft.yaml ``` 这条指令指定了 GPU 设备编号,并加载预设好的配置文件路径以启动训练任务。 #### 进行推理测试 完成微调之后,可以立即对该改进后的模型做初步评估。同样借助于 CLI 工具,只需更改子命令即可切换到推理模式: ```bash CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat examples/inference/llama3_lora_sft.yaml ``` 该命令允许用户与经过微调的大规模语言模型交互对话,从而直观感受其表现变化。 #### 合并权重保存成果 最后一步是将原始模型与新学到的知识相结合,形成最终版本供后续部署或进一步迭代之用。这一环节也十分简单明了: ```bash CUDA_VISIBLE_DEVICES=0 llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml ``` 通过这种方式能够有效地保留所有更新过的参数而不会丢失原有结构特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值