五、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 jsontexts = """
第一条:为了惩罚犯罪,保护人民,根据宪法,结合我国同犯罪作斗争的具体经验及实际情况,制定本法。
第二条:中华人民共和国刑法的任务,是用刑罚同一切犯罪行为作斗争,以保卫国家安全,保卫人民民主专政的政权和社会主义制度,保护国有财产和劳动群众集体所有的财产,保护公民私人所有的财产,保护公民的人身权利、民主权利和其他权利,维护社会秩序、经济秩序,保障社会主义建设事业的顺利进行。
第三条:法律明文规定为犯罪行为的,依照法律定罪处刑;法律没有明文规定为犯罪行为的,不得定罪处刑。
"""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等)
相关文章:
五、AIGC大模型_04LLaMA-Factory基础知识与SFT实战
1、LLaMA-Factory 基本介绍 1.1 定义 LLaMA-Factory 是一个开源的大型语言模型(LLM)微调框架,旨在帮助开发者和研究人员轻松地对预训练语言模型进行定制化训练和优化 1.2 功能特点 支持多种预训练模型 LLaMA Factory 支持超过 100 种主流的…...
数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例
数字IC后端时钟树综合专题(OCC电路案例分享) 复杂时钟设计时钟树综合(clock tree synthesis)常见20个典型案例 1、什么是OCC? 片上时钟控制器(On-chip Clock Controllers ,OCC),也称为扫描时钟控制器(Scan Clock Con…...
LeetCodehot 力扣热题100 全排列
这段代码的目的是计算给定整数数组的所有全排列(permutations),并返回一个包含所有排列的二维数组。 思路解析 在这段代码中,采用了 深度优先搜索(DFS) 和 回溯 的方法来生成所有的排列。 关键步骤…...
深度学习c++资源库:vector容器,蓝桥杯常用算法sort,unique(排序+去重)
vector容器 1.基本概念 <vector> 是 STL 中的一个容器类,不同于普通数组的静态空间,vector可以动态扩展。 动态扩展:并不是在原空间连接新空间,而是找到更大的内存空间,将原数据拷贝到新空间,释放…...
Postgresql-重置统计信息(reset statistics)
文章目录 理解 PostgreSQL 中的 pg_stat_resetpg_stat_reset 的作用与使用时机pg_stat_reset 所需权限PostgreSQL 重置统计信息的方法重置整个database重置特定表的统计重置特定function的统计重置Statistics Collector:重置 WAL(Write-Ahead Logging)统…...
【Uniapp-Vue3】导入uni-id用户体系
在uniapp官网的uniCloud中下载uni-id用户体系 或者直接进入加载,下载地址:uni-id-pages - DCloud 插件市场 进入以后下载插件,打开HbuilderX 选中项目,点击确定 点击跳过 点击合并 右键uniCloud文件夹下的database文件夹&#x…...
【前沿探索篇七】【DeepSeek自动驾驶:端到端决策网络】
第一章 自动驾驶的"感官革命":多模态神经交响乐团 1.1 传感器矩阵的量子纠缠 我们把8路摄像头+4D毫米波雷达+128线激光雷达的融合称为"传感器交响乐",其数据融合公式可以简化为: def sensor_fusion(cam, radar, lidar):# 像素级特征提取 (ResNet-152…...
Staruml软件的介绍安装uml类图的绘制流程
文章目录 1.uml和staruml之间的关系2.软件的安装3.配置脚本语言4.Staruml创建类图4.反向工程 1.uml和staruml之间的关系 这篇文章主要是介绍这个staruml软件的安装和相关的背景介绍: 我和uml初识于IDEA软件,学习java的你一定用过这个软件,当…...
神经网络发展简史:从感知机到通用智能的进化之路
引言 神经网络作为人工智能的核心技术,其发展历程堪称一场人类对生物大脑的致敬与超越。本文将用"模型进化"的视角,梳理神经网络发展的五大关键阶段,结合具象化比喻和经典案例,为读者呈现一幅清晰的AI算法发展图谱。 一…...
快节奏生活
在当今快节奏的商务环境中,效率成为了决定企业竞争力的关键因素之一。亿可达软件连接平台,以其独特的功能和优势,为职场人士带来了前所未有的便捷与高效,成为了众多用户心中的“宝藏”工具。 1、亿可达:自动化流程的搭…...
Windows 11【1001问】通过Rufus制作Win 11系统安装U盘
随着科技的发展,Windows 11 已经成为许多用户的首选操作系统。在之前的几篇文章中,我们详细探讨了 Windows 11 的概念、安装配置要求以及如何下载 Windows 11 镜像文件,并介绍了六种不同的安装方法。本篇博客将聚焦于使用 ISO 文件安装 Windo…...
spring中手写注解开发(创建对象篇)
说明: 在spring底层中并不是我写的如此,这篇只是我用我自己的方式实现了使用注解组件扫描并且 创建对象,方法并不是很难,可以看一看,欢迎大佬评论 第一步: 我们需要自己写一个注解,我用的是idea…...
DeepSeek进入开源周,分享几点关于开源的思考
最近DeepSeek进入开源周,又把差点被大众遗忘在角落的开源话题拉了出来。 作为一个开源作者,也分享几点关于开源的思考。 AI对开源的影响 开源项目遇到的最大困难 开源项目不应该商业化 你的开源项目是垃圾...
大模型训练中的数据不平衡问题及其解决策略
目录 大模型训练中的数据不平衡问题及其解决策略 一、数据不平衡问题的影响 二、处理数据不平衡问题的方法 1. 过采样(Oversampling) 2. 欠采样(Undersampling) 3. 代价敏感学习(Cost-Sensitive Learning…...
本地部署DeepSeek R1满血版大模型
一、前言 老周上一篇分享了《本地部署DeepSeek R1大模型》,本地受硬件条件限制,只跑了80亿参数量的模型。 1.5b模型基本可以在大部分个人电脑甚至手机中运行,如果你有 6G 显存以上,那么可以部署7b模型,如果有16G显存&…...
外发抄板SCH与PCB检查系列
外发抄板SCH与PCB检查系列 一、检查到手的文件二、PCB与原理图的对应检查1.为什么要查SCH与Pcbdoc的对应?2.查询方法 三、PCB与实物的信号对应检查 一、检查到手的文件 外发出去两块板子:控制板与功率板。 抄板机构返回的文件: 1.互相独立的…...
EX_25/2/25
编写一个如下场景: 有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set get 方法 编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set get 方法 编写一个…...
C# 打印Word文档 – 4种打印方法
Word文档是日常办公和学习中不可或缺的一部分。比如在商务往来中,经常需要打印 Word 文档用于撰写和传递正式的商务信函、合作协议、项目提案等。打印出来的文档便于双方签字盖章,具有法律效力和正式性。本文将提供以下4种通过C# 打印Word文档的方法&…...
ROS的action通信——实现阶乘运算(一)
在ROS中除了常见的话题(topic)通信、服务(server)通信等方式,还有action通信这一方式,由于可以实时反馈任务完成情况,该通信方式被广泛运用于机器人导航等任务中。本文将通过三个小节的分享,实现基于action通信的阶乘运…...
Mac 上安装多版本的 JDK 且实现 自由切换
1.可以通过查看以下目录中的内容,确认当前已经安装的 jdk 版本。 cd /Library/Java/JavaVirtualMachines2.命令行查看 jdk 的安装路径 /usr/libexec/java_home -V3.下载要安装的jdk版本,修改环境变量( cat ~/.bash_profile) # 定义JDK 8和JDK 17的安装路…...
网络编程套接字
目录 一、认识端口号 二、端口号和进程ID 三、TCP/UDP协议 四、网络字节序 五、socket编程接口 5.1socket的常见API 5.2socketaddr结构 六、简单的UDP程序 七、地址转换函数 八、简单的TCP网络程序 九、Tcp协议通讯流程 9.1基于TCP协议的客户端/服务器程序的一般流…...
45.matlab产生正弦叠加信号
,...
Java23种设计模式案例
目录 一、概述 二、创建型模式 (Creational Patterns) 单例模式 (Singleton Pattern) 工厂方法模式 (Factory Method Pattern) 抽象工厂模式 (Abstract Factory Pattern) 建造者模式 (Builder Pattern) 原型模式 (Prototype Pattern) 三、结构型模式 (Structu…...
计算机毕业设计程序,定制开发服务
我们擅长的开发语言包括Python、C、Golang、Java,以及前端技术如HTML、CSS、JS和Vue。我们的服务内容丰富,能够满足您各种需求,无论是简单的功能开发还是复杂的定制项目,我们都能为您提供专业支持。若有具体需求可联系作者。 链接…...
AI提示词的种类与适合的任务
以下是提示词的主要种类及其适用任务,基于大模型特性与最佳实践总结: 一、基础提示词 零样本提示(Zero-shot Prompting) 形式:直接输入任务指令,不提供示例(如“翻译以下句子:Hello …...
【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费
【Kimi】免费生成PPT并免费下载 用了好几个大模型,有些能生成PPT内容; 有些能生成PPT,但下载需要付费; 目前只有Kimi生成的PPT,能选择模板、能在线编辑、能下载,关键全部免费! 一、用kimi生成PP…...
Maven环境搭建
Maven 1. 概述 ApacheMaven是一个软件项目管理和构建工具。基于项目对象模型(POM)的概念,Maven可以从中心信息中管理项目的构建、报告和文档 理解: maven构建项目(100%)而且帮你完成jar的统一管理。 思考: 原来的jar—…...
Vue面试题
Vue面试题 Vue2.0的生命周期,每个生命周期分别做了哪些事情 create阶段:vue实例被创建。 beforeCreate: 创建前,此时data和methods中的数据都还没有初始化; created:创建完毕,data中有值,未…...
Linux时间日期类指令
1、data指令 基本语法: date : 显示当前时间date %Y : 显示当前年份date %m : 显示当前月份date %d : 显示当前哪一天date “%Y-%m-%d %H:%M:%S" : 显示年月日时分秒date -s 字符串时间 : 设置系统时…...
国标28181协议在智联视频超融合平台中的接入方法
一. 国标28181介绍 国标 28181 协议全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是国内视频行业最重要的国家标准,目前有三个版本: 2011 年:推出 GB/T 28181-2011 版本,为安防行业的前端设备、平…...
pyautogui库的screenshot()函数
# 方法一 screenshot pyautogui.screenshot() screenshot.save("screenshot.png")# 方法二 # 获取屏幕分辨率 screen_width, screen_height pyautogui.size()# 截取桌面屏幕 screenshot pyautogui.screenshot(region(0, 0, screen_width, screen_height)) screens…...
python与C系列语言的差异总结(3)
与其他大部分编程语言不一样,Python使用空白符(whitespace)和缩进来标识代码块。也就是说,循环体、else条件从句之类的构成,都是由空白符加上冒号(:)来确定的。大部分编程语言都是使用某种大括号来标识代码块的。下面的…...
《Linux系统编程篇》System V信号量实现生产者与消费者问题(Linux 进程间通信(IPC))——基础篇(拓展思维)
文章目录 📚 **生产者-消费者问题**🔑 **问题分析**🛠️ **详细实现:生产者-消费者****步骤 1:定义信号量和缓冲区****步骤 2:创建信号量****步骤 3:生产者进程****步骤 4:消费者进程…...
Jmeter接口并发测试
Apache JMeter 是一款开源的性能测试工具,广泛用于接口并发测试、负载测试和压力测试。以下是使用 JMeter 进行接口并发测试的详细步骤: 一、准备工作 安装 JMeter 下载地址:Apache JMeter 官网 确保已安装 Java 环境(JMeter 依…...
Python--内置函数与推导式(上)
1. 匿名函数 Lambda表达式基础 语法:lambda 参数: 表达式 特点: 没有函数名,适合简单逻辑函数体只能是单行表达式自动返回表达式结果 # 示例1:加法 add lambda a, b: a b print(add(3, 5)) # 输出 8# 示例2:字…...
Python爬虫实战:获取六图网漫画图
注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 Python 作为一种广泛应用于数据处理和网络爬虫领域的编程语言,拥有丰富的库和框架。其中,Scrapy 框架以其高效、灵活、可扩展等特点,成为构建爬虫程序的…...
《人工智能之高维数据降维算法:PCA与LDA深度剖析》
在人工智能与机器学习蓬勃发展的当下,数据处理成为关键环节。高维数据在带来丰富信息的同时,也引入了计算复杂度高、过拟合风险增大以及数据稀疏性等难题。降维算法应运而生,它能将高维数据映射到低维空间,在减少维度的同时最大程…...
第2课 树莓派镜像的烧录
树莓派的系统通常是安装在SD卡上的。SD卡作为启动设备,负责启动树莓派并加载操作系统。这种设计使得树莓派具有便携性和灵活性,用户可以通过更换SD卡来更换操作系统或恢复出厂设置。 烧录树莓派的镜像即是将树莓派镜像烧录到SD卡上,…...
网络安全复习资料
网络安全复习资料 1.计算机网络安全是指保持网络中的硬件、软件系统正常运行,使他们不因自然和人为的因素而受到破坏、更改和泄露。 2.网络安全:物理安全,软件安全,信息安全,运行安全。 3.安全防范措施:…...
PIG框架学习5——动态路由实现
一、前言 参考PIGX官方文档:https://www.yuque.com/pig4cloud/pig/ggnc3e 1.1 说明 在微服务中,定义路由一般是在网关gateway对应的配置文件中进行定义声明的,PIGX框架下,如何通过动态路由实现网关路由的实时更新? 实…...
vscode设置自动换行
vscode设置自动换行 方法 方法 点击文件->首选项->设置。搜索word wrap -> 选择 on 。 搜索Word Wrap,并把选项改为on。...
Flutter-升级Xcode后构建iOS报错
代码什么都没改动,貌似只是升级了下Xcode,构建iOS就一直报错,错误有时候还不一样。 Swift Compiler Error (Xcode): Unable to rename temporary /Users/admin/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/2ZBFEEPIDQ0EY/Core…...
架构思维:架构的演进之路
文章目录 引言为什么架构思维如此重要架构师的特点软件架构的知识体系如何提升架构思维大型互联网系统架构的演进之路一、大型互联网系统的特点二、系统处理能力提升的两种途径三、大型互联网系统架构演化过程四、总结 引言 在软件开发行业中,有很多技术人可能会问…...
ElasticSearch公共方法封装
业务场景 1、RestClientBuilder初始化(同时支持单机与集群) 2、发送ES查询请求公共方法封装(支持sql、kql、代理访问、集群访问、鉴权支持) 3、判断ES索引是否存在(/_cat/indices/${indexName}) 4、判断ES…...
[Web 信息收集] Web 信息收集 — 手动收集 IP 信息
关注这个专栏的其他相关笔记:[Web 安全] Web 安全攻防 - 学习手册-CSDN博客 0x01:通过 DNS 服务获取域名对应 IP DNS 即域名系统,用于将域名与 IP 地址相互映射,方便用户访问互联网。对于域名到 IP 的转换过程则可以参考下面这篇…...
多源最短路径求解: Floyd-Warshall算法和Johnson 算法
多源最短路径问题是图论中的一个经典问题, 它要求找到图中所有顶点对之间的最短路径. 这个问题可以通过几种不同的算法来解决, 其中最为著名的包括 Floyd-Warshall Algorithm 和 Johnson’s Algorithm. Floyd-Warshall 算法 弗洛伊德-沃沙尔算法(Floyd-Warshall Algorithm) 是…...
解决IDEA使用Ctrl + / 注释不规范问题
问题描述: ctrl/ 时,注释缩进和代码规范不一致问题 解决方式 设置->编辑器->代码样式->java->代码生成->注释代码...
第9章 机器学习与统计模型
这一章重点探讨统计模型和机器学习模型,两个大的主题都建立在数据的基础之上,所以要熟练掌握对数据的处理与分析。实际上,机器学习本身就是统计模型的延伸,是在大数据背景下传统统计方法捉襟见肘了,所以才考虑引入机器…...
基于MATLAB的OFDM通信系统仿真设计
下面将为你详细介绍基于MATLAB的OFDM通信系统仿真设计的步骤和示例代码。 1. OFDM系统原理概述 正交频分复用(OFDM)是一种多载波调制技术,它将高速数据流通过串并转换,分配到多个正交的子载波上进行传输,这样可以有效…...
WebRTC学习七:WebRTC 中 STUN 协议详解
系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一:获取音频和视频设备 第五篇 WebRTC学习二:WebRTC音视频数据采集 第六篇 WebRTC学习三…...