大模型的微调、部署与调用实战记录
·
前言:本篇主要讲解Qwen3-VL-8B模型的微调和部署流程,以及如何在Dify平台上进行调用?
1、硬件与系统前置条件(重要)
| 项目 | 推荐 |
|---|---|
| GPU | ≥4×RTX 4090 24GB 或 2× A100 40GB |
| CUDA | 12.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、训练相关命令
-
其他基模型和部分公开数据集,可参考modelscope社区https://www.modelscope.cn/models
-
本文参数设置仅供参考,参数解析见https://swift.readthedocs.io/zh-cn/latest/index.html
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中添加的模型


更多推荐

所有评论(0)