五、AIGC大模型_04LLaMA-Factory基础知识与SFT实战
1、LLaMA-Factory 基本介绍
1.1 定义
LLaMA-Factory 是一个开源的大型语言模型(LLM)微调框架,旨在帮助开发者和研究人员轻松地对预训练语言模型进行定制化训练和优化
1.2 功能特点
-
支持多种预训练模型 LLaMA Factory 支持超过 100 种主流的大型语言模型,包括 LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Qwen2-VL、DeepSeek、Yi、Gemma、ChatGLM、Phi 等
-
丰富的微调方法 提供多种微调技术,如增量预训练、指令监督微调(SFT)、基于人工反馈的强化学习微调(RLHF)、PPO 训练、DPO 训练等
-
多种运算精度和优化算法 支持 32 比特全参数微调、16 比特冻结微调、LoRA 微调,以及基于 AQLM/AWQ/GPTQ/LLM.int8 的 2/4/8 比特 QLoRA 微调
-
低代码操作界面 提供基于 Web 的用户界面(LLaMA Board),用户无需编写代码即可灵活定制模型的微调过程
-
高效训练与优化 通过引入 GaLore、Unsloth 等方案,降低训练显存占用,提高训练效率
1.3 使用场景
LLaMA Factory 适用于多种自然语言处理(NLP)任务,如智能客服、机器翻译、语音识别等,能够帮助用户快速将开源大模型适配到特定的应用场景
1.4 优势
-
开箱即用:提供了高层次抽象的调用接口,用户可以快速上手
-
降低门槛:通过 WebUI 和详细的文档支持,即使是初学者也能轻松进行模型微调
-
灵活性高:支持多种模型和微调方法,用户可以根据需求选择最佳方案
LLaMA Factory 是一个功能强大且易于使用的工具,适合希望在开源大模型基础上进行定制化开发的开发者和研究人员
2、SFT 基本介绍
2.1 SFT 的定义和作用
SFT(Supervised Fine-Tuning,即:指令微调)属于大模型三大训练阶段(预训练-->监督指令微调-->偏好优化)中的第二阶段,是指在预训练模型基础上,通过标注好的特定任务数据进行进一步训练的方法,其目的是让模型更好地适应特定任务或领域
2.2 SFT 的主要应用场景
SFT 可以应用于以下几种场景:
-
自我认知(Self-Cognition) 通过 SFT,可以修改模型的自我认知,调整模型的身份(identity)或行为模式,例如:通过指令微调让模型更准确地识别自己的角色或任务
-
私有知识(Private Knowledge)/ 具体任务(Specific Tasks) SFT 可以让模型学习特定领域的知识或任务,例如:企业内部数据、专业领域的问答等(这些数据通常是私有的,需要通过微调让模型适应)
-
公共知识(Public Knowledge) 对于通用领域,SFT 可以使用公开的标注数据集,让模型学习更广泛的知识,例如:通用问答、语言风格调整等
2.3 SFT 的常用技术
在 LLaMA Factory 中,SFT 可以通过以下几种技术实现:
-
全参数微调(Full Parameter Fine-Tuning):更新模型的所有参数,适用于有大量高质量数据的情况
-
LoRA(Low-Rank Adaptation):通过添加低秩矩阵进行微调,既保留预训练知识,又学习新任务模式
-
冻结微调(Freeze Fine-Tuning):冻结部分模型参数,仅对特定层进行训练
3、使用 LLaMA-Factory 进行 SFT
3.1 准备工作(LLaMA-Factory的安装)
Step1: 准备一台有显卡的电脑(如果自己电脑没有显卡,或者显卡资源有限,则可以考虑一些第三方GPU云平台,比如驱动云(https://platform.virtaicloud.com/gemini_web/auth/register?inviteCode=b46d0fbe1656c9b604de6d014b8a454d)、魔搭社区(https://www.modelscope.cn/my/mynotebook/preset)、AutoDL(https://www.autodl.com/login)等等
Step2: 下载测试用的模型
下载一个小一点的模型进行学习测试即可,比如:Qwen2.5-0.5B-Instruct
下载网址:魔搭社区
Step3: 下载 LLaMA-Factory 源代码
- 方法一:使用git下载(适用于服务器访问外网较为顺畅的情况)
- 执行命令:git clone GitHub - hiyouga/LLaMA-Factory: Unified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024) (或者:git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git)
- 方法二:上传 LLaMA-Factory.zip(适用于服务器难以访问外网的情况)
- 先找个网络好的电脑,下载LLaMA-Factory.zip,然后上传到服务器上,最后执行命令(unzip LLaMA-Factory.zip)来解压LLaMA-Factory
- 注:操作完毕之后,可将Qwen2.5-0.5B-Instruct与LLaMA-Factory放在同一目录(比如都在/gemini/code目录下)
Step4: 安装 LLaMA-Factory 依赖包
- 先执行:cd LLaMA-Factory
- 再执行:pip install -e ".[torch,metrics]"
- 最后,可用【llamafactory-cli version】命令验证是否安装成功
Step5: 映射端口(各个平台都不一样)
- 驱动云:在页面上做配置即可
- 魔搭社区——执行命令:export GRADIO_SERVER_PORT=7860 GRADIO_ROOT_PATH=/${JUPYTER_NAME}/proxy/7860/
Step6: 启动 LLaMA-Factory
- 执行命令:llamafactory-cli webui
- 驱动云:复制开通端口后的网址,粘贴到浏览器地址栏进行访问
- 魔搭社区——点击网址:http://0.0.0.0:7860
Step7: 调整llamafactory页面模块内容
(1)Language/语言切换为zh,表示使用中文
(2)模型名称填写Qwen2.5-0.5B-Instruct
(3)模型路径填写/gemini/code/Qwen2.5-0.5B-Instruct(建议像这样填写绝对路径,简单粗暴)
(4)模式选择【Chat】,并点击【加载模型】按钮
(5)加载模型成功之后,到页面最底端,任意输入自己想与模型进行交流的问题,并点击【Submit】按钮进行提交
(6)查看对话结果(能正常返回结果,则代表环境准备初步可行)
3.2 基本步骤
通过 LLaMA Factory 进行 SFT 的基本步骤如下:
-
选择模型和数据集:在 LLaMA Factory 的 Web UI 或命令行界面中选择预训练模型和标注数据集
-
配置微调参数:设置学习率、批大小、训练轮次等参数
-
开始微调:启动微调过程,并实时监控训练进度
-
评估模型:使用验证集或测试集评估微调后的模型性能
4、LLaMA-Factory的SFT实战之自我认知
4.1 背景
如上文【3.1 准备工作——Step7——(6)】中的内容所示,我们问模型:“你是谁?”,模型给到的结果是 “我是来自阿里云的超大规模语言模型,我叫通义千问。”
正常来讲,这个回答是没有问题的,但如果我们在做商业化,客户希望把模型的“自我认知”内容改成自己公司的名称和产品,比如: “我是来自不正常人类研究中心的超大规模语言模型,我叫火云邪神”,那么应该如何实现呢?
4.2 解析
在LLaMA-Factory中,有着自我认知相关的数据集,即:LLaMA-Factory/data/identity.json
我们简单查看一下,发现其内容如下图所示:
通过观察,可发现自我认知的数据集包括以下两个关键性内容:
-
包含中英双语
-
用name标识产品名称,用author标识作者名称
因此,我们只需要将identity.json的内容进行改动,将对应的name分别改成中文和英文的产品名称,将对应的author分别改成中文和英文的作者名称,最后带入模型中进行SFT训练即可
4.3 实操
Step1: 按照【4.2 解析】章节的内容,备份原有identity.json文件内容,修改后覆盖到原目录(LLaMA-Factory/data/identity.json)
Step2: 切换LLaMA-Factory到SFT模式,选择identity数据集(选择后也可以点击右侧【预览数据集】按钮进行预览),确认内容确实无误
Step3: 填写好训练结果的输出目录,然后点击【开始】按钮,即可开始进行微调训练,同时可以查看训练预计耗时、损失函数图像等内容
Step4: 训练完毕之后,将上面填写的训练结果输出目录,替换到模型路径中,并重新进入对话模式,加载通过自我认知微调训练之后的模型
Step5: 加载好之后,我们再次问模型:“你是谁?”,模型给到的结果是 “您好,我是 {{火云邪神}},由 {{不正常人类研究中心}} 开发,旨在为用户提供有针对性的回答和帮助。”
由此可见,通过identity数据集的微调,已经修改了模型的自我认知
备注:在修改自我认知数据集中的内容时,可以把name和author周围的大括号{{}}也一起去掉,如果不去掉,经过自我认知之后的交互结果也会保留大括号,如下图所示
5、LLaMA-Factory的SFT实战之模型测评
5.1 背景
在上文【4、LLaMA-Factory的SFT实战之自我认知】的内容中,我们通过identity数据集的微调,修改了模型的自我认知
但是,我们可能会发现一些新的问题,比如:
通过观察上面的内容,我们发现:对于除了自我认知之外的问题,模型都像是在避而不答,和微调前的效果差别也太大了!好像被调整废了!没有通用知识交流的能力了!
这不是我们想要的效果,我们既需要模型调整自我认知,又希望模型能继续保持通用知识能力,那我们应该怎么做呢?
5.2 解析
在模型进行微调时,数据集的选择是至关重要的,单一的数据集往往容易造成模型的过拟合
基于此模型路径,我们可以使用以下命令来进行测评,确认过拟合的事实
CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval \
--model_name_or_path /gemini/code/Qwen2.5-0.5B-Instruct-full-02 \
--template qwen \
--task cmmlu_test \
--lang zh \
--n_shot 5 \
--batch_size 4 \
--trust_remote_code True
为此,我们可以引入一些通用知识的数据集,比如alpaca_zh_demo.json
,将其与identity.json
一起做微调(实际项目中,具体选择哪些数据集,是需要根据实际业务场景挑选,这里只做示例)
5.3 实操
Step1: 重新选择最原始的模型,切换LLaMA-Factory到SFT模式,同时选择identity、alpaca_zh_demo两个数据集,填写好新的训练结果输出目录,点击【开始】按钮再次做微调训练
Step2: 训练完毕之后,将上面填写的新的训练结果输出目录,替换到模型路径中,并进入对话模式,加载重新通过自我认知微调训练之后的模型,查看其效果
可发现:通过“自我认知”+“基础知识”数据集的微调,模型不仅调整了自我认知,还保持了通用知识能力
6、LLaMA-Factory的SFT实战之广告文案设计
6.1 背景
随着DeepSeek引发的新一轮人工智能浪潮,AI已进入全民化时代,AI相关的培训教程更是层出不穷,大家可能看过这样的教程:作为一名营销岗位的职员,你可以让AI替你生成广告文案,比如告诉AI——“请帮我生成一条互联网风格的服装介绍文案”
然而,好看的皮囊千篇一律,有趣的灵魂万里挑一,让AI结合“前人智慧”设计的文案可能是好用的,但终究不是自己的风格,如果想要AI按照自己的语言风格来设计对应的广告文案,应该怎么做呢?
6.2 解析
想要AI按照我们自己的语言风格来设计对应的广告文案,则需要对应的AI模型能学习我们的语言风格,即:需要我们将以往与之相关的语言数据汇总起来,并将其转换成数据集,再通过此数据集对模型进行SFT处理
6.3 实操
Step1: 将以前我们自己设计的广告文案内容汇总起来,形成《train.csv》文件(如下图所示:第一列表示商品关键字,第二列表示根据关键字生成的具体广告文案)
Step2: 将《train.csv》文件转换成数据集格式
标准的数据集格式如下:
[ { "system": "系统提示词(选填)", "instruction": "人类指令(必填)", "input": "人类输入(选填)", "output": "模型回答(必填)", "history": [ ["第一轮指令(选填)", "第一轮回答(选填)"], ["第二轮指令(选填)", "第二轮回答(选填)"] ] } ]
示例:
[ { "instruction": "请解释什么是人工智能?", "input": "人工智能在医疗领域的应用。", "output": "人工智能是利用计算机技术和算法模拟人类智能行为的学科。在医疗领域,它可以帮助医生进行疾病诊断、药物研发和患者监护等。", "system": "请用通俗易懂的语言回答。", "history": [ ["什么是机器学习?", "机器学习是人工智能的一个分支,它让计算机通过数据学习规律。"], ["它有哪些应用场景?", "机器学习广泛应用于图像识别、自然语言处理等领域。"] ] } ]
对于我们的《train.csv》文件而言,若需将其转换成标准的数据集格式,则其实并不需要history字段,比如:
[ { "instruction": "请根据用户输入的产品关键词,生成一段互联网风格的广告文案:", "input": "裙,简约,条纹,线条,撞色,鱼尾裙,无袖", "output": "圆形领口修饰脖颈线条,适合各种脸型,耐看有气质。无袖设计,尤显清凉,简约横条纹装饰,使得整身人鱼造型更为生动立体。加之撞色的鱼尾下摆,深邃富有诗意。收腰包臀,修饰女性身体曲线,结合别出心裁的鱼尾裙摆设计,勾勒出自然流畅的身体轮廓,展现了婀娜多姿的迷人姿态。", "system": "你是一个互联网文案设计专家!" } ]
为了将我们的《train.csv》文件内容全部转换成标准格式,我们应当写一套python代码来做转换,比如:
# 读取数据
import pandas as pd
# 方便写入数据
import json
# 读取数据
data = pd.read_csv(filepath_or_buffer="./train.csv")
# 查看信息
data.info()
# 采样查看
data.sample(n=5)
# 随机抽取 一部分个样本
num_samples = 1000
samples = data.sample(n=num_samples)
# 重置索引
samples.reset_index(inplace=True, drop=True)
print(samples)
# 格式转换
results = []
for idx in range(num_samples):
sample = samples.loc[idx, :]
results.append({
"instruction": "请根据用户输入的产品关键词,生成一段互联网风格的广告文案:",
"input": sample["content"],
"output": sample["summary"],
"system": "你是一个互联网文案设计专家!"
})
# 数据保存
with open(file="ad_sft_design.json", mode="w", encoding="utf8") as f:
json.dump(obj=results, fp=f, ensure_ascii=False)
Step3: 将数据集进行注册
在 LLaMA-Factory 中,dataset_info.json
是一个用于定义和管理数据集的关键配置文件,它存储在 LLaMA-Factory/data
目录下,用于描述所有可用的数据集,包括本地数据集和在线数据集
-
定义数据集结构:
dataset_info.json
文件中包含了每个数据集的描述,包括数据文件的名称、数据格式以及各个字段的映射关系。 -
支持多种数据格式:LLaMA-Factory 支持多种数据格式,如 Alpaca 格式、ShareGPT 格式、预训练数据集格式、偏好数据集格式以及多模态数据集格式。
-
自定义数据集:如果需要使用自定义数据集,必须在
dataset_info.json
文件中添加相应的数据集描述。
所以,如果想在LLaMA-Factory中选择到我们自定义的ad_sft_design.json数据集,则除了要将其放在LLaMA-Factory/data目录(其他目录也可以,只要LLaMA-Factory所在服务器能访问到数据集文件就行),还需要在dataset_info.json文件中对其进行注册
注册方法:
(1)预览默认的dataset_info.json文件
(2)了解注册格式
标准格式为: "数据集名称": { "file_name": "数据集文件路径", "formatting": "数据集格式", "columns": { "数据集参数": "数据集字段映射" } }
其中,columns中有哪些参数,取决于formatting(数据集格式)是什么(详情参考:https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README_zh.md),即:
-
若formatting=Alpaca(如果没有加上formatting参数,则默认也是Alpaca),则columns会包含prompt(指令)、query(输入)、response(输出)、system(系统提示词)、history(历史对话)这几个字段
-
若formatting=ShareGPT,则columns会包含messages(消息对话)、system(系统提示词)、tools(工具调用)这几个字段
(3)结合上述内容,可知:要想完成数据集的注册,则需要整理好注册格式,再添加到dataset_info.json文件中
即:将下面的内容
"ad_sft_design": { "file_name": "ad_sft_design.json", "columns": { "prompt": "instruction", "query": "input", "response": "output", "system": "system" } }
添加到dataset_info.json文件中(这里为了方便演示,我们直接添加到文件最上面),如下图所示
Step4: 在选择ad_sft_design数据集,进行SFT操作
在LLaMA-Factory中,选择原始的Qwen2.5-0.5B-Instruct模型,或经过我们的自我认知与测评训练后导出的模型(full模式不需要导出,lora模式需要导出),进行SFT训练
Step5: 效果测试
加载微调好的模型,输入关键字,查看模型输出的文案
7、附加说明
7.1 微调方法
在上面的实战中,对于微调方法这一个选项,我们都是选择了full,而在实际项目中,除了full之外,lora也是常用的微调方法
7.1.1 全参微调(Full Parameter Tuning)
-
定义:全参微调是指对模型的所有参数进行微调,即在预训练模型的基础上,对所有权重进行更新,以适应特定的任务或数据集
-
特点
-
全部参数参与学习:模型的所有权重都会根据下游任务进行调整
-
显存需求高:由于所有参数都参与更新,显存需求较大(例如,一个 7B 参数的模型可能需要 70GB 的显存)
-
训练速度快:因为所有参数都在更新,模型能够更快地适应新任务
-
效果好:通常能够达到最佳的性能,因为模型的每一部分都在针对特定任务进行优化
-
资源要求高:需要大量的计算资源和显存支持
-
-
适用场景
-
资源充足:如果你有足够的显存和计算资源,全参微调是首选
-
任务重要性高:当任务的性能至关重要时,全参微调能够提供最佳效果
-
7.1.2 LoRA 低秩适配(Low-Rank Adapter Tuning)
-
定义:LoRA 是一种参数高效的微调方法,通过在关键层(通常是 QKV 层)中插入低秩矩阵来模拟微调,而不是直接更新所有参数
-
特点
-
只瞄准关键层:LoRA 主要对模型的关键层(如 QKV 层)进行微调
-
低秩分解:将大矩阵分解为两个小矩阵的乘积,例如将一个 1024×1024 的矩阵分解为 1024×8 和 8×1024 的矩阵
-
显存需求低:只需要全参微调的 1/5 显存
-
训练轮次多:需要更多的训练轮次来达到较好的效果,通常至少是全参微调的 20 倍
-
工程折中:在资源有限的情况下,LoRA 是一种很好的折中方案,能够在较低的资源消耗下实现较好的性能(时间换空间)
-
-
适用场景
-
资源有限:当显存或计算资源不足时,LoRA 是一种有效的选择
-
快速原型开发:在需要快速验证模型性能时,LoRA 可以快速实现微调
-
备注:如果希望以后能在微调好的模型的基础上继续做调整,则可以将微调好的模型进行导出(full模式下不需要导出,lora模式下需要导出,导出需要填写原始模型路径、微调好的模型路径以及导出目录)
7.2 微调的重要考虑内容
微调的输出格式和知识本身是微调过程中需要考虑的两个重要方面:
-
输出格式:
-
格式化输出:微调时需要明确模型的输出格式,例如是否需要生成特定的文本格式、是否需要输出概率分布等
-
任务适应性:根据任务需求,调整模型的输出格式,使其能够更好地满足下游应用
-
-
知识本身:
-
知识注入:在微调过程中,可以通过数据增强、提示(prompt)等方式将特定的知识注入模型
-
知识对齐:确保模型输出的知识与任务需求一致,避免模型生成不符合任务要求的内容
-
7.3 环境要求
7.3.1 软件要求
7.3.2 硬件要求
7.4 多机多卡训练
在实际开发中,一个显卡往往不够用,我们也在一些多媒体平台上听说过一些大公司有构建“千卡集群”、“万卡集群”来进行大规模的模型训练
那么,这么多显卡,应该如何与服务器连接起来并行使用呢?
7.4.1 基本情况
-
多机基本用不上 多机训练(分布式训练)虽然在理论上可以处理更大的模型或数据集,但在实际应用中,由于网络通信开销、同步问题以及配置复杂性,多机训练的效率可能不如单机多卡训练,因此,多机训练在实际使用中相对较少
-
多卡一定会用得上 单机多卡训练是目前最常用的大模型训练方式,它利用单台机器上的多个 GPU 卡进行并行计算,能够有效加速训练过程,同时避免了多机训练中的网络通信开销
-
0.5B 模型适合学习,但不适合生产 0.5B 参数的模型通常用于学习和研究,因为它的规模较小,计算资源需求较低。然而,对于实际生产环境,这种规模的模型可能无法满足复杂任务的需求
-
7B、14B、32B 模型 这些更大规模的模型(如 7B、14B、32B)更适合生产环境,因为它们能够处理更复杂的任务,并提供更好的性能。不过,这些模型需要更多的计算资源和显存
7.4.2 多机多卡训练
多机多卡训练需要在多台机器之间进行分布式计算,其大致步骤如下:
-
Step1:所有机器互相免密 SSH 登录 为了在多台机器之间进行无缝通信,需要配置免密 SSH 登录,这样可以在不同机器之间快速传输数据和命令,减少人工干预
-
Step2:安装 DeepSpeed DeepSpeed 是一个高效的分布式训练库,支持多种优化技术(如 ZeRO-Offload、稀疏注意力机制等),能够显著提高多机多卡训练的效率
安装命令:pip install deepspeed
- Step3:配置 DeepSpeed 在训练脚本中,需要配置 DeepSpeed 的参数,例如:
deepspeed --num_nodes=<节点数量> --num_gpus_per_node=<每节点GPU数量> your_training_script.py --deepspeed --deepspeed_config your_deepspeed_config.json
7.4.3 单机多卡训练
单机多卡训练是最常见的大模型训练方式,利用单台机器上的多个 GPU 卡进行并行计算,其大致步骤如下:
-
不需要任何特殊设置 单机多卡训练通常不需要复杂的网络配置,因为所有 GPU 都在同一台机器上,可以直接通过 CUDA 进行通信。
-
借助 DeepSpeed DeepSpeed 也支持单机多卡训练,并且提供了优化的内存管理和计算效率,使用 DeepSpeed 的单机多卡训练命令示例如下:
deepspeed your_training_script.py --deepspeed --deepspeed_config your_deepspeed_config.json
7.4.4 总结
-
多机多卡训练:适合大规模分布式训练,但配置复杂,需要免密 SSH 和 DeepSpeed 支持
-
单机多卡训练:最常用的方式,配置简单,适合大多数场景
-
模型规模:0.5B 适合学习和研究,而 7B、14B、32B 等更大规模的模型更适合生产环境
-
最佳实践:结合 LLaMA-Factory 和 DeepSpeed,实现高效的大模型训练和微调
7.5 PT训练概述
PT(Pre-Train,即:预训练)是指通过自回归训练的方式,让模型学习语言的通用规律
由于预训练通常需要使用大量的无标注文本数据(如维基百科、书籍、网页等),要耗费的时间、显卡、人员等各种成本巨大,所以预训练模型的开发主要集中在大型科技公司、研究机构和少数资源丰富的团队手中,对于大多数开发者而言,基本上不会用到预训练
而笔者的开发资源也十分有限,故这里仅简单介绍预训练的大致方法
Step1: 收集需要模型进行学习训练的内容,比如从刑法中简单复制的几条数据(实际开发中要更多的数据,否则llama-factory会报错数据太少,从而直接终止训练):
第一条:为了惩罚犯罪,保护人民,根据宪法,结合我国同犯罪作斗争的具体经验及实际情况,制定本法。
第二条:中华人民共和国刑法的任务,是用刑罚同一切犯罪行为作斗争,以保卫国家安全,保卫人民民主专政的政权和社会主义制度,保护国有财产和劳动群众集体所有的财产,保护公民私人所有的财产,保护公民的人身权利、民主权利和其他权利,维护社会秩序、经济秩序,保障社会主义建设事业的顺利进行。
第三条:法律明文规定为犯罪行为的,依照法律定罪处刑;法律没有明文规定为犯罪行为的,不得定罪处刑。
Step2: 使用代码将上面文本转换为json格式
import json
texts = """
第一条:为了惩罚犯罪,保护人民,根据宪法,结合我国同犯罪作斗争的具体经验及实际情况,制定本法。
第二条:中华人民共和国刑法的任务,是用刑罚同一切犯罪行为作斗争,以保卫国家安全,保卫人民民主专政的政权和社会主义制度,保护国有财产和劳动群众集体所有的财产,保护公民私人所有的财产,保护公民的人身权利、民主权利和其他权利,维护社会秩序、经济秩序,保障社会主义建设事业的顺利进行。
第三条:法律明文规定为犯罪行为的,依照法律定罪处刑;法律没有明文规定为犯罪行为的,不得定罪处刑。
"""
samples = []
for text in texts.split("\n"):
if text:
sample = dict(text=text)
samples.append(sample)
"""
json:整个看作一个 json 列表(建议使用此方法)
"""
with open(file="samples.json", mode="w", encoding="utf8") as f:
json.dump(obj=samples, fp=f, ensure_ascii=False)
"""
jsonl:一行一个 json 对象
"""
with open(file="samples.jsonl", mode="w", encoding="utf8") as f:
for sample in samples:
print(sample, end="\n", file=f)
Step3: 将上面代码生成的samples.json上传至llamafactory的data目录下,并在llamafactory的dataset_info.json中注册类似以下内容:
"my_samples": { "file_name": "samples.json", "columns": { "prompt": "text" } }
Step4: 在llamafactory上切换训练阶段为【Pre-Training】,然后进行训练即可(注:训练之后的结果可作为原始模型进行下一步的训练,直至不断训练出合适的模型为止)
备注:在大规模训练模式下,通常不需要高频保存模型,故可视实际情况修改保存间隔(比如5000等)