模型微调是一种在已有预训练模型的基础上,通过使用特定任务的数据集进行进一步训练的技术。这种方法允许模型在保持其在大规模数据集上学到的通用知识的同时,适应特定任务的细微差别。使用微调模型,可以获得以下好处:
- 提高性能:微调可以显著提高模型在特定任务上的性能。
- 减少训练时间:相比于从头开始训练模型,微调通常需要较少的训练时间和计算资源。
- 适应特定领域:微调可以帮助模型更好地适应特定领域的数据和任务
长文本基本流程
知识库基本流程
微调
微调基本流程
微调基本流程
加载预训练模型
加载数据集
设定超参数
使用在线平台微调
硅基流动
SiliconFlow, Accelerate AGI to Benefit Humanity
有关模型微调操作说明可以参考如下连接
https://docs.siliconflow.cn/cn/userguide/guides/fine-tune
新建微调任务
具体微调参数如下所示:
1.基础训练参数
参数名 | 说明 | 取值范围 | 建议值 | 使用建议 |
---|---|---|---|---|
Learning Rate | 学习速率 | 0-0.1 | 0.0001 | |
Number of Epochs | 训练轮数 | 1-10 | 3 | |
Batch Size | 批次大小 | 1-32 | 8 | |
Max Tokens | 最大标记数 | 0-4096 | 4096 | 根据实际对话长度需求设置 |
2. LoRA参数
参数名 | 说明 | 取值范围 | 建议值 | 使用建议 |
---|---|---|---|---|
LoRA Rank | 矩阵秩 | 1-64 | 8 | |
LoRA Alpha | 缩放因子 | 1-128 | 32 | |
LoRA Dropout | 随机丢弃率 | 0-1.0 | 0.05 |
3.场景化配置方案
对话模型
场景 | Learning Rate | Epochs | Batch Size | LoRA Rank | LoRA Alpha | Dropout |
---|---|---|---|---|---|---|
标准方案 | 0.0001 | 3 | 8 | 8 | 32 | 0.05 |
效果优先 | 0.0001 | 5 | 16 | 16 | 64 | 0.1 |
轻量快速 | 0.0001 | 2 | 8 | 4 | 16 | 0.05 |
微调数据集可以使用官网数据集
siliconcloud-cookbook/examples/fine-tune at main · siliconflow/siliconcloud-cookbook · GitHub
等待微调任务执行完毕 可以验证一下微调模型
from openai import OpenAI
client = OpenAI(api_key="", # 从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:{your-complete-fine-tune-model-name}",# 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')
使用代码微调
本地进行模型微调需要使用colab和unsloth
colab一个在线编程环境 可以微调模型 谷歌资源 不一定能够直接使用
colab平台
Colab(Colaboratory)是由谷歌提供的一个在线编程环境,用户可以通过浏览器直接编写和执行Python代码,并与其他人共享和协作。Colab的主要功能包括:
- 免费GPU/TPU支持:Colab提供免费的GPU或TPU资源,特别适合深度学习模型的训练和推理,因为GPU的计算速度远快于CPU12。
- 基于Jupyter Notebook:Colab中的代码执行是基于Jupyter Notebook格式的.ipynb文件,这种格式允许用户分块执行代码并立即得到输出,同时也可以添加注释,非常适合轻量级的任务1。
- 易于使用和分享:用户可以轻松地将自己的笔记本分享给他人,进行合作编程,或者发布分享链接2。
- 预装库支持:Colab内置了多种科学和机器学习库,如NumPy、Pandas、TensorFlow和PyTorch等,用户无需手动安装即可直接使用这些库
unsloth
一个大模型微调框架 可以使用更低的资源
GitHub - unslothai/unsloth: Finetune Llama 3.3, DeepSeek-R1 & Reasoning LLMs 2x faster with 70% less memory! 🦥
微调训练LLM,可以显著提升速度,其次显存占用也会显著减少。
使用unsloth来微调模型需要GPU,可以本地来安装CUDA驱动来支持GPU
这里可以使用一些在线的免费GPU实验一下
免费GPU平台教程,助力你的AI, pytorch tensorflow 支持cuda ,免费算力 ,tesla 100 ,显卡免费使用_阿里天池免费gpu-CSDN博客
在线免费GPU
5种在线GPU算力资源白嫖指南,详细分析让新手小白则需选择,轻松上手!_哔哩哔哩_bilibili
No NVIDIA GPU found? Unsloth currently only supports GPUs 问题解决
如果你在运行一个需要使用GPU加速的程序(如Unsloth或任何其他需要CUDA支持的深度学习框架)时遇到“No NVIDIA GPU found. Unsloth currently only supports GPUs”的错误,这通常意味着你的系统没有检测到NVIDIA GPU或者相应的驱动程序没有正确安装。以下是一些解决这个问题的步骤:
检查NVIDIA GPU:
确保你的计算机确实有NVIDIA GPU。你可以在设备管理器中查看是否有NVIDIA的显示适配器。
安装NVIDIA驱动程序:
如果你的系统中有NVIDIA GPU,但是系统没有检测到,或者检测到的驱动版本过旧,你需要安装或更新NVIDIA驱动程序。你可以通过NVIDIA官方网站下载最新的驱动程序。
访问 NVIDIA官方驱动程序下载页面。
Download The Official NVIDIA Drivers | NVIDIA
选择你的GPU产品类型和相应的操作系统版本。
下载并安装适合你GPU的最新驱动程序。
检查CUDA安装:
如果你已经安装了NVIDIA GPU和相应的驱动程序,但是仍然遇到问题,可能是因为CUDA Toolkit没有被正确安装或者版本不兼容。
访问 NVIDIA CUDA Toolkit下载页面。
CUDA Toolkit 12.8 Downloads | NVIDIA Developer
选择合适的操作系统和CUDA版本进行下载和安装。
确保安装过程中包括了驱动组件。
环境变量配置:
确保环境变量正确设置,以便系统可以找到CUDA库。通常,这包括设置PATH和LD_LIBRARY_PATH(在Linux上)或CUDA_PATH(在Windows上)。
在Linux上,你可以在终端中运行以下命令来设置环境变量:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
在Windows上,你可以在系统属性中编辑环境变量,或者通过命令行:
set PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin;%PATH%
set CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1
替换路径为你的CUDA安装路径。
重启计算机:
在安装或更新驱动程序和CUDA之后,重启你的计算机以确保所有设置生效。
验证安装:
使用nvidia-smi命令(在Linux上)或NVIDIA系统工具(在Windows上)来验证GPU和驱动程序是否正确安装和运行。
通过上述步骤,你应该能够解决“No NVIDIA GPU found”的问题,并成功运行需要GPU加速的程序。如果问题仍然存在,可能需要检查是否有其他系统配置或兼容性问题。