大模型学习--微调

       模型微调是一种在已有预训练模型的基础上,通过使用特定任务的数据集进行进一步训练的技术。这种方法允许模型在保持其在大规模数据集上学到的通用知识的同时,适应特定任务的细微差别。使用微调模型,可以获得以下好处:

  • 提高性能:微调可以显著提高模型在特定任务上的性能。
  • 减少训练时间:相比于从头开始训练模型,微调通常需要较少的训练时间和计算资源。
  • 适应特定领域:微调可以帮助模型更好地适应特定领域的数据和任务

长文本基本流程

知识库基本流程

微调

微调基本流程

微调基本流程

加载预训练模型

加载数据集

设定超参数

使用在线平台微调

硅基流动 

SiliconFlow, Accelerate AGI to Benefit Humanity

有关模型微调操作说明可以参考如下连接

https://docs.siliconflow.cn/cn/userguide/guides/fine-tune

新建微调任务

 

具体微调参数如下所示:

1.基础训练参数

参数名说明取值范围建议值使用建议
Learning Rate学习速率0-0.10.0001
Number of Epochs训练轮数1-103
Batch Size批次大小1-328
Max Tokens最大标记数0-40964096根据实际对话长度需求设置

2. LoRA参数

参数名说明取值范围建议值使用建议
LoRA Rank矩阵秩1-648
LoRA Alpha缩放因子1-12832
LoRA Dropout随机丢弃率0-1.00.05

3.场景化配置方案

对话模型

场景Learning RateEpochsBatch SizeLoRA RankLoRA AlphaDropout
标准方案0.0001388320.05
效果优先0.000151616640.1
轻量快速0.0001284160.05

微调数据集可以使用官网数据集

siliconcloud-cookbook/examples/fine-tune at main · siliconflow/siliconcloud-cookbook · GitHub

等待微调任务执行完毕 可以验证一下微调模型

from openai import OpenAI
client = OpenAI(
    api_key="xxxx", # 从https://cloud.siliconflow.cn/account/ak获取
    base_url="http://api.siliconflow.cn/v1"
)
 
def compare_model(word):
    qwen2_5_7B_original_messages = [
        {
            "role": "system", 
            "content": f'''# 角色
                你是一位新潮评论家,你年轻、批判,又深刻;
                你言辞犀利而幽默,擅长一针见血得表达隐喻,对现实的批判讽刺又不失文雅;
                你的行文风格和"Oscar Wilde" "鲁迅" "林语堂"等大师高度一致;
                从情感上要是对输入的否定。
                # 任务
                ## 金句诠释
                用特殊视角来全新得诠释给定的汉语词汇;
                敏锐得抓住给定的词汇的本质,用“辛辣的讽刺”“一针见血的评论”的风格构造包含隐喻又直达本质的「金句」
                例如:
                "合伙人": "一同下海捞金时,个个都是乘风破浪的水手,待到分金之际,方知彼此是劫财的海盗。"
                "大数据": "看似无所不能的数字神明,实则不过是现代社会的数字鸦片,让人沉溺于虚幻的精准,却忽略了人性的复杂与多变。"
                "股市": "万人涌入的淘金场,表面上是财富的摇篮,实则多数人成了填坑的沙土。"
                "白领": "西装革履,看似掌握命运的舵手,实则不过是写字楼里的高级囚徒。"
                "金融家": "在金钱的海洋中遨游,表面上是操纵风浪的舵手,实则不过是随波逐流的浮萍。"
                "城市化": "乡村的宁静被钢铁森林吞噬,人们在追逐繁华的幻影中,遗失了心灵的田园。"
                "逃离北上广": "逃离繁华的都市牢笼,看似追逐自由的灵魂,实则不过是换个地方继续画地为牢。"
                "基金": "看似为财富增值保驾护航的金融巨轮,实则多数人不过是随波逐流的浮萍,最终沦为填补市场波动的牺牲品。"
                # 输入
                用户直接输入词汇。
                # 输出
                严格输出JSON格式,包括两个字段,“prompt”为用户的输入;“output”为用户的金句内容,不额外输出额外任何其他内容,不要输出引号,严格限制用户的输入的词汇绝对不能出现在输出中,注意突出转折和矛盾,输出内容为一句话,最后以“。”结束,中间的停顿使用“,”分隔。例如 
                {{
                "prompt": "合伙人",
                "output": "一同下海捞金时,个个都是乘风破浪的水手,待到分金之际,方知彼此是劫财的海盗。"
                }}'''
        },
        {
            "role": "user", 
            "content": f"{word}"
        }
    ]

    qwen2_5_7B_fine_tuned_messages = [
        {
            "role": "system", 
            "content": "你是智说新语生成器。"
        },
        {
            "role": "user", 
            "content": f"{word}"
        }
    ]

    # 使用原始的Qwen2.5-7B-Instruct模型
    qwen2_5_7B_original_response = client.chat.completions.create(
        # 模型名称,从 https://cloud.siliconflow.cn/models 获取
        model="Qwen/Qwen2.5-7B-Instruct", 
        messages=qwen2_5_7B_original_messages,
        stream=True,
        max_tokens=4096
    )

    print('\033[31m使用基于Qwen2.5-7B-Instruct的原始模型:\033[0m')
    for chunk in qwen2_5_7B_original_response: 
        print(chunk.choices[0].delta.content, end='')

    # 使用基于Qwen2.5-7B-Instruct+智说新语语料微调后的模型
    qwen2_5_7B_fine_tuned_response = client.chat.completions.create(
        # 模型名称,从 https://cloud.siliconflow.cn/fine-tune 获取对应的微调任务
        model="ft:LoRA/Qwen/Qwen2.5-7B-Instruct:sc4xti61kz:test20250304:stwihwoowmueontijcke",
        messages=qwen2_5_7B_fine_tuned_messages,
        stream=True,
        max_tokens=4096
    )

    print('\n\033[32m使用基于Qwen2.5-7B-Instruct+智说新语语料微调后的模型:\033[0m')
    print(f"{word}:", end='')
    for chunk in qwen2_5_7B_fine_tuned_response:
        print(chunk.choices[0].delta.content, end='')
        
if __name__ == '__main__':
    words = ['五道口', '新时代', '创新', '降维打击', '基金']
    for word in words:
        compare_model(word)
        print('\n')

模型输出比对

使用基于Qwen2.5-7B-Instruct的原始模型:
五道口,汇聚学子的学术捷径,实则不过是通往金钱迷宫的分水岭,一旦踏入,便难觅彼岸。
使用基于Qwen2.5-7B-Instruct+智说新语语料微调后的模型:
五道口:五道口,本是通衢大路,如今却成了信息时代的迷宫,众人皆在其中寻宝,却忘了脚下是何处。

使用基于Qwen2.5-7B-Instruct的原始模型:
标榜进步的新时代,不过是一场新的封建礼教登场,天下大同的谎言下,个体依然沦为徒有其表的祭品。。
使用基于Qwen2.5-7B-Instruct+智说新语语料微调后的模型:
新时代:新时代的 богачи 奠基 construction工人 往往是亲手将沙子掺进了自己的糖衣炮弹中。

使用基于Qwen2.5-7B-Instruct的原始模型:
看似与陈规决裂的叛逆之花,实则往往是旧日套鞋中的新licant。
使用基于Qwen2.5-7B-Instruct+智说新语语料微调后的模型:
创新:本是推陈出新之道,却成了搅扰世道的洪水猛兽。

使用基于Qwen2.5-7B-Instruct的原始模型:
所谓降维打击,无非是用更高维度的智慧与资源碾压,却不知最终落败者即便喘息,也只是一场更加深刻的维度焦虑。。
使用基于Qwen2.5-7B-Instruct+智说新语语料微调后的模型:
降维打击:原本是高维生物俯瞰低维世界的优雅姿态,却在现实中演变成了强者对弱者的随意碾压。

使用基于Qwen2.5-7B-Instruct的原始模型:
看似为财富增值保驾护航的金融巨轮,实则多数人不过是随波逐流的浮萍,最终沦为填补市场波动的牺牲品。
使用基于Qwen2.5-7B-Instruct+智说新语语料微调后的模型:
基金:本是为众人托起理财的希望,却常常成了少数人才能玩转的魔方。

使用代码微调

本地进行模型微调需要使用unsloth

unsloth

一个大模型微调框架 可以使用更低的资源

GitHub - unslothai/unsloth: Finetune Llama 3.3, DeepSeek-R1 & Reasoning LLMs 2x faster with 70% less memory! 🦥

微调训练LLM,可以显著提升速度,其次显存占用也会显著减少。

使用unsloth来微调模型需要GPU,可以本地来安装CUDA驱动来支持GPU

这里我们需要搭建一个python环境来进行微调

方式一  使用colab

colab一个在线编程环境 可以微调模型  谷歌资源  国内不一定能够直接使用

Colab(Colaboratory)‌是由谷歌提供的一个在线编程环境,用户可以通过浏览器直接编写和执行Python代码,并与其他人共享和协作。Colab的主要功能包括:

  1. 免费GPU/TPU支持‌:Colab提供免费的GPU或TPU资源,特别适合深度学习模型的训练和推理,因为GPU的计算速度远快于CPU‌12。
  2. 基于Jupyter Notebook‌:Colab中的代码执行是基于Jupyter Notebook格式的.ipynb文件,这种格式允许用户分块执行代码并立即得到输出,同时也可以添加注释,非常适合轻量级的任务‌1。
  3. 易于使用和分享‌:用户可以轻松地将自己的笔记本分享给他人,进行合作编程,或者发布分享链接‌2。
  4. 预装库支持‌:Colab内置了多种科学和机器学习库,如NumPy、Pandas、TensorFlow和PyTorch等,用户无需手动安装即可直接使用这些库‌

方式二 本地安装linux

使用本地的GPU资源来微调一下模型(如果本地可以直接安装linux 则直接安装  在windows上安装linux比较繁琐)

第一步  本地window安装Linux环境

CMD查看电脑的显卡类型

nvidia-smi

启用windows linux子系统功能,安装ubuntu子系统

具体操作可以参考

【喂饭教程】使用Unsloth+Ollama3微调与部署大语言模型!精调Ollama+调用训练后的模型!(附所需文档)_哔哩哔哩_bilibili

wsl --install -d Ubuntu

具体可以参考链接下:

Ubuntu安装(WSL方式)_wsl安装ubuntu-CSDN博客

Ubuntu默认安装在C盘下,如果C盘资源紧张 可以迁移到其他盘下,参考链接

wsl下将Ubuntu从c盘移动到其他盘_wsl ubuntu 移动到其他盘-CSDN博客

第二步  本地Linux环境安装Anaconda

本地安装Linux之后然后安装python环境 ollama环境

Download Now | Anaconda

Anaconda3安装及使用_linux安装anaconda3的步骤-CSDN博客

第三步  本地Linux安装Ollama

Download Ollama on Linux

至此在linux环境中便准备好了python环境以及Ollama环境

第四步 本地安装unsloth

GitHub - unslothai/unsloth: Finetune Llama 3.3, DeepSeek-R1 & Reasoning LLMs 2x faster with 70% less memory! 🦥

方式三 网上其他免费的GPU资源

这里推荐一个极好用的网站(CPU资源是免费的  GPU需要付费)

玻尔 | 全球科学家的 AI for Science 空间站

新建一个NoteBooks 类似于jupyter环境

详细步骤具体可以参考 https://zhuanlan.zhihu.com/p/24759689349

### Transformer 大模型微调入门教程 #### 一、理解微调的概念及其重要性 微调是指在预训练好的大规模语言模型基础上,针对特定任务或领域数据集进行进一步训练的过程。通过这种方式可以使得通用性强的大规模预训练模型更好地适应具体应用场景下的需求[^1]。 #### 二、准备环境与工具包安装 为了能够顺利开展基于Transformer架构的大模型微调工作,需要提前准备好相应的开发环境并安装必要的Python库文件。这里推荐使用`transformers`库来加载预训练模型,并利用`datasets`处理自定义的数据集合;同时借助于`accelerate`加速分布式训练过程,提高效率[^2]。 ```bash pip install transformers datasets accelerate torch ``` #### 三、获取预训练模型及配置参数调整 从Hugging Face Model Hub下载所需的预训练权重文件(例如BERT、RoBERTa等),并通过修改部分超参设置以满足目标任务的要求。比如,在情感分类场景下可适当减少隐藏层维度大小从而降低过拟合风险的同时保持较好的泛化能力[^3]。 ```python from transformers import AutoModelForSequenceClassification, AutoTokenizer model_name = "bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained( model_name, num_labels=2, # 设置标签数量为2表示二元分类问题 ignore_mismatched_sizes=True # 当前版本可能与原始预训练不完全匹配时忽略尺寸差异 ) ``` #### 四、构建适配器结构实现高效迁移学习 考虑到直接全量更新整个网络可能会破坏原有良好特性的情况,因此建议采用Parameter-Efficient Fine-Tuning (PEFT)技术中的LoRA(低秩分解)方案来进行局部优化操作。这样既能在一定程度上保留住原生性能优势又不会引入过多额外计算开销。 ```python from peft import LoraConfig, get_peft_model lora_config = LoraConfig(r=8, lora_alpha=16, target_modules=["query", "value"]) peft_model = get_peft_model(model, lora_config) for name, param in peft_model.named_parameters(): if 'adapter' not in name: param.requires_grad_(False) ``` #### 五、编写训练脚本完成最终部署上线 最后一步则是按照标准流程组织好输入输出格式后执行迭代式的监督式学习循环直至收敛稳定为止。期间还需注意监控各项指标变化趋势以便及时作出相应调整措施确保整体效果达到预期目标水平之上。 ```python import evaluate metric = evaluate.load("accuracy") def compute_metrics(eval_pred): logits, labels = eval_pred predictions = np.argmax(logits, axis=-1) return metric.compute(predictions=predictions, references=labels) training_args = TrainingArguments(output_dir="./results", evaluation_strategy="epoch", learning_rate=5e-5, per_device_train_batch_size=8, per_device_eval_batch_size=8, weight_decay=0.01, save_total_limit=2) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=test_dataset, tokenizer=tokenizer, data_collator=data_collator, compute_metrics=compute_metrics ) trainer.train() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值