LlamaFactory Blog

使用 LlamaFactory 微调最新一代 Qwen3.5 模型辨别人形机器人型号

2026年伊始,从美国拉斯维加斯消费电子展(CES)到中国春晚,中国自主研发的人形机器人频频“破圈”,多家中国企业的产品和应用不仅在海外业界引发热议,更是在全球社交媒体平台和国际媒体不断“刷屏”。具身智能,被视为人工智能发展的下一阶段,其核心在于实现智能“大脑”与物理“身体”的深度耦合,从而将数据、算法与算力直接转化为改造客观世界的行动能力。而人形机器人,因其与人类相似的外形和功能,被视为具身智能的高阶形态和最佳载体,有望成为继智能手机、新能源汽车之后的新一代超级终端。 LlamaFactory 是一款开源低代码大模型微调框架,集成了业界最广泛使用的微调技术,支持通过 Web UI 界面零代码微调大模型,目前已经成为开源社区内最受欢迎的微调框架之一,GitHub 星标将近 7 万。 通义千问团队开源了新一代多模态大模型 Qwen3.5,本教程将聚焦于如何利用开源的 Qwen3.5-9B 模型,借助 LlamaFactory 这一开源低代码大模型微调框架,针对“辨别人形机器人型号”这一具体任务进行微调。我们希望通过这一实践,展示轻量化大模型如何赋能具身智能应用,让机器人不仅“看得见”,更能“看得懂”,从而为这场正在席卷全球的智能革命,贡献一份来自开源社区的实践力量。 运行环境要求 建议 GPU 显存不低于 32 GB 1. 安装 LlamaFactory 拉取 LlamaFactory 到本地 1 2 git clone --depth 1 https://github.com/hiyouga/LlamaFactory.git cd LlamaFactory 安装 LlamaFactory 环境依赖 1 pip install -e . 运行如下命令,如果显示 LlamaFactory 的版本,则表示安装成功。 1 llamafactory-cli version 2. 准备数据集 Manus 是一款专注于复杂任务执行的通用型 AI 智能体,能够从规划到执行自主完成端到端的任务。我们使用 Manus 自动化构建数据爬取的工作流,相比于传统的写爬虫脚本等方法非常高效。例如可以使用如下的 prompt 完成数据集的获取: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 我想微调一个能识别所有2026年春晚出现人形机器人型号的 Qwen3.5 模型,我希望你给我生成一个自动化数据集爬取的工作流,爬取2026年马年春晚的机器人以及国内和国外常见的人型机器人的图片及其型号,制造商等等一些描述信息,然后最终给我一个格式如下的 json 数据集: [ { "messages": [ { "role": "user", "content": "<image>请识别并描述图片中的机器人及其特征,特别注意其型号、生产商及应用场景。" }, { "role": "assistant", "content": "图片展示了由 宇树科技 (Unitree Robotics) 生产的 Unitree H1 机器人。搭载了先进的视觉和深度传感器系统,使其具备强大的环境感知能力,能够实时构建三维地图,实现自主导航和障碍物规避。" } ], "images": [ "images/unitree_h1_5.png" ] }, ... ] 我希望每个机器人图片对应一个问题和回答(一条数据),且user的问题和assistant的回答不单调,尽管机器人型号一样,我也希望问题和回答有多样性。 最终我希望得到的数据集至少有200张机器人图片,给我一个中文版的的json格式数据集和一个英文版的json格式数据集,还有数据集对应的图片文件。 本教程提供了一份多轮对话数据集,链接为:mllm_robot.zip。数据集中的样本为单轮对话形式,含有 405 条样本,每条样本都由一条用户指令和一条模型回答组成,微调过程中模型不断学习样本中的回答风格,从而达到识别机器人的目的。数据样例如下所示: ...

2026年3月3日 · 2 分钟 · 329 字 · hiyouga

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