添加 Special Tokens 训练模型

1 引言 本文使用 Ministral-3-3B-Instruct-2512 模型通过 SFT 一个图像分类任务为例来介绍如何添加新的 special tokens。实验的运行命令为: 1 2 3 4 # install newest transformers pip install git+https://github.com/huggingface/transformers DISABLE_VERSION_CHECK=1 CUDA_VISIBLE_DEVICES=7 python src/train.py examples/train_lora/ministral3_lora_sft.yaml 需要预先配置好 ministral3_lora_sft.yaml。 2 数据集加载和预处理 LLaMA-Factory/src/llamafactory/data/loader.py 这个文件下的 get_dataset 函数完成数据集的加载,并且使用 tokenizer 预处理数据。 2.1 数据加载 下面的代码是 LLaMA-Factory/src/llamafactory/data/loader.py:get_dataset 函数的一部分,完成数据的读取并且转换数据格式。 1 2 3 4 5 6 7 8 9 10 11 # Load and preprocess dataset with training_args.main_process_first(desc="load dataset", local=(not data_args.data_shared_file_system)): dataset = _get_merged_dataset(data_args.dataset, model_args, data_args, training_args, stage) eval_dataset = _get_merged_dataset( data_args.eval_dataset, model_args, data_args, training_args, stage, return_dict=data_args.eval_on_each_dataset, ) 加载的数据放在 dataset 里面,并且格式转变为如下,例如: ...

2025年12月17日 · 7 分钟 · 1292 字 · hiyouga

在 LLaMA-Factory 上适配新模型

1 模型适配概述 LLaMA-Factory 提供了一整套模型预训练,微调,推理的框架,如果需要适配新模型,只需要修改少量代码就可以让模型融入 LLaMA-Factory 当中。 首先 LLaMA-Factory/src/llamafactory/extras/constants.py 文件定义了支持的模型组及其对应的 template。template 是在构建输入给大模型(prompt)时,用来规定对话格式、字段结构、角色顺序、工具调用格式的“格式规范器”。例如 1 2 3 4 5 6 7 8 9 10 11 12 register_model_group( models={ "Vicuna-v1.5-7B-Chat": { DownloadSource.DEFAULT: "lmsys/vicuna-7b-v1.5", DownloadSource.MODELSCOPE: "Xorbits/vicuna-7b-v1.5", }, "Vicuna-v1.5-13B-Chat": { DownloadSource.DEFAULT: "lmsys/vicuna-13b-v1.5", DownloadSource.MODELSCOPE: "Xorbits/vicuna-13b-v1.5", }, }, template="vicuna", template 也需要在 LLaMA-Factory/src/llamafactory/data/template.py 完成相应的注册,模版的命名可以比较自由,只要保证 constants.py 使用的是对应的模版名即可,模版定义如下: 1 2 3 4 5 6 7 8 9 10 11 register_template( name="ministral3", format_user=StringFormatter(slots=["[INST]{{content}}[/INST]"]), format_system=StringFormatter(slots=["{{content}}\n\n"]), format_function=FunctionFormatter(slots=["[TOOL_CALLS]{{content}}", {"eos_token"}], tool_format="mistral"), format_observation=StringFormatter(slots=["""[TOOL_RESULTS]{"content": {{content}}}[/TOOL_RESULTS]"""]), format_tools=ToolFormatter(tool_format="mistral"), format_prefix=EmptyFormatter(slots=[{"bos_token"}]), template_class=Llama2Template, mm_plugin=get_mm_plugin(name="pixtral", image_token="[IMG]"), ) register_template 完成模版的注册,上面这个模版完成了 user, system 等的格式化器的创建,这些格式化器的入参需要参考这个模型的 chat_template.jinja 文件,从 chat_template.jinja 文件获取到 slots 参数。上述模版还创建了 mm_plugin 插件,这个参数用于适配多模态模型的输入,例如音频,视频,get_mm_plugin 得到 LLaMA-Factory/src/llamafactory/data/mm_plugin.py 文件下注册的多模态插件。 ...

2025年12月12日 · 6 分钟 · 1162 字 · hiyouga

LLaMA Factory 项目代码指南

1 LLaMa-Factory 项目简介 LLaMA-Factory 是一个面向大语言模型(LLM)的高效训练与微调框架,专为简化 LLaMA 系列以及各类开源大模型的训练流程而设计。它以“开箱即用、灵活高效”为核心理念,提供从数据准备、参数高效微调(PEFT)、训练配置管理到模型部署的一站式解决方案。 LLaMA-Factory 支持多种主流模型架构(如 LLaMA、Qwen、Gemma、Mistral 等),并集成了 LoRA、QLoRA、AdaLoRA、Prompt Tuning 等多种轻量化训练技术,使开发者能够以极低成本在单卡或多卡环境下完成高质量模型微调。 该框架提供直观易用的命令行工具与 Web UI,适配从科研实验到生产级应用的多场景需求。通过结构化的配置体系、完善的训练监控以及可扩展的数据加载管线,LLaMA-Factory 让大模型训练变得更加透明、可控且易于维护。 2 项目目录结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 LLaMA-Factory ├── assets # 项目静态资源(图标、示例图片、赞助商信息等) │ ├── sponsors # 赞助商Logo与展示资源 │ └── thirdparty # 第三方依赖或引用资源 │ ├── data # Demo 数据与示例数据集 │ └── mllm_demo_data # 多模态LLM(MLLM)演示数据 │ ├── docker # Docker 环境配置(CUDA/NPU/ROCm 等) │ ├── docker-cuda # NVIDIA GPU 环境 Dockerfile │ ├── docker-npu # 华为 Ascend NPU 训练环境 │ └── docker-rocm # AMD ROCm 训练环境 │ ├── examples # 训练、推理、工具使用的完整示例脚本 │ ├── accelerate # accelerate 分布式训练示例 │ ├── ascend # 华为 Ascend NPU 示例 │ ├── deepspeed # DeepSpeed 训练配置与示例 │ ├── extras # 各类高级特性示例(如 fp8、Galore、LoRA+ 等) │ │ ├── adam_mini # Adam mini 参数优化示例 │ │ ├── apollo # Apollo 优化器示例 │ │ ├── badam # BAdam 优化器示例 │ │ ├── dft # DFT 训练示例 │ │ ├── fp8 # FP8 训练示例 │ │ ├── fsdp_qlora # FSDP + QLoRA 示例 │ │ ├── galore # GaLore低秩优化示例 │ │ ├── llama_pro # LLaMA-Pro 示例 │ │ ├── loraplus # LoRA+ 示例 │ │ ├── mod # MOD 技术示例 │ │ ├── multi_tokens # 多Token生成实验示例 │ │ ├── muon # Muon 优化器示例 │ │ ├── nlg_eval # 文本生成质量评测示例 │ │ ├── oft # OFT 微调示例 │ │ ├── pissa # PiSSA 权重重参数方法示例 │ │ └── qoft # QOFT 示例 │ ├── inference # 推理脚本示例(Chat、工具调用等) │ ├── kt_optimize_rules # KTO 规则示例(奖励建模优化) │ ├── megatron # Megatron-LM 适配示例 │ ├── merge_lora # LoRA 权重合并示例 │ ├── train_full # 全参数训练示例 │ ├── train_lora # LoRA 微调示例 │ └── train_qlora # QLoRA 微调示例 │ ├── scripts # 辅助脚本(转换、统计、API示例) │ ├── api_example # HTTP/API 使用示例 │ ├── convert_ckpt # 权重转换脚本(HF <-> 原始权重) │ └── stat_utils # 数据、token 统计工具 │ ├── src │ └── llamafactory # 核心代码入口 │ ├── api # Web API / 服务端(OpenAI 接口兼容) │ ├── chat # ChatEngine、多轮对话、工具调用 │ ├── data # 数据加载、处理、格式化、模板系统 │ │ ├── processor # 数据预处理组件(指令/对话/多模态) │ ├── eval # 模型评测 │ ├── extras # 辅助函数(如日志、常量,环境等) │ ├── hparams # 超参数解析(模型/数据/训练参数) │ ├── model # 模型加载、LoRA/QLoRA/PEFT、patch等 │ │ └── model_utils # 模型结构、权重、分布式工具 │ ├── third_party # 集成第三方模块(如 muon 优化器) │ ├── train # 训练核心模块(SFT/DPO/KTO/PPO/RM等) │ │ ├── dpo # DPO 训练逻辑 │ │ ├── ksft # KSFT 训练逻辑 │ │ ├── kto # KTO 训练逻辑 │ │ ├── mca # MCA 对齐算法 │ │ ├── ppo # PPO 强化学习训练 │ │ ├── pt # 预训练流程 │ │ ├── rm # Reward Model(奖励模型训练) │ │ └── sft # 指令监督微调 │ ├── v1 # 老版本核心(LLaMA-Factory v1) │ │ ├── config # v1 配置系统 │ │ ├── core # v1 核心训练与推理模块 │ │ ├── extras # v1 扩展功能 │ │ ├── plugins # 插件系统(模型/采样器/分布式等) │ │ └── trainers # 训练器(Trainer)体系 │ └── webui # Web UI(Gradio 界面) │ ├── components # UI 组件 │ ├── tests # 测试集(核心模块测试) │ ├── data # 数据处理测试 │ ├── e2e # 端到端测试 │ ├── eval # 评测模块测试 │ ├── model # 模型加载/patch等测试 │ └── train # 训练流程测试 │ └── tests_v1 # v1 版本的历史测试集 ├── core # v1 核心模块测试 └── plugins # v1 插件系统测试 3 命令行接口 在使用如下命令安装环境依赖时,setup.py 会注册命令行工具 ...

2025年12月5日 · 8 分钟 · 1627 字 · hiyouga

KTransformers 微调 × LLaMA-Factory 集成

KTransformers 微调 × LLaMA-Factory 集成 引言 从 DeepSeek-V3/R1 到 Qwen3-MoE 和 Kimi-K2,每一次超大模型的开源都带来性能与规模上的巨大跃升。然而,多数研究者与开发者受限于昂贵的显卡与动辄数千亿参数的模型,难以在资源受限条件下微调超大模型。面对这种差距,我们提出了一种更具可行性的方案:通过 KTransformers 与 LLaMA-Factory 的结合,仅需 2~4 张 RTX 4090 与较高内存 CPU,便可微调 DeepSeek-671B 等超大规模的 MoE 模型。 该架构的核心目标是为资源受限下的研究者提供在本地探索超大规模模型微调的可能性。同时,也在较小规模(如 14B/30B)提供快速定制特定场景的路径。我们以风格化对话、西式腔调翻译、医学问答作为代表任务,验证架构的可行性,并展示在数小时内达成个性化适配的可操作性。 如下图所示,LLaMA-Factory 是整个微调流程的统一调度与配置框架,负责数据处理、训练调度、LoRA 插入与推理接口管理; KTransformers 则作为其可插拔的高性能后端,在相同的训练配置下接管 Attention / MoE 等核心算子,实现异构设备(GPU+CPU)的高效协同。 我们在 LLaMA-Factory 框架下,对比评测了 HuggingFace、Unsloth、KTransformers 三种后端的 LoRA 微调方案。结果显示,KTransformers 为超大规模的 MoE 模型(671B 等)提供了4090 级别的唯一可行方案,并在较小规模的 MoE 模型(DeepSeek-14B)上面也展现了更高的吞吐和更低的显存占用。 Under LoRA (BF16) + NekoQA-10K 风格化对话数据集 HuggingFace Backend Unsloth Backend KTransformers Backend [14B-DeepSeekV2-Lite] LoRA fine-tuning 吞吐量 303.58 token/s 455.37 token/s 530.38 token/s [14B-DeepSeekV2-Lite] GPU memory 32.12 GB 9.64 GB 6.08 GB [671B-DeepSeekV3] LoRA fine-tuning 吞吐量 OOM 尚未支持 40.35 token/s [671B-DeepSeekV3] GPU memory(共计) 理论值 1400 GB † 尚未支持 70 GB † † 1400 GB 为理论显存(BF16 全参数常驻,非可运行配置);70 GB 为 KT 策略(Attention 驻 GPU + MoE 分层 offload)下的实测峰值。 ...

2025年11月4日 · 5 分钟 · 914 字 · MadSys 实验室, KVCache-AI 团队, 趋境科技, LLaMA-Factory 团队

Megatron-Core Fine-Tuning with LLaMA-Factory

LLaMA-Factory 🤝 MCoreAdapter 为充分利用 Megatron-core 的并行技术并提高 MoE 模型的训练效率,我们将 ROLL 团队 提供的 MCoreAdapter 与 LLaMA-Factory 的数据链路及 Megatron Trainer 的训练后端相结合,构建了一个新的模型训练工作流。 🚀 快速开始 1. 💻 环境安装 📦 pip 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # for megatron-core pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu124 pip install \ numpy==1.26.4 \ optree>=0.13.0 \ spacy==3.7.5 \ weasel==0.4.1 \ transformer-engine[pytorch]==2.2.0 \ megatron-core==0.13.0 \ deepspeed==0.16.4 pip uninstall -y opencv opencv-python opencv-python-headless pip install opencv-python-headless==4.11.0.86 pip install "git+https://github.com/alibaba/roll.git#subdirectory=mcore_adapter" # for llamafactory git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e ".[torch,metrics]" --no-build-isolation 🐳 docker (推荐) 参考 Dockerfile 进行构建。 ...

2025年10月21日 · 3 分钟 · 624 字 · LLaMA-Factory Team