前言:本篇主要讲解Qwen3-VL-8B模型的微调和部署流程,以及如何在Dify平台上进行调用?

1、硬件与系统前置条件(重要)

项目推荐
GPU≥4×RTX 4090 24GB2× A100 40GB
CUDA12.1 / 12.2
内存≥64GB
硬盘≥500GB(模型+图片+checkpoint)
系统Ubuntu 20.04 / 22.04

我使用的是4张英伟达的RTX 4090

环境配置

  • 使用框架:ms-swift

  • 环境基础配置如下

python版本:3.10.19
conda版本:25.11.0
cuda版本:12.6
pytorch版本:2.8.0
vllm版本:0.11.0

2、训练相关命令

2.1 模型训练

PYTORCH_ALLOC_CONF='expandable_segments:True' \
NPROC_PER_NODE=4 \
CUDA_VISIBLE_DEVICES=0,1,2,3 \             #同时在4张卡上训练
swift sft \
    --model Qwen/Qwen3-VL-8B-Instruct \
    --dataset './train_dataset.jsonl' \    #输入训练数据集josnl文件的绝对路径
    --val_dataset './val_dataset.jsonl' \  #输入验证数据集josnl文件的绝对路径
    --load_from_cache_file false \
    --split_dataset_ratio 0 \
    --train_type lora \
    --torch_dtype bfloat16 \
    --num_train_epochs 2 \
    --per_device_train_batch_size 2 \
    --per_device_eval_batch_size 2 \
    --attn_impl flash_attn \
    --padding_free true \
    --learning_rate 3e-5 \
    --lora_rank  32 \
    --lora_alpha 64 \
    --lr_scheduler_type 'cosine' \
    --lora_dropout 0.05 \
    --max_pixels 839808 \
    --target_modules all-linear \
    --freeze_vit true \
    --freeze_aligner true \
    --packing false \
    --gradient_checkpointing true \
    --vit_gradient_checkpointing false \
    --gradient_accumulation_steps 8 \
    --eval_steps 200 \
    --save_steps 200 \
    --save_total_limit 2 \
    --logging_steps 5 \
    --max_length 4096 \
    --output_dir output \
    --warmup_ratio 0.01 \
    --deepspeed zero2 \
    --dataset_num_proc 8 \
    --dataloader_num_workers 8 \
    --metric_for_best_model 'eval_token_acc' \
    --greater_is_better true

2.2 模型推理

CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters output/vx-xxx/checkpoint-xxx \  #输入你的checkpoint文件夹路径
    --infer_backend pt \
    --temperature 0 \
    --max_new_tokens 2048 \
    --val_dataset <dataset-path> \
    --max_batch_size 1

2.3 模型导出

swift export 
--adapters output/vx-xxx/checkpoint-xxx 
--merge_lora true

2.4 模型推送

swift export 
--model output/vx-xxx/checkpoint-xxx 
--push_to_hub true 
--hub_model_id '<model-id>' 
--hub_token '<sdk-token>' 
--use_hf false

2.5 模型部署

PYTORCH_ALLOC_CONF='expandable_segments:True' \
NPROC_PER_NODE=2 \
CUDA_VISIBLE_DEVICES=0,1 \   #多卡部署
GLOO_SOCKET_IFNAME=ens3 \
NCCL_SOCKET_IFNAME=ens3 \
MAX_PIXELS=1003520 \
nohup swift deploy \
--adapters ./output/vXX/checkpoint-XXX \  #输入你的checkpoint文件夹路径
--infer_backend vllm \
--temperature 0.7 \
--host 0.0.0.0 \
--merge_lora true \
--port XXXX \  #输入下面设置的端口号
--vllm_gpu_memory_utilization 0.98 \
--vllm_max_model_len 4096 \
--max_new_tokens 2048 \
--vllm_data_parallel_size 2 \   # vllm 加速推理、提高并发量
--vllm_limit_mm_per_prompt '{"image": 3}'  > vllm_service.log 2>&1 &

3、dify接入模型

3.1 开启防火墙

## 1、开放端口命令
firewall-cmd --zone=public --add-port=【模型端口号】/tcp --permanent

## 2、设置完成后执行
firewall-cmd --reload

## 3、重新加载后查询端口是否开放
firewall-cmd --zone=public --list-ports

3.2 安全组添加入口规则

我采用的是云服务器,参考配置流程如下图所示

3.3 dify接入

模型供应商选择vllm,点击添加模型

填写模型的凭据信息,并点击保存
注:模型名称需与部署时设置的名称保持一致

创建自己chatflow,然后将LLM中的模型更换为你在vllm中添加的模型

更多推荐