跑通自己的第一个模型为微调项目【llama-factory + Qwen + ruozhiba】
现在招聘市场中,大模型应用开发的岗位还是蛮多的,不管是不是泡沫,至少是现在的风口,学习学习应该没有坏处哈哈,,之前学习过Agent、RAG之类的操作,但是对于大模型微调没有涉及所以来学习学习。
大模型微调主流的就是Llama-factory,那就先跑通一个demo再说吧~
核心概念
常见分类?
监督微调,含指令微调(明确任务指令,如翻译)
对话微调(多轮对话数据,如客服)
领域适配(特定领域术语,如医疗)
⽂本分类(结构化标签,如情感分析)
模型推理微调(思维链标注,如数学解题)
知识蒸馏,将复杂模型知识迁移到轻量模型,降低推理成本
强化学习,结合⼈类反馈优化⽣成质量,提升安全性与⻛格⼀致性
多模态微调,处理⽂本、图像、语⾳等跨模态数据,实现图⽂问答、视频分析等场景。
主流格式
Alpaca数据集
{
"instruction": "解释什么是机器学习,并举例说明其在⽇常⽣活中的应⽤",
"input": "", // 可选字段,当指令本⾝⾜够明确时可省略
"output": "机器学习是⼈⼯智能的⼀个分⽀,指计算机通过算法从数据中学习规律,⽆需explicit 编程即可完成特定任务。\n⽇常⽣活中的应⽤包括:\n1. 推荐系统:如电商平台根据浏览历史推荐商品;\n2. 语⾳助⼿:如 Siri 通过学习识别⽤⼾语⾳指令;\n3. 垃圾邮件过滤:⾃动识别并分类垃圾邮件。"
}
ShareGPT数据集
{
"conversations": [
{
"from": "human",
"value": "你能帮我规划⼀个3天的北京旅⾏计划吗?"
},
{
"from": "gpt",
"value": "当然可以!以下是3天北京旅⾏计划建议:\nDay1:上午游览天安⻔⼴场和故宫,下午去景⼭公园俯瞰故宫全景,晚上逛王府井步⾏街。\nDay2:上午登⻓城(推荐⼋达岭或慕⽥峪),下午返回市区后参观南锣⿎巷胡同。\nDay3:上午游览颐和园,下午去798艺术区感受⽂艺氛围。\n需要调整节奏或增加特定景点吗?"
},
{
"from": "human",
"value": "⻓城想选⼈少⼀点的,有其他推荐吗?"
},
{
"from": "gpt",
"value": "如果想避开⼈流,推荐⻩花城⽔⻓城,它兼具⻓城的雄伟和⽔乡的秀美,游客相对较少。可以上午出发,⻋程约1.5⼩时,下午还能在附近体验农家菜,傍晚返回市区。"
}
]
}
核心参数
训练轮数:指遍历训练数据次数,少则不熟、多则过拟合;
学习率:决定参数调整幅度,⼤则进步快易⾛偏,⼩则稳定但慢;
批量大小:是每次更新⽤的样本数,⼤则快⽽粗、⼩则慢⽽细。实际需调参验证,默认即可。
LLaMA-Factory
通⽤场景:由于其⽀持多种模型和训练算法,适⽤于各种通⽤的⼤语⾔模型训练和微调场景,⽆论是⽂本⽣成、情感分析还是机器翻译等任务,都可以使⽤LLaMaFactory进⾏模型的定制化训练。
企业级应⽤:提供了APIServer和⼀站式WebUIBoard,⽅便企业进⾏模型的管理和部署。零代码:适合不会写代码或代码基础⽐较弱的同学快速上⼿进⾏微调。
快速开始
1、环境配置
首先肯定是安装环境
我是在远程服务器中运行llama-factory程序,然后在自己的电脑上打开窗口端进行操作的
因此,以下操作默认在这样的环境中进行。
服务器默认安装conda,没有安装的根据下面教程安装:
创建conda环境,这里的python版本建议看一看llamafactory官网的要求,现在官网推荐的版本是3.11

conda create -n llama-factory python=3.11
conda activate llama-factory
然后在github拉源码,安装
git clone --depth 1 https://github.com/hiyouga/LlamaFactory.git
cd LlamaFactory
pip install -e .
pip install -r requirements/metrics.txt
安装后建议进入python环境,检查torch能否使用cuda,我按照这个命令执行完之后,显示找不到显卡,原因是cuda驱动和torch版本不匹配,解决方案是把报错送给豆包,重新安装torch就好了,不影响原环境使用
import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available()) #输出为True,则安装无误
2、打开可视化页面
因为llama-factory服务在服务器上,而希望在本地打开网页,因此使用共享端口的方法
本地执行:
ssh -L 7860:localhost:7860 服务器用户名@服务器ip -p 服务器ssh的端口号
执行该命令后,应该会在本地提示输入密码,然后就是正常连接远程服务了
cd到llama factory源码的位置,执行:
conda activate llama-factory
llamafactory-cli webui
按理说页面就可以打开了
3、准备训练
打开之后的页面应该就是下面的样子了,左边语言选择中文;模型我用的Qwen/Qwen2-1.5B-Instruct,因为只是为了跑通,就只用1.5B了;最右边是模型路径,如果本地有权重可以附上路径,没有的话默认,选择魔搭社区, 程序会自动下载,命令行可以看到下载进度;微调方式选择lora
下面选择train选项框;选择SFT监督微调

随后就是数据集准备,为了便捷,我是用弱智吧的QA作为语料。
数据库语料具体在ruozhiba_qa.json这个文件中
llama-factory要求数据放在./data/文件夹下,所以自行copy过去,或者软连接过去都可以,这里不给命令了
除了复制文件之外,还需要修改dataset_info.json,就是在json数据中加上自己的数据集名和文件名就好。两项配置完之后,在网页数据集下拉框中就可以看到咱们自己注册的数据集了
git clone https://github.com/FunnySaltyFish/Better-Ruozhiba.git
在数据集配置好之后,如果显示数据集keyError,input之类的,那就需要用下面的脚本处理一下,也就是把脚本放到./data文件夹下,运行一下就好了,数据集格式的问题。
import json
import os
def fix_llama_factory_dataset(input_path, output_path=None):
"""
为 LlamaFactory 数据集自动添加缺失的 input 字段
:param input_path: 原始数据集路径
:param output_path: 修复后保存路径(不填则覆盖原文件)
"""
# 默认覆盖原文件
if output_path is None:
output_path = input_path
# 读取原始数据
with open(input_path, "r", encoding="utf-8") as f:
raw_data = json.load(f)
fixed_data = []
for item in raw_data:
# 复制原始数据
new_item = item.copy()
# 自动补全 input 字段
if "input" not in new_item:
new_item["input"] = ""
# 确保必须字段存在(可选加固)
if "instruction" not in new_item:
new_item["instruction"] = ""
if "output" not in new_item:
new_item["output"] = ""
fixed_data.append(new_item)
# 保存修复后的数据
with open(output_path, "w", encoding="utf-8") as f:
json.dump(fixed_data, f, ensure_ascii=False, indent=2)
print(f"✅ 数据集修复完成!")
print(f"📂 原始文件:{input_path}")
print(f"📂 修复文件:{output_path}")
print(f"📊 处理条数:{len(fixed_data)}")
print(f"🔧 修复内容:自动添加了缺失的 input 字段(空字符串)")
# ====================== 在这里修改你的文件路径 ======================
if __name__ == "__main__":
# 替换成你的数据集路径(相对路径/绝对路径都可以)
YOUR_DATASET_PATH = "ruozhiba_qa.json"
# 运行修复
fix_llama_factory_dataset(YOUR_DATASET_PATH)
最后,点击开始训练就好,第一次可能会下载模型之类的,如果卡住了,可以看看命令行的日志。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)