LLaMA-Factory DeepSeek-R1 模型 微调基础教程

LLaMA-Factory DeepSeek-R1 模型 微调基础教程

LLaMA-Factory 模型 微调基础教程

LLaMA-Factory 模型 微调 概述
使用LLaMA-Factory进行模型微调具有多方面的好处。首先,它简化了大模型微调的过程,使得即使是没有深厚技术功底的用户也能轻松进行模型的优化和改进。此外,LLaMA-Factory支持多种训练方法,如全量调参、LoRA等,以及不同的对齐方案,如DPO、PPO等。这为用户提供了灵活性,可以根据具体需求选择合适的微调策略。
LLaMA-Factory还提供了一站式服务,从模型微调到量化处理,再到运行,整个过程一气呵成,无需在不同的工具和流程之间来回切换。此外,它支持多种流行的语言模型,如LLaMA、BLOOM、Mistral、Baichuan等,涵盖了广泛的应用场景。
在模型量化方面,LLaMA-Factory能够有效地压缩模型规模,减少模型运行所需的计算量和存储空间,使得模型能够在性能稍弱的设备上也能流畅运行。这不仅提高了模型的可访问性,也降低了运行成本。
此外,LLaMA-Factory的训练过程中记录的内容比较全面,除了同步输出loss曲线图以外,还自带BLEU等评测指标,这有助于用户更好地监控和评估模型的性能。

LLaMA-Factory

LLaMA-Factory 下载

在这里插入图片描述

GitHub: LLaMA-Factory

1. 进到 LLaMA-Factory 后点击code 下载就行,我这边选择的是下载 zip.
在这里插入图片描述
2. 这里也有中文的资料以及详情,感兴趣的可以看看。 
在这里插入图片描述
3. 解压完成之后记录一下解压路径。 
在这里插入图片描述

Anaconda

Anaconda 环境创建

软硬件依赖 详情

软硬件依赖 
在这里插入图片描述
在这里插入图片描述
1. 创建虚拟环境:官方给出的是 python 至少 3.9 推荐 3.10
请添加图片描述
2. 打开终端。 
请添加图片描述
3. 导航到 刚才解压的地址,我的是:E:\Model\LLaMA-Factory-main\LLaMA-Factory-main 命令:E:(导航到E盘) cd E:\Model\LLaMA-Factory-main\LLaMA-Factory-main(导航到具体文件夹)
请添加图片描述

LLaMA-Factory 依赖安装

1. 依赖下载:pip install -r requirements.txt 
请添加图片描述
2. 这个也是安装依赖最好都执行一遍: pip install -e ".[torch,metrics]"
请添加图片描述

CUDA 安装

1.CUDA 安装:conda install pytorch torchvision torchaudio pytorch-cuda=11.8-c pytorch -c nvidia 记得输入 y 继续安装 
请添加图片描述
请添加图片描述

量化 BitsAndBytes 安装

1. 安装 BitsAndBytes 如果要在 Windows 平台上开启量化 LoRA(QLoRA),需要安装预编译的 bitsandbytes 库 支持 CUDA11.1 到 12.2, 请根据您的 CUDA 版本情况选择适合的发布版本。 pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.2.post2-py3-none-win_amd64.whl 
请添加图片描述

可视化微调启动

1. 启动命令:llamafactory-cli webui 
在这里插入图片描述
2. 如果出现这个错误就说明:无法访问 localhost,因此需要创建一个可分享的链接,但是又因为分享 Gradio share 为false 而无法正确响应,所以我们需要更改一下 interface.py 代码。 

3. 找到 interface.py 存在路径,我的是:LLaMA-Factory-main\src\llamafactory\webui 
请添加图片描述
4. 找到 run_web_ui() 和 run_web_demo() 方法,把 “share=gradio_share” 修改成:“share=True” 如下图所示: 
在这里插入图片描述
4. 然后再次运行,就成功了。 对了有一点需要注意的是,这个时候不要搭梯子不然界面会一直加载不出来。 
在这里插入图片描述

数据集准备

所需工具下载

微信风格化工具: 留痕

因为我创建的自己的风格化模型所以就用这个了,其他的也可以 例如:finetune_dataset_maker或者自己写一个,抽时间我自己写一个也行,到时候写出来再分享吧 
如果大家想了解更多这边有几个论文呢可以参考一下。 

T2D:从文本自动生成虚拟代理之间的对话

个性化对话生成的最新趋势:数据集、方法和评估综述

LLaMA-Factory:100多种语言模型的统一高效微调

1. 回到正题哈,点击下载,然后解压。 
请添加图片描述
2. 下载第一个就行 
在这里插入图片描述

使用教程

1. 点击 教程跳转官方使用说明 
在这里插入图片描述
2. 点击导出数据,跟着步骤来就行。 
在这里插入图片描述
不想看的可以跟着我的来弄: 3. 解压之后,找到 MemoTrace.exe 双击执行就可以。 
请添加图片描述
4. 点击我的登陆账号,然后在工具点击解析数据 
请添加图片描述
请添加图片描述
5. 我这边选择的是AI 对话txt 和 json,大家按需导出就行。 
在这里插入图片描述
6. 因为这边需要的数据就只是文本数据,所以就只勾选了文本。 
请添加图片描述
7. 记一下目录哈,我这边是在:D:\软件\留痕\data\聊天记录,找相对路径就行。 
请添加图片描述
8. 导出完毕之后就相对路径文件夹会有这三个文件,因为我选择导出txt和json 所以会有三个文件 如果只是json会有两个文件。 
请添加图片描述

所需数据合并

1. 在聊天记录文件夹 建立一个 merge.py 的文件 
在这里插入图片描述
2. 把下面的代码复制进去,这个代码的主要作用就是合并所有的聊天记录。 
import os import json # 设置目标文件夹路径 folder_path = r'D:\软件\留痕\data\聊天记录' # 获取文件夹及其所有子文件夹中的所有 .json 文件 json_files =[]for root, dirs, files in os.walk(folder_path):for file infiles:if file.endswith('.json'): json_files.append(os.path.join(root, file)) # 合并所有 .json 文件 merged_data =[]for file injson_files:withopen(file,'r', encoding='utf-8')asf:try: data = json.load(f) merged_data.append(data) except json.JSONDecodeError:print(f"Error decoding {file}. Skipping.") # 保存合并后的数据到一个新的 .json 文件 merged_file_path = os.path.join(folder_path,'merged_data.json')withopen(merged_file_path,'w', encoding='utf-8')asmerged_file: json.dump(merged_data, merged_file, indent=4, ensure_ascii=False)print(f"合并后的文件已保存至: {merged_file_path}")
3. 直接在地址栏前面加上 cmd 回车之后就会打开当前路径的命令提示符。 
在这里插入图片描述
4. 键入 python merge.py 执行 
在这里插入图片描述
5. 显示这个就表示执行完毕,数据已经合并了。 
在这里插入图片描述
6. 内容大概就是这样 
在这里插入图片描述

数据集预处理

数据集预处理是机器学习和人工智能中不可或缺的环节,其重要性体现在多个方面。 首先,预处理能够提升数据质量,通过清洗噪声、去除重复和无关信息,以及标准化格式,为模型训练提供纯净 且一致的输入。其次,它有助于优化模型性能,例如通过分词、去除停用词等操作,让模型更容易理解和学习数 据中的关键信息,同时减少过拟合的风险。此外,预处理还能增强数据多样性,通过数据增强技术如文本扩充、 同义词替换等,提升模型的泛化能力。在对话系统中,预处理尤为重要,因为它需要处理多轮对话的上下文一致 性以及用户意图的多样性。通过格式化对话数据和增强对话内容,可以显著提升对话系统的自然性和流畅性。总 之,数据集预处理不仅提高了模型的训练效率,还为模型的最终性能奠定了坚实基础,是实现高质量人工智能应 用的关键步骤。 
1. 在聊天记录文件夹 建立一个 Data_Preprocessing.py 的文件 
在这里插入图片描述
2. 把下面的代码复制进去,这个代码的主要作用就是数据清洗、脱敏、去重以及规则化成sharegpt格式。 这个等会解释为什么要用 sharegpt 格式。 
import json import re # 读取 merged_data.json 文件 withopen('merged_data.json','r', encoding='utf-8')asfile: data = json.load(file) # 转换后的数据格式 converted_data =[] # 数据清洗:去除空消息,清除特殊字符,统一格式 def clean_data(dataset): cleaned_data =[]for example indataset: messages = example['messages'] cleaned_messages =[]for message inmessages: # 去除内容为空的消息 if not message['content'].strip():continue # 清除多余的空格、换行符等 message['content']= message['content'].replace("\n"," ").strip() cleaned_messages.append(message)ifcleaned_messages: cleaned_data.append({'messages': cleaned_messages})return cleaned_data # 脱敏处理:替换敏感信息 def replace_sensitive_info(text): # 匹配手机号、邮箱等敏感信息 text = re.sub(r'\d{3}[-]?\d{4}[-]?\d{4}','[PHONE_NUMBER]', text) # 替换手机号 text = re.sub(r'\S+@\S+','[EMAIL]', text) # 替换邮箱 text = re.sub(r'\d{4}-\d{2}-\d{2}','[DATE]', text) # 替换日期 return text # 匿名化数据:替换用户角色 def anonymize_data(dataset): anonymized_data =[]for example indataset: messages = example['messages'] anonymized_messages =[]for message inmessages: # 匿名化用户角色 if message['role']=='user': message['content']= message['content'].replace("用户","用户X") # 替换敏感信息 message['content']=replace_sensitive_info(message['content']) anonymized_messages.append(message) anonymized_data.append({'messages': anonymized_messages})return anonymized_data # 处理每一条对话 for item_list indata:for item initem_list: # 确保每个条目中包含 'messages' 字段 if'messages' not initem:print("跳过:没有找到 'messages' 字段")continue # 如果没有 'messages' 字段,跳过当前数据项 print(f"正在处理数据项: {item}") # 打印当前处理的项 conversation ={"conversations":[]} # 处理消息数据 for message in item['messages']: role = message['role'] content = message['content']print(f"处理消息:role={role}, content={content}") # 打印消息内容 # 清洗和脱敏处理 content =replace_sensitive_info(content) # 映射 role 到 from 字段 if role =="system":continue # 忽略 system 消息 elif role =="user": from_role ="human" elif role =="assistant": from_role ="gpt" # 添加转换后的消息 conversation['conversations'].append({"from": from_role,"value": content }) # 将转换后的会话添加到最终结果中 converted_data.append(conversation) # 保存转换后的数据为新的文件 withopen('converted_data.json','w', encoding='utf-8')asfile: json.dump(converted_data, file, ensure_ascii=False, indent=2)print("数据转换完成,结果已保存为 converted_data.json")
3. 直接在地址栏前面加上 cmd 回车之后就会打开当前路径的命令提示符。 
在这里插入图片描述
4. 键入 python merge.py 执行 
在这里插入图片描述
5. 显示这个就表示执行完毕,数据已清洗和修改完毕。 
在这里插入图片描述
在这里插入图片描述

DeepSeek-R1 可视化微调

数据集处理

1. 把 converted_data.json 数据集存放在,LLaMA-Factory 相对路径,我的是: E:\Model\LLaMA-Factory-main\LLaMA-Factory-main\data 
在这里插入图片描述
2. 编辑 dataset_info.json 文件。 
在这里插入图片描述
3. 更改 dataset_info.json 文件,以便LLaMA-Factory 识别训练。 下面是需要添加的内容。 
"converted_data":{"file_name":"converted_data.json","formatting":"sharegpt","columns":{"messages":"conversations"}},
在这里插入图片描述

数据详解

1. 在data 文件夹有个 README_zh.md 的文件打开它 它记录的就是 alpaca 和 sharegpt 格式 数据集如何配置。 
在这里插入图片描述
2. 我这边使用的是 sharegpt 数据集,所以在 dataset_info.json 文件需要填充的内容就如下图所示。 又因为我不需要: tools(工具描述) 所以直接删除也行 当然你有需求也可以加上,只要把数据集修改一下就行了。 如果还不知道怎么修改就看一下样例数据集 glaive_toolcall_zh_demo.json 也在 data 文件夹下。 
在这里插入图片描述

LLaMA-Factory 基础设置

模型下载地址: deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B

1. LLaMA-Factory 运行起来之后把语言更改成中文、模型更改为:DeepSeek-R1-1.5B-Distill 模型路径就是你下载好存放的模型路径。 
在这里插入图片描述
2. 选择我们添加的数据集。 
在这里插入图片描述
2. 简单预览一下看看有没有错误,然后关闭就行了。 
在这里插入图片描述
3. 你如果不是很了解这些参数什么意思的话,按照我的填就行。 
在这里插入图片描述
4. 点击预览命令,可以看到训练参数配置详情。 
在这里插入图片描述
在这里插入图片描述
5. 开始训练 
在这里插入图片描述
5. 训练详情可以在 Gradio UI 查看损失函数,也可以后台查看详细信息。 
在这里插入图片描述
命令行输出 
请添加图片描述
6. 训练完毕之后会输出 训练完毕字符 。 
在这里插入图片描述
7. 后台也会输出当前模型训练基础指标,简单解释一下吧。 epoch:表示训练过程中数据集被完整地通过模型一次的次数。 num_input_tokens_seen:表示在训练过程中模型已经看到的输入标记(例如单词或字)的总数。 total_flos:表示训练过程中执行的浮点运算次数,单位是 GF。 train_loss:表示训练集上的损失函数值,损失越低通常意味着模型性能越好。 train_runtime:表示训练过程的总运行时间。 train_samples_per_second:表示模型每秒可以处理的样本数。 train_steps_per_second:表示模型每秒可以执行的训练步骤数。 
在这里插入图片描述
8. 模型存放位置,我的地址是: LLaMA-Factory-main\saves\DeepSeek-R1-1.5B-Distill\lora 如果没更改存放位置的话,应该都在 saves 文件夹下。 
在这里插入图片描述

模型评估与预测

1. 点击 Evaluate&Predict 
在这里插入图片描述
2. 选择需要使用到的数据集。 
在这里插入图片描述
3. 预览一下评估命令,我使用的是 RTX4080,大概需要跑 50 多分钟。 
请添加图片描述
4. 评估结束之后会给一个评估指标,简单解释一下都是什么意思。 
这些数据是机器学习模型的评估指标,通常用于评估文本生成模型(如机器翻译、文本摘要等)的性能。 predict_bleu-4:用于评估机器翻译模型输出质量的一个指标。bleu-4 计算的是 4-gram(四个连续单词) 之间的匹配程度。它用于衡量生成文本与参考文本之间的相似度。 predict_model_preparation_time:模型准备时间,即加载模型并进行初始化所花费的时间,单位是秒。 predict_rouge-1:ROUGE 用于评估自动摘要质量的一个指标。rouge-1 衡量的是1-gram(单个词)的召回率 即生成文本与参考文本中单个词的匹配程度。 predict_rouge-2:rouge-2 衡量的是2-gram(由两个连续单词组成的词组)之间的匹配度。 它反映了生成文本和参考文本中连续两个词的相似性。 predict_rouge-l:rouge-l 衡量的是最长公共子序列(LCS)的召回率。LCS考虑了单词的顺序 因此更能反映生成文本和参考文本之间的结构相似度。 predict_runtime:模型运行的总时间,通常是指模型在预测或推理过程中所花费的总时间,单位为秒。 predict_samples_per_second:每秒处理的样本数量,表示模型每秒钟可以处理多少个输入样本。 predict_steps_per_second:每秒执行的推理步骤数,表示模型在推理过程中每秒执行多少次推理步骤。 
在这里插入图片描述
5. 这个是模型评估具体信息,感兴趣的可以点击去具体查看。 
在这里插入图片描述

训练模型对话

1. 选择你想要对话并训练好的模型。 
请添加图片描述
2. 点击加载模型,模型加载完毕之后会提示:模型已加载,可以开始聊天了! 
在这里插入图片描述
请添加图片描述
3. 然后就可以开始对话了,这个对话就是根据你的风格进行训练出来的,相当于第二个你。 
在这里插入图片描述

训练模型导出

1. 点击 Export 切换到模型导出界面。 
请添加图片描述
2. 这些参数按需调节吧,导出设备最好选择自动,不然CUDA 执行会有一点问题,导出目录需要填写一下。 
请添加图片描述
3. 模型正在导出和导出成功都有提示,如下图所示。 
在这里插入图片描述
请添加图片描述
4. 所有模型文件就是在你填写的导出路径文件夹内。 我的是:LLaMA-Factory-main\model\DeepSeek-R1-1.5B-Distill 微调 
请添加图片描述
5. 一般都出完毕之后我都会写一个 requirements.txt 文件,也就是依赖安装文件,方便后期快速部署。 里面也没什么东西就是当前模型所需依赖,一般使用原本的依赖文件就行,我这里面就是下面的内容。 
请添加图片描述
transformers>=4.41.2,<=4.48.3,!=4.46.*,!=4.47.*,!=4.48.0,!=4.48.1,!=4.48.2;python_version<'3.10' transformers>=4.41.2,<=4.48.3,!=4.46.*,!=4.47.*,!=4.48.0;python_version>='3.10' datasets>=2.16.0,<=3.2.0 accelerate>=0.34.0,<=1.2.1 peft>=0.11.1,<=0.12.0 trl>=0.8.6,<=0.9.6 tokenizers>=0.19.0,<=0.21.0 gradio>=4.38.0,<=5.12.0 pandas>=2.0.0 scipy einops sentencepiece tiktoken protobuf uvicorn pydantic fastapi sse-starlette matplotlib>=3.7.0 fire packaging pyyaml numpy<2.0.0 av librosa tyro<0.9.0

暂时先这样吧,如果实在看不明白就留言,看到我会回复的。希望这个教程对您有帮助!
路漫漫其修远兮,与君共勉。

Read more

【hacker送书第15期】AI绘画精讲与AIGC时代游戏美术设计:从入门到精通

【hacker送书第15期】AI绘画精讲与AIGC时代游戏美术设计:从入门到精通

文章目录 * 😊前言 * AI绘画精讲:Stable Diffusion从入门到精通💕 * 内容简介 * 获取方式 * AIGC时代:游戏美术设计与AI绘画应用从入门到精通💕 * 内容简介 * 获取方式 * 😊总结 😊前言 随着人工智能技术的飞速发展,AI绘画已经成为了一个备受瞩目的领域。在这个背景下,北京大学出版社推出了一系列关于AI绘画的优秀图书,其中就包括了《AI绘画精讲:Stable Diffusion从入门到精通》和《AIGC时代:游戏美术设计与AI绘画应用从入门到精通》。这两本书都是为了帮助读者全面了解和掌握AI绘画的精髓,推动人工智能技术在艺术领域的应用发展。 AI绘画精讲:Stable Diffusion从入门到精通💕 内容简介 Stable Diffusion是一款非常受欢迎的 AI 绘画与设计软件。AI绘画和传统绘画有什么不同、AI 绘画的基本逻辑是什么、如何让 AI 绘画软件为我们工作、如何生成符合要求的作品,本书将一一进行解析。 本书共 13 章内容。首先循序渐进地介绍了 A

By Ne0inhk

在普通电脑上跑大模型?!llama.cpp 实战指南(真·CPU救星)

文章目录 * 🤯 为什么你需要关注llama.cpp? * 🚀 手把手实战:十分钟跑通模型 * 第一步:准备战场环境 * 第二步:获取模型文件(关键!) * 第三步:启动模型交互! * 🛠️ 高级玩法解锁 * 💡 我的深度体验报告 * 👍 真香时刻 * 🤔 遇到的坑 * 🌟 超实用场景推荐 * 🔮 未来展望:CPU的逆袭? 还在为没显卡跑不动AI模型发愁?这个开源项目让我的旧笔记本起死回生了! 朋友们!今天要分享一个让我拍桌子叫绝的开源神器——llama.cpp。当初看到这个项目时我整个人都惊呆了:纯C++实现!不需要GPU!普通CPU就能跑! 作为一个常年被显卡价格PUA的程序员,这简直是救命稻草啊! 🤯 为什么你需要关注llama.cpp? 先说说我踩过的坑吧。去年想在家折腾开源大模型,结果: * 显卡要求动不动就16G显存(我的1060直接哭晕) * 装依赖环境能折腾一整天(Python版本地狱啊!) * 跑个7B模型风扇像直升机起飞(邻居以为我在挖矿) 直到发现了Georgi Gergan

By Ne0inhk

基于Llama-Factory的企业知识库问答系统构建

基于Llama-Factory的企业知识库问答系统构建 在企业数字化转型的浪潮中,员工对内部信息的即时获取需求正变得前所未有的迫切。想象这样一个场景:一名新入职的员工想了解年假申请流程,他不再需要翻找长达几十页的制度文档,也不必反复追问HR同事,而是直接在企业IM工具里问一句:“我怎么申请年假?”——系统立刻给出清晰、准确的操作指引。 这背后,正是大语言模型与企业私有知识深度融合的结果。然而,通用大模型虽然“博学”,却对企业内部规则“一无所知”。如何让AI真正理解组织的“专属语言”?微调(Fine-tuning)成为关键路径。但传统微调动辄需要多卡A100、数周训练周期和专业算法团队支持,对大多数企业而言门槛过高。 直到像 Llama-Factory 这样的开源框架出现,局面才被彻底改变。它把复杂的模型定制过程封装成可配置、可视化的流水线,使得单张消费级显卡也能完成领域模型的训练。这意味着,即使是非算法背景的工程师,也能在几天内为公司打造一个“懂业务”的AI助手。 Llama-Factory 的核心定位是一个开箱即用的大模型微调集成环境。它不是某个单一技术的实现者,而是一个高度

By Ne0inhk
这6个AI写作工具,我试了个遍!写网文哪个最顺手?

这6个AI写作工具,我试了个遍!写网文哪个最顺手?

一、为什么要折腾这些AI工具? 写小说年头不短了,最怕的不是写不好,而是写不出来。对着空白文档,灵感枯竭,更新死线迫在眉睫,脑袋里却一片浆糊。这种时候,要是能有个靠谱的帮手,拉我一把,那真是雪中送炭。 现在市面上各种“AI写作助手”眼花缭乱,宣传得天花乱坠。但说实话,真正懂我们写网文这套“爽点+设定+节奏”逻辑的,能有几个?光说不练假把式。我索性亲自下场,挑了国内外现在热度比较高的6个工具,实实在在地用网文的视角去试了试水,看看到底谁是真能帮上忙,谁只是花架子。 二、这次我试了哪些帮手? 这几个名字,你多半都耳熟: * 笔灵AI * ChatGPT * Claude (国外工具) * 文心一言 * 腾讯元宝 * DeepSeek 国内国外的都有,功能差异挺大,下面我挨个说说我的实际体验。 三、我是怎么试的? 评判标准得实在点。我主要从这5个方面看它们行不行: 1. 能不能写出网文那味儿?

By Ne0inhk