10分钟教你微调自己的私有大模型

模型微调简介

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

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

登录硅基流动

登录硅基流动:https://cloud.siliconflow.cn/fine-tune 去注册一个账号,然后进入模型微调 - 新建微调任务
在这里插入图片描述

新建微调任务

选择微调模型

目前有以下模型支持微调:生图模型已支持:black-forest-labs/FLUX.1-dev对话模型已支持:

  • Qwen/Qwen2.5-7B-Instruct
  • Qwen/Qwen2.5-14B-Instruct
  • Qwen/Qwen2.5-32B-Instruct
  • Qwen/Qwen2.5-72B-Instruct

在这里插入图片描述

对话模型-微调数据准备

仅支持 .jsonl 文件,且需符合以下要求:

  • 每行是一个独立的 JSON 对象;
  • 每个对象必须包含键名为 messages 的数组,数组不能为空;
  • messages 中每个元素必须包含 role 和 content 两个字段;
  • role 只能是 system、user 或 assistant;
  • 如果有 system 角色消息,必须在数组首位;
  • 第一条非 system 消息必须是 user 角色;
  • user 和 assistant 角色的消息应当交替、成对出现,不少于 1 对

数据可以自己准备,如下为数据示例:

{"messages": [{"role": "system", "content": "你是客服助手"}, {"role": "user", "content": "如何修改收货地址?"}, {"role": "assistant", "content": "您可以按以下步骤修改:\n1. 进入订单详情\n2. 点击'修改地址'\n3. 输入新地址信息\n4. 保存修改"}]}
{"messages": [{"role": "system", "content": "你是客服助手"}, {...}]}

家练习或测试的话可以去网上找一些公开数据集,这里推荐两个可以获取公开数据集的网站:

第一个:Hugging Face(🪜),我们可以把 Hugging Face 平台比作 AI 领域的 GitHub,它为开发者提供了一个集中化的平台,用于分享、获取和使用预训练模型和数据集。就像 GitHub 是代码共享和协作的中心一样,Hugging Face 是 AI 模型和数据共享的中心。在后面的实战环节中我们还会用到它:
在这里插入图片描述

如果你没有🪜,也可以退而求其次,选择国内的一些类似社区,比如 GitCode 的 AI 社区:

在这里插入图片描述

微调数据我是在网上找了一份算命大师微调数据,然后使用Python格式化为上面格式

import requests
import json

# 下载JSON文件
url = "https://huggingface.co/datasets/Conard/fortune-telling/raw/main/all_details.json"
response = requests.get(url)
data = response.json()

# 转换格式
jsonl_data = []
for item in data:
    question = item["Question"]
    response = item["Response"]

    # 构建新的JSON对象
    new_item = {
        "messages": [
            {"role": "system", "content": "你是位精通八字算命、紫微斗数、风水、易经卦象、塔罗牌占卜、星象、面相手相和运势预测等方面的算命大师"},
            {"role": "user", "content": question},
            {"role": "assistant", "content": response}
        ]
    }

    # 将新的JSON对象转换为JSONL格式(每行一个JSON对象)
    jsonl_data.append(json.dumps(new_item, ensure_ascii=False))

# 将JSONL数据写入文件
with open("output.jsonl", "w", encoding="utf-8") as f:
    for line in jsonl_data:
        f.write(line + "\n")

print("转换完成,结果已保存到 output.jsonl 文件中。")

没有Python环境的去Python官网下载安装,然后在IDEA中安装一个Python插件即可使用。或者也可以安装VS Code安装Python插件使用。

微调参数设置

其他的参数使用默认的也可以,下面是配置参考:

参数名说明取值范围建议值使用建议
Trigger Word【仅生图】触发词训练时会被添加到每张图片的描述内容的开头
Number of Repeats【仅生图】单张图片重复训练次数
Learning Rate学习速率0-0.10.0001
Number of Epochs训练轮数1-103
Batch Size批次大小1-328
Max Tokens最大标记数0-40964096根据实际对话长度需求设置
  1. 学习率解释:想象你已经学会了骑自行车(相当于预训练模型),现在要学习骑摩托车(新任务)。学习骑摩托车时,你不需要从头开始学平衡和操控,只需要在骑自行车的基础上做一些小调整,学习率就是你调整的幅度:
  • 如果调整太大(学习率过大),可能会忘记怎么骑自行车,甚至摔倒。
  • 如果调整太小(学习率过小),学骑摩托车的速度会很慢。
  • 如果调整得刚刚好(合适的学习率),你就能快速学会骑摩托车,同时不会忘记怎么骑自行车
  1. 训练轮数 :好理解,就是进行几轮训练(反复练习)
  2. 批次大小 :一次训练的数据条数,也就是同时处理的样本数,批次太大比较耗硬件,批次太小训练会比较慢。如果 GPU 内存较大,可以选择较大的批次大小,以加快训练速度。如果 GPU 内存较小,可以选择较小的批次大小,避免内存不足

官方建议配置

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

保存之后就耐心等待模型训练完成,短则几分钟,长则几天,就看排队情况,训练好之后可以看到消耗的tokens和费用。然后赋值好最终模型ID
在这里插入图片描述

调用模型

模型训练好之后我们就可以通过代码调用模型了,下面是基于 OpenAI的chat.completions 接口访问微调后模型的例子:

from openai import OpenAI
client = OpenAI(
    api_key="", # 从https://cloud.siliconflow.cn/account/ak获取
    base_url="https://api.siliconflow.cn/v1"
)

messages = [
    {"role": "user", "content": "房间挂什么画最旺运?有什么讲究?"},
]

response = client.chat.completions.create(
    model="你自己训练的最终模型",
    messages=messages,
    stream=True,
    max_tokens=4096
)

for chunk in response:
    print(chunk.choices[0].delta.content, end='')
  • api_key : 需要在API秘钥中去创阿金
  • model :你训练好的模型,最后一个模型ID,如上图

在这里插入图片描述

写到最后

使用硅基流动进行模型微调确实是比较方便的,但是也有几点不足之处,一是要给钱,二是耗时长,三是可选的模型比较少。下面我们我们将介绍另一种微调方式弥补这些不足。

文章就先写到这里,如果对你有帮助请好评!!!

### 部署与微调私有大模型 #### 准备工作 为了在Ollama平台上成功部署并微调私有的大型语言模型(LLM),需要先准备好环境。这包括安装必要的软件包以及准备用于训练的数据集[^1]。 ```bash pip install ollama-sdk ``` #### 下载预训练模型 通过访问官方资源库获取适合的模型,例如gguf格式的文件。这些模型可以在特定任务上提供良好的初始性能,从而减少从头开始训练所需的时间和计算资源。 #### 加载模型至Ollama平台 利用`ollama`命令行工具加载已下载好的模型到本地环境中: ```bash ollama load /path/to/model.gguf ``` 此操作会将指定路径下的模型文件导入到Ollama系统内以便进一步处理。 #### 自定义知识库构建 对于希望增强模型针对某一领域表现的情况,可以通过上传个性化文档来创建专属的知识库。这一过程允许用户将自己的专业知识融入到模型之中,提高其解决特定问题的能力[^2]。 #### 微调流程概述 当拥有足够的标注数据之后,就可以着手于对选定的大规模预训练模型实施针对性调整——即所谓的“微调”。具体来说,在保持大部分原有参数不变的前提下,仅修改部分网络层权重以适应新的应用场景需求[^3]。 #### 实施微调的具体步骤 启动微调作业前需编写相应的配置脚本,设定诸如学习率、批次大小等超参;接着执行如下命令发起训练请求: ```bash ollama finetune \ --model-name my_private_model \ --data-path ./custom_dataset.jsonl \ --output-dir ./finetuned_models/ ``` 上述命令假设存在名为`my_private_model`的目标模型实例,并指定了自定义数据源的位置及输出目录位置。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

墨家巨子@俏如来

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值