无需代码,几乎免费,有手就行的大模型微调?
开源出来的模型相当于一个大学生,什么都会一点,但是什么都不精通,而经过数据训练微调的大模型,就好比报了个培训班,培训班的质量决定了专业领域的分析程度。开个玩笑,你甚至可以给通过增量微调,训练你和女朋友的聊天数据,学习你的语气,让 ai 一天 24h 陪你女朋友聊天【狗头保护】通过我的邀请链接进行注册,然后获得 14 元余额,然后自己再拉自己的小号,左脚踩右脚,直接升天。我以“AI 换名为例子”微调
前言
之前也是白嫖了老多硅基流动的赠送余额
然后没事的时候找模型,发现硅基流动自带了一个微调功能
你只需要整理微调数据集,再调整几个参数,就可以很快速的微调了。
解释一下什么是微调
开源出来的模型相当于一个大学生,什么都会一点,但是什么都不精通,而经过数据训练微调的大模型,就好比报了个培训班,培训班的质量决定了专业领域的分析程度。
开个玩笑,你甚至可以给通过增量微调,训练你和女朋友的聊天数据,学习你的语气,让 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 requests
import json
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import 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 OpenAI
client = 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工具,需要更改的地方也差不多【深入研究除外】
最后再提一句,大概应用在客服、小型应用身上。普通人可以尝试玩一玩,还是挺有意思的。
更多推荐
所有评论(0)