llamafactory微调qwen3-vl详细流程

llamafactory微调qwen3-vl详细流程

llamafactory微调qwen3-vl详细流程

目标:本文讲详细介绍多模态大模型使用llama-factory进行多模态模型微调(sft)的全部流程,以及微调后合并和工业落地部署方案。具体包括:

  1. 环境安装部署
  2. 数据集准备
  3. 启动微调
  4. 模型合并
  5. 模型部署和请求方式(vllm部署)

示例模型:
qwen2.5-vl-instruct qwen3-vl-instruct

环境安装

llama-factory环境准备

方式1 git直接下载

git clone --depth https://github.com/hiyouga/LLaMA-Factory.git 

方式2 下载项目压缩包再解压

在这里插入图片描述

python环境安装

  1. python虚拟环境创建
    • conda create --name llama_env python=3.12 (默认已安装好anaconda或者minianaconda)
    • conda activate llama_env # 进入虚拟环境
  2. 安装依赖包
    • cd LLaMA-Factory-main # 进入项目目录
    • pip install -e “.[torch,metrics]” --no-build-isolation -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
在这里插入图片描述
在这里插入图片描述

下载模型

从modelscope或者huggingface下载模型到指定目录。比如qwen3-vl。

  1. 在当前项目目录打开cmd
  2. 输入modelscope download --model Qwen/Qwen3-VL-2B-Instruct --local_dir ./qwen3_vl_model 将模型下载到models目录下。

在这里插入图片描述

启动训练(命令行)

在linux系统上,一般直接使用命令行进行训练、合并、部署。

lora微调步骤-sft任务

先使用默认数据集测试微调流程

​ 在LLaMA-Factory-main目录下:

执行 CUDA_VISIBLE_DEVICES=6 llamafactory-cli train examples/train_lora/qwen2_5vl_lora_sft.yaml开始训练画面:

在这里插入图片描述

vim examples/train_lora/qwen2_5vl_lora_sft.yaml

### model model_name_or_path: /data/hcb/LLaMA-Factory-main/qwen3_vl_model # 模型路径 image_max_pixels: 262144 video_max_pixels: 16384 trust_remote_code: true### method stage: sft do_train: true finetuning_type: lora lora_rank: 8 lora_target: all ### dataset dataset: mllm_demo,identity,alpaca_en_demo # video: mllm_video_demo 默认数据集,项目自带 template: qwen3_vl # 这里要改 cutoff_len: 2048 max_samples: 1000 overwrite_cache: true preprocessing_num_workers: 16 dataloader_num_workers: 4### output output_dir: saves/qwen3vl-2b/lora/sft # lora文件保存路径 logging_steps: 10 save_steps: 500 plot_loss: true overwrite_output_dir: true save_only_model: false report_to: none # choices: [none, wandb, tensorboard, swanlab, mlflow]### train per_device_train_batch_size: 1 gradient_accumulation_steps: 8 learning_rate: 1.0e-4 num_train_epochs: 1.0 lr_scheduler_type: cosine warmup_ratio: 0.1 bf16: true ddp_timeout: 180000000 resume_from_checkpoint: null ### eval# val_size: 0.1# per_device_eval_batch_size: 1# eval_strategy: steps# eval_steps: 500

​ 训练完成后lora模型存储在配置的目录中:

在这里插入图片描述

合并lora模型

微调完成后,需要合并原模型和lora模型。

  1. 执行合并脚本:llamafactory-cli export examples/merge_lora/qwen2_5vl_lora_sft.yaml

编辑合并脚本:vim examples/merge_lora/llama3_lora_sft.yaml

### Note: DO NOT use quantized model or quantization_bit when merging lora adapters### model model_name_or_path: /data/hcb/LLaMA-Factory-main/qwen3_vl_model # 原模型路径 adapter_name_or_path: saves/qwen3vl-2b/lora/sft # lora路径 template: qwen3_vl # 模型格式 trust_remote_code: true### export export_dir: output/qwen3vl_lora_sft export_size: 5 export_device: cpu # choices: [cpu, auto] export_legacy_format: false

​ 合并后的模型保存在配置的存储路径中。

在这里插入图片描述

训练完成。

私有训练数据准备(重要)

目前使用llama-factoy整个流程基本固化,主要就是构造不同的数据集。前面我们使用了官方提供的数据集进行了训练。现在我们构造自己的私有数据集,还是以文本类sft任务为例。

了解data目录和dataset_info.json文件

制作训练数据集,要先认识data目录以及dataset_info.json文件。LLaMA-Factory-main主目录下有一个data目录用来存放数据集文件以及数据集配置文件(dataset_info.json)。

对于我们前面使用的训练数据dataset: mllm_demo,我们可以在dataset_info.json中找到注册记录,如下图:

在这里插入图片描述

其对应的具体文件就是file_name指向的文件名,即data目录下的mllm_demo.json文件。其格式如下:

在这里插入图片描述

我们可以仿照这个格式构造自己的sft任务的数据集。

详细构造自己的sft数据集

LLama-Factoy支持的多种任务的数据集格式都在:https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README.md

多模态-图像 构造sharegpt格式参考:

在这里插入图片描述
在这里插入图片描述
  1. 将改造好的训练集文件tab_reg_samples.json文件放到LLaMA-Factory-main/data目录下

在dataset_info.json文件中注册tab_reg_samples.json数据集。具体如下:

在这里插入图片描述

LLaMA-Factory-main/data新建图片存放目录table_reg(与数据集中images下的路径一致)。将数据集中用到的图片上传到table_reg目录下。

在这里插入图片描述

我们需要把自己的数据使用脚本改造成上面的json格式。构造了一个根据图片识别其中表格的数据集。提示词中需要添加图像的占位符 然后在images列表中添加图片的具体路径。(可以添加多个图片。)

在这里插入图片描述

开始训练

数据集配置完成后,在examples/train_lora/qwen2_5vl_lora_sft.yaml训练脚本中直接引入数据集。只修改dataset:部分。

项目主目录下执行 vim examples/train_lora/qwen2_5vl_lora_sft.yaml

### model model_name_or_path: /data/hcb/LLaMA-Factory-main/qwen3_vl_model # 模型路径 image_max_pixels: 262144 video_max_pixels: 16384 trust_remote_code: true### method stage: sft do_train: true finetuning_type: lora lora_rank: 8 lora_target: all ### dataset dataset: table_reg # 注册的数据集名称 template: qwen3_vl cutoff_len: 2048 max_samples: 1000 overwrite_cache: true preprocessing_num_workers: 16 dataloader_num_workers: 4### output output_dir: saves/qwen3vl-2b_table/lora/sft # lora文件保存路径 logging_steps: 10 save_steps: 500 plot_loss: true overwrite_output_dir: true save_only_model: false report_to: none # choices: [none, wandb, tensorboard, swanlab, mlflow]### train per_device_train_batch_size: 1 gradient_accumulation_steps: 8 learning_rate: 1.0e-4 num_train_epochs: 1.0 lr_scheduler_type: cosine warmup_ratio: 0.1 bf16: true ddp_timeout: 180000000 resume_from_checkpoint: null ### eval# val_size: 0.1# per_device_eval_batch_size: 1# eval_strategy: steps# eval_steps: 500

修改完成后执行训练:

CUDA_VISIBLE_DEVICES=6 llamafactory-cli train examples/train_lora/qwen2_5vl_lora_sft.yaml

在这里插入图片描述

后续合并步骤完全一样。

其他任务数据构造

ing…

模型部署

llama-factory也支持基本的模型部署,但是很多时候我们需要以接口调用的形式来使用大模型能力,常见的有ollma、vllm、sglang等方式,为了支持产品落地支持高并发,我们一般使用vllm部署模型,基于openai风格进行接口调用。下载详细介绍一下使用vllm部署模型并请求。

vllm安装

在当前虚拟环境中执行:pip install vllm==0.11.0 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

在这里插入图片描述

服务启动命令(openai标准)

直接启动我们上面微调合并后的模型:

# 启动 vLLM OpenAI 兼容 API 服务器# 核心功能:将指定大模型以 OpenAI API 格式暴露服务,支持高并发、低延迟推理exportCUDA_VISIBLE_DEVICES=6# 指定使用哪个gpu python -m vllm.entrypoints.openai.api_server \ --host 0.0.0.0 \# 绑定所有网络接口,允许外部机器访问(仅内网环境建议使用) --port 8003\# API 服务监听端口,客户端通过该端口调用(自定义) --model /data/hcb/LLaMA-Factory-main/output/qwen3vl_lora_sft \# 模型文件本地路径 --served-model-name qwen3_vl \# 对外暴露的模型名称(客户端调用时指定该名称) --trust-remote-code \# 信任模型仓库中的自定义代码(部分模型需要自定义加载逻辑) --dtype float16 \# 模型推理数据类型(float16 平衡性能和精度,适配多数GPU) --gpu-memory-utilization 0.8\# GPU 显存利用率上限(根据实际情况调整) --tp 1\# 张量并行度(1 表示单卡推理,多卡时需调整为显卡数量)# 上面是命令介绍 可以直接用下面这行启动CUDA_VISIBLE_DEVICES=6 python -m vllm.entrypoints.openai.api_server --host 0.0.0.0 --port 8003 --model /data/hcb/LLaMA-Factory-main/output/qwen3vl_lora_sft --served-model-name qwen3_vl --trust-remote-code --dtype float16 --gpu-memory-utilization 0.8

启动成功:

在这里插入图片描述

服务请求

代码请求
""" @version: python3.9 @author: hcb @software: PyCharm @file: multimodal_request.py @time: 2025/11/15 07:20 """import openai import base64 import os from openai import OpenAI defencode_image(image_path):"""将图像文件编码为base64"""withopen(image_path,"rb")as image_file:return base64.b64encode(image_file.read()).decode('utf-8')defmultimodal_chat(image_path=None, text_prompt="描述这张图片"):""" 多模态聊天请求 Args: image_path: 图像文件路径 text_prompt: 文本提示 """ client = OpenAI( api_key="Empty", base_url="http://10.10.185.9:8803/v1/"# 你的vLLM服务器地址和端口)# 构建消息内容 messages =[{"role":"system","content":"你是一个多模态智能助手,可以理解和分析图像内容。"}]# 如果有图像,添加多模态内容if image_path and os.path.exists(image_path): base64_image = encode_image(image_path) user_content =[{"type":"text","text": text_prompt },{"type":"image_url","image_url":{"url":f"data:image/jpeg;base64,{base64_image}"}}]else:# 如果没有图像,只发送文本 user_content = text_prompt messages.append({"role":"user","content": user_content }) payload ={"model":"qwen3_vl",# 你设置的模型名称"messages": messages,"temperature":0.1,"max_tokens":2000}print("请求payload结构:")print(f"- 模型: {payload['model']}")print(f"- 消息数量: {len(payload['messages'])}")if image_path:print(f"- 包含图像: {image_path}")print(f"- 提示词: {text_prompt}")try:# 发送请求 response = client.chat.completions.create(**payload, timeout=30# 多模态请求可能需要更长时间)return response except Exception as e:print(f"请求失败: {e}")returnNoneif __name__ =="__main__":# 直接测试特定图片 image_path =r"C:\Users\15941\Desktop\临时\副业\宠物\狗头舔脚\2.png"# 修改为你的图片路径 prompt ="描述这张图片中有什么"if os.path.exists(image_path):print(f"正在分析图片: {image_path}") res = multimodal_chat(image_path=image_path, text_prompt=prompt)if res and res.choices:print("\n模型回复:")print(res.choices[0].message.content)else:print("请求失败")

结果:

在这里插入图片描述

Read more

轻量4B模型也能做视频理解?Qwen3-VL-WEBUI开箱即用实测

轻量4B模型也能做视频理解?Qwen3-VL-WEBUI开箱即用实测 在AI多模态能力不断演进的今天,“看懂视频” 已不再是科幻场景。然而,大多数具备视频理解能力的大模型动辄需要8B、13B甚至更大的参数规模,部署门槛高、显存消耗大,难以在边缘设备或本地工作站落地。 但当阿里推出 Qwen3-VL-4B-Instruct 并集成于 Qwen3-VL-WEBUI 镜像中时,这一局面被打破——我们首次看到一个仅40GB显存即可运行、支持完整视频理解任务的轻量级视觉语言模型(VLM),真正实现了“开箱即用”。 本文将基于官方镜像 Qwen3-VL-WEBUI,从部署到实战,全面测试其在逐帧摘要生成、事件时间轴构建、动态行为识别等关键视频理解任务中的表现,并验证:轻量4B模型,是否真的能胜任复杂多模态推理? 一、为什么我们需要轻量化的视频理解模型? 当前主流的多模态大模型如 Qwen-VL-Max、GPT-4o、Claude 3 Opus 等虽具备强大视频理解能力,但普遍存在三大问题: * 硬件要求极高:需A100/H100级别GPU,单卡无法运行 * 推理延迟长:处理几分钟

企业级web影院订票系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

企业级web影院订票系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着互联网技术的快速发展和数字化生活的普及,影院行业正面临着从传统线下售票向线上智能化转型的需求。观众对便捷、高效的购票体验要求日益提升,而影院管理方也需要一套功能完善、操作简便的系统来优化票务管理、排片安排和数据分析。基于此背景,开发一款企业级Web影院订票系统具有重要的现实意义。该系统能够整合线上线下资源,实现用户自助选座购票、影院动态排片、数据统计分析等功能,为影院运营提供全方位支持。关键词:影院订票系统、数字化转型、线上购票、智能化管理、企业级应用。 本系统采用SpringBoot+Vue+MyBatis架构,结合MySQL数据库,实现了前后端分离的高效开发模式。SpringBoot框架简化了后端服务的搭建,提供了稳定的RESTful API接口;Vue.js框架构建了响应式前端界面,提升了用户体验;MyBatis作为ORM工具,优化了数据库操作效率。系统功能涵盖用户注册登录、影片信息管理、场次排期、在线选座购票、订单支付、数据统计等模块,支持多角色权限管理,满足影院管理员和普通用户的不同需求。关键词:SpringBoot、Vue.js、MyBatis、MySQL、权

10分钟零代码!用OpenClaw搭建私人微信AI助理,彻底解放双手

10分钟零代码!用OpenClaw搭建私人微信AI助理,彻底解放双手

做了这么久AI应用落地,我被问得最多的问题就是:“能不能给我的微信整个AI助理,自动回消息、管日程、汇总群聊?” 说实话,这个需求我自己折腾了快两年,踩过的坑能绕开三圈: * 最早用itchat、wechaty写Python脚本,代码写了几百行,调试了半个月,结果用了不到3天,微信直接限制登录,差点把主号搞封了; * 后来用企业微信机器人,只能在企业群里用,个人微信、私域群完全用不了,局限性拉满; * 再后来试了市面上的第三方SaaS工具,要么是按月付费贵得离谱,要么是所有聊天数据都要传到人家服务器,客户信息、私人聊天全泄露了,根本不敢用; * 最头疼的是,所有方案都要写代码、调接口、搭环境,新手根本无从下手,就算是开发者,也要折腾好几天才能跑通。 直到我把OpenClaw部署落地后,这个问题被彻底解决了。不用写一行代码,不用研究微信协议,不用申请任何企业资质,10分钟就能搭好一个完全私有化的微信AI助理,消息自动回复、群聊汇总、日程提醒、待办管理全搞定,而且数据全在本地,大模型可以接本地开源的,完全不用担心隐私泄露,封号风险也降到了最低。 这篇文章,我就用保姆级的步骤

AI时代人人都是产品经理:需求采集:用 AI 高效采集全渠道用户需求的实操技巧

AI时代人人都是产品经理:需求采集:用 AI 高效采集全渠道用户需求的实操技巧

为什么AI能重构需求采集效率 在AI普及前,产品经理的需求采集工作往往陷入「三重困境」: * 渠道分散:用户需求散落在APP评论、社群、客服工单、社交媒体等10+平台,人工收集效率不足10% * 噪音干扰:无效吐槽、重复反馈占比超60%,人工筛选耗时耗力 * 洞察滞后:从收集到整理出可落地结论,平均需要7-14天,错过最佳迭代窗口 AI的核心价值在于用机器的算力替代人工的重复劳动,实现「全渠道覆盖-实时清洗-智能洞察」的闭环,让需求采集效率提升10倍以上。 前置准备:AI需求采集的工具栈搭建 核心工具选择 工具类型推荐工具核心优势适用场景全渠道数据采集八爪鱼采集器/Monday.com支持API对接+无规则页面爬取跨平台结构化数据收集AI语义分析百度文心一言/OpenAI GPT-4多意图识别+情感分析+实体抽取需求分类、噪音过滤需求管理集成Jira/飞书多维表格自动同步AI分析结果,支持自定义字段配置需求落地追踪 环境配置(以Python+GPT-4为例) 1. 安装依赖库 # 安装HTTP请求库和JSON处理库 pip install reque