跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

LLaMA-Factory 微调 DeepSeek-R1 模型入门教程

使用 LLaMA-Factory 对 DeepSeek-R1 模型进行可视化的全流程微调教程。内容涵盖环境搭建(Anaconda、CUDA、BitsAndBytes)、数据集准备(合并、清洗、脱敏及格式转换)、模型配置与训练参数设置、评估预测以及模型导出。通过该教程,用户可掌握基于 LLaMA-Factory 框架的大语言模型个性化微调方法。

KernelLab发布于 2026/4/5更新于 2026/10/23120 浏览
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 下载

GitHub: LLaMA-Factory

  1. 进入 LLaMA-Factory 仓库页面,点击 Code 按钮下载源码包(推荐 ZIP 格式)。
  2. 解压完成之后记录一下解压路径。

Anaconda 环境创建

软硬件依赖详情
  1. 创建虚拟环境:官方给出的是 Python 至少 3.9,推荐 3.10。
  2. 打开终端。
  3. 导航到刚才解压的地址,例如:cd <project_path>。
LLaMA-Factory 依赖安装
# 依赖下载
pip install -r requirements.txt

# 安装依赖最好都执行一遍
pip install -e ".[torch,metrics]"
CUDA 安装
# CUDA 安装
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
# 记得输入 y 继续安装
量化 BitsAndBytes 安装

如果要在 Windows 平台上开启量化 LoRA(QLoRA),需要安装预编译的 bitsandbytes 库。支持 CUDA 11.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
可视化微调启动
# 启动命令
llamafactory-cli webui

如果出现无法访问 localhost 的错误,说明 Gradio share 为 false 而无法正确响应,需要更改 interface.py 代码。

  1. 找到 interface.py 存在路径,例如:LLaMA-Factory/src/llamafactory/webui。
  2. 找到 run_web_ui() 和 run_web_demo() 方法,把 share=gradio_share 修改成 share=True。
  3. 然后再次运行即可成功。注意此时不要使用代理工具,否则界面可能一直加载不出来。

数据集准备

所需工具下载

可以使用微信风格化工具或其他数据导出工具(如 finetune_dataset_maker)。参考相关论文了解个性化对话生成的最新趋势及数据集构建方法。

  1. 下载并解压工具。
  2. 双击执行工具程序。
  3. 登录账号,点击解析数据。
  4. 选择 AI 对话 txt 和 json 格式按需导出。
  5. 记录导出目录的相对路径。
所需数据合并

在聊天记录文件夹建立一个 merge.py 的文件,主要作用是合并所有的聊天记录。

import os
import json

folder_path = r'<data_path>'
json_files = []
for root, dirs, files in os.walk(folder_path):
    for file in files:
        if file.endswith('.json'):
            json_files.append(os.path.join(root, file))

merged_data = []
for file in json_files:
    with open(file, 'r', encoding='utf-8') as f:
        try:
            data = json.load(f)
            merged_data.append(data)
        except json.JSONDecodeError:
            print(f"Error decoding {file}. Skipping.")

merged_file_path = os.path.join(folder_path, 'merged_data.json')
with open(merged_file_path, 'w', encoding='utf-8') as merged_file:
    json.dump(merged_data, merged_file, indent=4, ensure_ascii=False)
print(f"合并后的文件已保存至:{merged_file_path}")

在命令行中键入 python merge.py 执行。

数据集预处理

数据集预处理是机器学习和人工智能中不可或缺的环节,其重要性体现在多个方面。首先,预处理能够提升数据质量,通过清洗噪声、去除重复和无关信息,以及标准化格式,为模型训练提供纯净且一致的输入。其次,它有助于优化模型性能,例如通过分词、去除停用词等操作,让模型更容易理解和学习数据中的关键信息,同时减少过拟合的风险。

在聊天记录文件夹建立一个 Data_Preprocessing.py 的文件,主要作用是数据清洗、脱敏、去重以及规则化成 sharegpt 格式。

import json
import re

with open('merged_data.json', 'r', encoding='utf-8') as file:
    data = json.load(file)

converted_data = []

def clean_data(dataset):
    cleaned_data = []
    for example in dataset:
        messages = example['messages']
        cleaned_messages = []
        for message in messages:
            if not message['content'].strip():
                continue
            message['content'] = message['content'].replace("\n", " ").strip()
            cleaned_messages.append(message)
        if cleaned_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 in dataset:
        messages = example['messages']
        anonymized_messages = []
        for message in messages:
            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 in data:
    for item in item_list:
        if 'messages' not in item:
            continue
        conversation = {"conversations": []}
        for message in item['messages']:
            role = message['role']
            content = message['content']
            content = replace_sensitive_info(content)
            if role == "system":
                continue
            elif role == "user":
                from_role = "human"
            elif role == "assistant":
                from_role = "gpt"
            conversation['conversations'].append({"from": from_role, "value": content})
        converted_data.append(conversation)

with open('converted_data.json', 'w', encoding='utf-8') as file:
    json.dump(converted_data, file, ensure_ascii=False, indent=2)
print("数据转换完成,结果已保存为 converted_data.json")

在命令行中键入 python Data_Preprocessing.py 执行。

DeepSeek-R1 可视化微调

数据集处理
  1. 将 converted_data.json 数据集存放在 LLaMA-Factory 相对路径下的 data 文件夹中。
  2. 编辑 dataset_info.json 文件。
  3. 添加以下内容以便 LLaMA-Factory 识别训练:
"converted_data": {
    "file_name": "converted_data.json",
    "formatting": "sharegpt",
    "columns": {
        "messages": "conversations"
    }
},
数据详解

在 data 文件夹有个 README_zh.md 的文件,记录了 alpaca 和 sharegpt 格式数据集如何配置。使用的是 sharegpt 数据集,所以在 dataset_info.json 文件需要填充的内容如上所示。不需要 tools(工具描述)可以直接删除,如有需求可参照样例数据集修改。

LLaMA-Factory 基础设置

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

  1. LLaMA-Factory 运行起来之后把语言更改成中文,模型更改为 DeepSeek-R1-1.5B-Distill,模型路径就是你下载好存放的模型路径。
  2. 选择我们添加的数据集。
  3. 简单预览一下看看有没有错误,然后关闭。
  4. 按照默认参数填写,或者根据硬件情况调整。
  5. 点击预览命令,可以看到训练参数配置详情。
  6. 开始训练。
  7. 训练详情可以在 Gradio UI 查看损失函数,也可以后台查看详细信息。
    • epoch:表示训练过程中数据集被完整地通过模型一次的次数。
    • num_input_tokens_seen:表示在训练过程中模型已经看到的输入标记总数。
    • total_flos:表示训练过程中执行的浮点运算次数。
    • train_loss:表示训练集上的损失函数值。
    • train_runtime:表示训练过程的总运行时间。
    • train_samples_per_second:表示模型每秒可以处理的样本数。
    • train_steps_per_second:表示模型每秒可以执行的训练步骤数。
  8. 模型存放位置默认为 saves/<model_name>/lora。
模型评估与预测
  1. 点击 Evaluate&Predict。
  2. 选择需要使用到的数据集。
  3. 预览一下评估命令。
  4. 评估结束之后会给一个评估指标:
    • predict_bleu-4:用于评估机器翻译模型输出质量的一个指标。
    • predict_rouge-1/2/l:衡量生成文本与参考文本之间的相似度。
    • predict_runtime:模型运行的总时间。
  5. 可以点击具体链接查看模型评估具体信息。
训练模型对话
  1. 选择你想要对话并训练好的模型。
  2. 点击加载模型,提示模型已加载,可以开始聊天了。
  3. 然后就可以开始对话,这个对话就是根据你的风格进行训练出来的。
训练模型导出
  1. 点击 Export 切换到模型导出界面。
  2. 这些参数按需调节吧,导出设备最好选择自动,导出目录需要填写一下。
  3. 模型正在导出和导出成功都有提示。
  4. 所有模型文件就在你填写的导出路径文件夹内。
  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

目录

  1. LLaMA-Factory 模型微调基础教程
  2. LLaMA-Factory 概述
  3. LLaMA-Factory 下载
  4. Anaconda 环境创建
  5. 软硬件依赖详情
  6. LLaMA-Factory 依赖安装
  7. 依赖下载
  8. 安装依赖最好都执行一遍
  9. CUDA 安装
  10. CUDA 安装
  11. 记得输入 y 继续安装
  12. 量化 BitsAndBytes 安装
  13. 可视化微调启动
  14. 启动命令
  15. 数据集准备
  16. 所需工具下载
  17. 所需数据合并
  18. 数据集预处理
  19. DeepSeek-R1 可视化微调
  20. 数据集处理
  21. 数据详解
  22. LLaMA-Factory 基础设置
  23. 模型评估与预测
  24. 训练模型对话
  25. 训练模型导出

更多推荐文章

查看全部
  • Java 开发高频 Linux 命令实战:排查、部署与运维
  • 把 AI 数学公式稳妥复制到 Word 的几种办法
  • Python 基于 Flask 的小区停车场管理系统设计与实现
  • VR、具身智能与人形机器人:从虚拟训练到现实执行
  • 动态规划基础概念及第 N 个泰波那契数题解 (1)
  • cJSON 1.7.19 源码深度分析:数据结构与解析实现
  • 没有NVLink的多卡环境,vLLM部署Qwen-VL为何卡死?llama.cpp却跑通了
  • Qwen3-VL-WEBUI 视频理解能力实测:256K 上下文部署实战
  • 将 Zed 编辑器集成到 Bright Data Web MCP
  • VSCode 集成 Copilot 配置并使用 DeepSeek 模型
  • KingbaseES 实现 MySQL 零感迁移的技术方案与工程实践
  • Linux 进程终止:退出场景、方法与退出码详解
  • 人工智能:多模态大模型原理与跨模态应用实战
  • LangFlow 集成 Stable Diffusion 插件实现云端 GPU 秒级出图
  • FVTracker 基于 Python 的基金估值跟踪工具
  • GTC2026 前瞻:Rubin 平台与 AI 工厂
  • 多场景算法选型底层逻辑:从奶茶评价到网球预测实战
  • Linux 常用命令汇总
  • 无人机硬件组装与核心部件选型指南
  • Java 并发核心:单例模式、生产者消费者、定时器及线程池实现

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online