现在招聘市场中,大模型应用开发的岗位还是蛮多的,不管是不是泡沫,至少是现在的风口,学习学习应该没有坏处哈哈,,之前学习过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)

最后,点击开始训练就好,第一次可能会下载模型之类的,如果卡住了,可以看看命令行的日志。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐