LLaMA-Factory v1 怎么做多模态 SFT 训练(图像/视频/音频样本)
2026/9/13 5:57:39 网站建设 项目流程

LLaMA-Factory v1 怎么做多模态 SFT 训练(图像/视频/音频样本)

【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory

如果你的数据不是纯文本对话,而是混合了图像、视频或音频的多模态样本,想在 LLaMA-Factoryv1里跑一次监督微调(SFT),可以参考仓库自带的多模态示例:训练配置 examples/v1/train_full/train_multimodal.yaml 指向演示数据 data/v1_multimodal_demo.yaml,使用fsdp2分布式策略对一个 Qwen 模型做小规模验证训练。本文按“环境安装 → 准备多模态数据 → 配置训练文件 → 运行 → 验证”的顺序走一遍这条路径。

准备环境

docs/zh/getting-started.md 给出的软件依赖要求如下(最低 / 推荐版本):

必需项至少推荐
python3.113.12
torch2.7.12.7.1
torchvision0.22.10.22.1
transformers5.0.05.0.0
datasets3.2.04.0.0
peft0.18.10.18.1

可选依赖:CUDA(NVIDIA GPU)至少 11.6(推荐 12.2)、flash-attn至少 2.5.6、deepspeed0.18.4。

安装方式二选一,文档推荐从源码安装:

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e .

或者直接用 pip:

pip install llamafactory

v1 多模态数据格式

v1 使用统一的Messages 格式作为标准数据格式:每个样本是一个包含messages字段的 JSON 对象,messages中每条消息有rolesystem/user/assistant)、contentloss_weight三个字段(见 docs/zh/data-preparation/data-processing.md)。

多模态样本的关键在content:它是一个列表,除{"type": "text", ...}外可以加入非文本类型:

  • image_url:图像
  • video_url:视频
  • audio_url:音频

一个图像样本的标准格式(文档示例):

{ "messages": [ { "role": "user", "content": [ {"type": "text", "value": "这张图片里有什么?"}, {"type": "image_url", "value": "path/to/image.jpg"} ], "loss_weight": 0.0 }, { "role": "assistant", "content": [{"type": "text", "value": "图片中有一只猫。"}], "loss_weight": 1.0 } ] }

loss_weight控制该消息是否计算损失:0.0表示不算(一般用于提示词部分),1.0表示完全计算(用于回复部分),也可以设为其他值调整学习权重。文档说明image_urlaudio_urlvideo_url的路径可以是相对路径或绝对路径,具体加载方式由DataLoaderPlugin决定。

仓库自带的演示数据 data/v1_multimodal_demo.jsonl 就是这种格式,其中一条实际样本如下(多轮对话,image_url指向仓库内的演示图片):

{"messages": [{"role": "user", "content": [{"type": "image_url", "value": "data/mllm_demo_data/1.jpg"}, {"type": "text", "value": "Who are they?"}]}, {"role": "assistant", "content": [{"type": "text", "value": "They're Kane and Gretzka from Bayern Munich."}]}, {"role": "user", "content": [{"type": "text", "value": "What are they doing?"}, {"type": "image_url", "value": "data/mllm_demo_data/1.jpg"}]}, {"role": "assistant", "content": [{"type": "text", "value": "They are celebrating on the soccer field."}]}]}

注意:演示数据里目前只包含图像样本。要训练视频或音频数据,按同一格式把内容项换成video_url/audio_url并指向你的本地文件即可,文档未提供视频、音频的现成演示数据。

数据集配置

训练配置不直接指向.jsonl,而是通过一个数据集配置文件引用它。仓库自带的 data/v1_multimodal_demo.yaml 内容如下:

multimodal_demo: path: data/v1_multimodal_demo.jsonl source: local

即声明一个名为multimodal_demo的数据集,从本地路径data/v1_multimodal_demo.jsonl加载。

补充说明:数据预处理文档描述的dataset_info.yaml字段包括file_name(本地文件路径,支持.json.jsonl.csv.parquet.arrow.txt)、hf_hub_url(HF Hub 仓库 ID,二者必选其一),以及可选的convertersizeweightsplitstreaming。文档未逐字段解释演示配置中使用的path/source写法,如果你的数据需要转换器或权重配置,以 docs/zh/data-preparation/data-processing.md 中的字段说明为准,并参考该文档给出的示例。

配置训练文件

仓库示例 examples/v1/train_full/train_multimodal.yaml 全文如下:

model: Qwen/Qwen3.5-0.8B model_class: llm kernel_config: name: auto quant_config: null dist_config: name: fsdp2 dcp_path: null ### data train_dataset: data/v1_multimodal_demo.yaml ### training output_dir: outputs/test_multimodal micro_batch_size: 1 cutoff_len: 2048 learning_rate: 1.0e-4 max_steps: 5 ### sample sample_backend: hf max_new_tokens: 128

各项的含义可以对照理解:

  • model/model_class:指定模型与模型类别,示例使用Qwen/Qwen3.5-0.8B,替换成你要微调的模型即可;
  • dist_config.name: fsdp2:分布式策略,示例走 FSDP2;
  • train_dataset:指向上一节的数据集配置文件;
  • micro_batch_size: 1cutoff_len: 2048learning_rate: 1.0e-4:训练超参;
  • max_steps: 5:很小的步数,用于快速验证流水线,正式训练需按数据集规模调整;
  • sample块(sample_backendmax_new_tokens)随模板提供,保留原样即可,示例文档未对其做进一步展开。

运行训练

按 docs/zh/getting-started.md 的命令行训练方式,先导出USE_V1=1再传入训练配置文件:

export USE_V1=1 llamafactory-cli sft examples/v1/train_full/train_multimodal.yaml

文档说明llamafactory-cli sftllamafactory-cli train等价,两个命令可以互换。

验证结果

训练前核对数据。数据预处理文档给出了用DataEngine直接访问数据样本的方法,可以先把数据集加载出来检查格式是否正确(下方路径替换为你的多模态数据文件):

from llamafactory.v1.config.data_args import DataArguments from llamafactory.v1.core.data_engine import DataEngine data_args = DataArguments(dataset="data/v1_multimodal_demo.jsonl") engine = DataEngine(data_args=data_args) print(f"数据集总样本数: {len(engine)}") print(f"数据集列表: {list(engine.datasets.keys())}") sample = engine[0] print(f"样本格式: {sample.keys()}") for content_item in sample['messages'][0]['content']: print(f" 类型: {content_item['type']}, 值: {content_item['value']}")

文档给出的输出示例(对应文本演示数据集,此处仅示意输出形态):

数据集总样本数: 500 数据集列表: ['default'] 样本格式: dict_keys(['_dataset_name', 'messages'])

按多模态数据文件加载时,content中应能看到image_url(或video_url/audio_url)类型的条目及其路径,说明消息列表与媒体引用已被正确解析。

训练后检查产物与推理。按上面的配置,训练产物写入outputs/test_multimodal(即output_dir)。确认训练正常结束、输出目录生成后,按快速开始文档的推理部署方式加载模型做交互式验证:

llamafactory-cli chat --model_name_or_path path/to/your/model --template qwen

其中path/to/your/model替换为你训练产物的实际路径;也可以加--infer_backend vllm使用 vLLM 后端。

边界与限制

  • 快速开始文档提示:v1 版本目前支持 SFT 和 DPO 两种训练方法,多模态 SFT 属于其中 SFT 路径;
  • 演示数据只覆盖图像;video_url/audio_url由数据格式文档明确支持,但仓库没有附带对应演示文件,加载行为由DataLoaderPlugin决定;
  • 示例配置的max_steps: 5micro_batch_size: 1是快速验证规模,正式训练时这两项需要按自己的数据量和显存调整,文档未给出统一推荐值。

【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询