LlamaFactory Blog

Qwen3-VL 模型相关问题

这篇博客关注 Qwen3-VL 模型的几个小问题,并给出相应的问题原因和解决办法。 1 Qwen3-VL 模型训练推理速度慢 问题:一些帖子和 issues 提到,在 torch=2.9 并且使用 Conv3D 的情况下,Qwen3-VL 的训练推理速度相较于 torch=2.8 有大幅退化,参考 https://github.com/pytorch/pytorch/issues/166122 。 1.1 检查 kernel 调用区别 首先分别在 torch=2.8 和 torch=2.9 两个版本下测试了 Conv3D 的 cuda 调用,测试代码如下: 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 import torch import torch.nn as nn class Glm4vVisionPatchEmbed(nn.Module): def __init__( self, patch_size: int = 14, temporal_patch_size: int = 1, in_channels: int = 3, hidden_size: int = 1536, ) -> None: super().__init__() self.patch_size = patch_size self.temporal_patch_size = temporal_patch_size self.hidden_size = hidden_size kernel_size = (temporal_patch_size, patch_size, patch_size) self.proj = nn.Conv3d( in_channels, hidden_size, kernel_size=kernel_size, stride=kernel_size, bias=True, ) def forward(self, x: torch.Tensor) -> torch.Tensor: L, C = x.shape x = x.view(L, -1, self.temporal_patch_size, self.patch_size, self.patch_size) x = self.proj(x).view(L, self.hidden_size) return x net = Glm4vVisionPatchEmbed( patch_size=14, temporal_patch_size=2, in_channels=3, hidden_size=1536, ) net = net.to('cuda').bfloat16() x = torch.randn(8192, 14 * 14 * 3 * 2).to('cuda').bfloat16() y = net(x) print(y.shape) with torch.cuda.nvtx.range("Glm4vVisionPatchEmbed"): y = net(x) torch.cuda.synchronize() 执行如下命令,可以得到 cuda 内核调用信息 ...

2026年1月5日 · 2 分钟 · 294 字 · hiyouga

KTransformers 联合 LLaMA-Factory 进行 RL-DPO 训练

本教程演示了如何使用 LLaMA-Factory 框架,通过直接偏好优化(Direct Preference Optimization,DPO) 对语言模型进行微调。DPO 是一种基于人类偏好来训练模型的方法,能够使模型输出更加对齐人类期望,更加以用户为中心。 1 环境配置 软硬件要求:CPU 支持 AMX,系统的 glibc 版本大于等于 2.32,建议 GPU 显存大于等于 32G。 Step 1: 创建 KTransformers 的 conda 环境 1 2 3 4 conda create -n Kllama python=3.12 # choose from : [3.11, 3.12, 3.13] conda activate Kllama conda install -y -c conda-forge libstdcxx-ng gcc_impl_linux-64 conda install -y -c nvidia/label/cuda-12.8.0 cuda-runtime Step 2: 安装 LLaMA-Factory 1 2 3 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e ".[torch,metrics]" --no-build-isolation Step 3: 安装 KTransformers Option 1: 从 https://github.com/kvcache-ai/ktransformers/releases/tag/v0.4.4 下载并安装与 Torch 和 Python 版本相匹配的 KTransformers wheel 包。 ...

2025年12月23日 · 3 分钟 · 566 字 · hiyouga

添加 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