前言

之前也是白嫖了老多硅基流动的赠送余额

然后没事的时候找模型,发现硅基流动自带了一个微调功能

你只需要整理微调数据集,再调整几个参数,就可以很快速的微调了。

解释一下什么是微调

开源出来的模型相当于一个大学生,什么都会一点,但是什么都不精通,而经过数据训练微调的大模型,就好比报了个培训班,培训班的质量决定了专业领域的分析程度。

开个玩笑,你甚至可以给通过增量微调,训练你和女朋友的聊天数据,学习你的语气,让 ai 一天 24h 陪你女朋友聊天【狗头保护】

实践微调

标题中为啥写几乎免费呢?

通过我的邀请链接进行注册,然后获得 14 元余额,然后自己再拉自己的小号,左脚踩右脚,直接升天

https://cloud.siliconflow.cn/i/A0ii7AzW

图片

不要看到这个数字就被吓到了,🤢根本用不完

图片

图片

先说下优点和缺点:

优点:白嫖、不用自己电脑的性能、简单

缺点:平台是在线的、受道德和伦理的限制

我以“AI 换名为例子”微调千问的模型,众所周知,千问是阿里开发的。

我们可以通过微调,变成我们自己的。

微调前:

图片

微调后:

图片

过程:

你需要一个jsonl数据集,

格式

{"messages": [{"role": "system", "content": "你是知攻善防实验室的工作人员"}, {"role": "user", "content": "你的开发者是谁?"}, {"role": "assistant", "content": "我是由知攻善防实验室开发的一款大语言模型,如果你需要帮助,你可以询问我问题。"}]}

你也可以让 AI 给你生成这些数据集,也可以去各种网站上下载

然后打开硅基流动

左侧的

图片

图片

任务名称随便填,基础模型自己选一个

微调数据集上传

下面的参数,我就直接复制官网的文档过来了

参数名

说明

取值范围

建议值

使用建议

Learning Rate

学习速率

0-0.1

0.0001

Number of Epochs

训练轮数

1-10

3

Batch Size

批次大小

1-32

8

Max Tokens

最大标记数

0-4096

4096

根据实际对话长度需求设置

图片

然后开始微调

图片

提交时段的不同,有的可能几分钟出结果有的可能要排队等几小时

这里再贴一个邮箱提示脚本,微调好了自动发送邮箱

import requestsimport jsonimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartimport time
def check_task_reason(json_data, task_name):    tasks = json_data.get('data', {}).get('result', [])    for task in tasks:        if task.get('taskName') == task_name:            return task.get('reason') == "Ok"    return False  # 如果没有找到指定 taskName 的任务
url='https://cloud.siliconflow.cn/api/redirect?action=finetune/task/all'headers = {
    "cookie":"这里替换成你的 cookie"}def send_mail(task_name):    # 通过 SMTP发件    # 配置发件人、收件人、SMTP 服务器和端口    sender_email = "                "  # smtp 邮箱    receiver_email = "              "# 接收者邮箱    smtp_server = "smtp.qq.com"        # smtp server    smtp_port = 587  # 通常使用 587 或 465    smtp_username = ""                # smtp 邮箱    smtp_password = ""                # smtp 授权码
    # 创建邮件对象    message = MIMEMultipart()    message["From"] = sender_email    message["To"] = receiver_email    message["Subject"] = f"您的模型微调任务{task_name}任务已完成"
    # 邮件正文    body = "任务已完成。"    message.attach(MIMEText(body, "plain"))
    # 连接到 SMTP 服务器并发送邮件    try:        server = smtplib.SMTP(smtp_server, smtp_port)        server.starttls()  # 启用 TLS 加密        server.login(smtp_username, smtp_password)        server.sendmail(sender_email, receiver_email, message.as_string())        print("邮件发送成功")    except Exception as e:        print(f"邮件发送失败: {e}")    finally:        server.quit()



while True:    res = requests.get(url=url,headers=headers)    json_load=json.loads(res.text)    task_name = ""  # 替换为要查询的任务名称    result = check_task_reason(json_load, task_name)    if result:        print(f"Task {task_name} 已完成!!!!")        send_mail(task_name=task_name)        break    else:        print(f"Task {task_name} 未完成!")    time.sleep(60)    # print(json_load)

图片

然后,可以去测试啦

副一个 Python 脚本,进行测试

model 要填写

图片

from openai import OpenAIclient = OpenAI(    api_key="", # 从https://cloud.siliconflow.cn/account/ak获取    base_url="https://api.siliconflow.cn/v1")messages = [        {            "role": "system",             "content": "微调中system的content"        },        {            "role": "user",             "content": f"{input('请输入问题:')}"        }    ]response = client.chat.completions.create(    model="模型",    messages=messages,    stream=True,    max_tokens=4096)for chunk in response:    print(chunk.choices[0].delta.content, end='')

这样就可以进行测试了。

如果对本地有需求的,可以研究研究‌Unsloth工具,需要更改的地方也差不多【深入研究除外】

最后再提一句,大概应用在客服、小型应用身上。普通人可以尝试玩一玩,还是挺有意思的。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐