LLM - 配置 ModelScope SWIFT 测试 Qwen2-VL 视频微调(LoRA) 教程(3)

欢迎关注我的CSDN:https://spike.blog.csdn.net/

本文地址:https://spike.blog.csdn.net/article/details/142882496

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


SWIFT 即 Scalable lightWeight Infrastructure for FineTuning (可扩展轻量级微调基础设施),是高效、轻量级的模型微调和推理框架,支持大语言模型(LLM) 和 多模态大型模型(MLLM) 的训练、推理、评估和部署。可以将 SWIFT 框架直接应用到研究和生产环境中,实现从模型训练和评估到应用的完整工作流程。

GitHub: modelscope/ms-swift


1. 数据集

测试数据集,视频文本数据集,即:

示例:

bash 复制代码
Row 0: {'video_name': 'v_p1QGn0IzfW0', 'question_1': 'What equipment is visible in the gym where the boy is doing his routine?', 'question_2': 'None', 'answer': 'There is other equipment visible in the gym like a high bar and still rings.'}

视频:

测试命令:

bash 复制代码
NFRAMES=24 MAX_PIXELS=100352 CUDA_VISIBLE_DEVICES=0 swift infer --model_type qwen2-vl-7b-instruct
<video>What equipment is visible in the gym where the boy is doing his routine?
[your path]/modelscope_models/media_resources/v_p1QGn0IzfW0.mp4
# 模型输出
The video shows a red and white pole, a red and white bar, and a red and white pole in the gym where the boy is doing his routine.
# Fine-Tuning 模型输出 (明显更优)
Other equipment visible in the gym includes a high bar, still rings, and a platform with foam mats on the floor.

video_chatgpt 数据集处理函数:

python 复制代码
def _preprocess_video_chatgpt(dataset: DATASET_TYPE) -> DATASET_TYPE:
    url = 'https://modelscope.cn/datasets/swift/VideoChatGPT/resolve/master/videos.zip'
    local_dir = MediaCache.download(url, 'video_chatgpt')
    local_dir = os.path.join(local_dir, 'Test_Videos')
    # only `.mp4`
    mp4_set = [file[:-4] for file in os.listdir(local_dir) if file.endswith('mp4')]

    def _process(d):
        if d['video_name'] not in mp4_set:
            return {'query': None, 'response': None, 'videos': None}
        return {
            'query': d['question'] or d['question_1'] or d['question_2'],
            'response': d['answer'],
            'videos': [os.path.join(local_dir, f"{d['video_name']}.mp4")]
        }

    return dataset.map(_process).filter(lambda row: row['query'] is not None)

支持提前使用 ModelScope 命令下载 VideoChatGPT 数据集,即:

bash 复制代码
modelscope download --dataset swift/VideoChatGPT --local_dir swift/VideoChatGPT

复制到 ModelScope 的缓存目录:MODELSCOPE_CACHE,缓存位置如下:

bash 复制代码
[your folder]/modelscope_models/media_resources/video_chatgpt

需要进行重命名 VideoChatGPT -> video_chatgpt,同时,提前解压视频文件 videos.zip -> Test_Videos,这样就可以直接使用数据集:

bash 复制代码
--dataset video-chatgpt

2. 微调

视频描述任务,指令微调的训练脚本,如下:

  • NFRAMES 使用的视频帧数
  • MAX_PIXELS 最大像素数量,100352 = 1024x98
  • CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 NPROC_PER_NODE=8,多卡参数
  • --dataset video-chatgpt 数据集

即:

bash 复制代码
NFRAMES=24 MAX_PIXELS=100352 CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 NPROC_PER_NODE=8 nohup swift sft \
--model_type qwen2-vl-7b-instruct \
--model_id_or_path qwen/Qwen2-VL-7B-Instruct \
--sft_type lora \
--dataset video-chatgpt \
--deepspeed default-zero2 \
--num_train_epochs 2 \
--batch_size 2 \
--eval_steps 100 \
--save_steps 100 \
> nohup.video-chatgpt.out &

训练日志:

bash 复制代码
Train: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 398/398 [4:09:59<00:00, 21.84s/it]
{'eval_loss': 1.29713297, 'eval_acc': 0.63649852, 'eval_runtime': 83.265, 'eval_samples_per_second': 0.36, 'eval_steps_per_second': 0.024, 'epoch': 2.0, 'global_step/max_steps': '398/398', 'percentage': '100.00%', 'elapsed_time': '4h 11m 22s', 'remaining_time': '0s'}
Val: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:02<00:00,  1.47s/it]
[INFO:swift] Saving model checkpoint to [your path]/llm/ms-swift/output/qwen2-vl-7b-instruct/v18-20241013-065323/checkpoint-398
{'train_runtime': 15092.9517, 'train_samples_per_second': 0.421, 'train_steps_per_second': 0.026, 'train_loss': 1.21231406, 'epoch': 2.0, 'global_step/max_steps': '398/398', 'percentage': '100.00%', 'elapsed_time': '4h 11m 32s', 'remaining_time': '0s'}
Train: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 398/398 [4:11:32<00:00, 37.92s/it]
[INFO:swift] last_model_checkpoint: [your path]/llm/ms-swift/output/qwen2-vl-7b-instruct/v18-20241013-065323/checkpoint-398
[INFO:swift] best_model_checkpoint: [your path]/llm/ms-swift/output/qwen2-vl-7b-instruct/v18-20241013-065323/checkpoint-398
[INFO:swift] images_dir: [your path]/llm/ms-swift/output/qwen2-vl-7b-instruct/v18-20241013-065323/images
[INFO:swift] End time of running main: 2024-10-13 11:15:43.850041

训练输出:

bash 复制代码
[your path]/llm/ms-swift/output/qwen2-vl-7b-instruct/v18-20241013-065323/

TensorBoard 可视化模型输出:

bash 复制代码
tensorboard --logdir="runs" --host=0.0.0.0 --port=6006

训练 Loss:

验证集 Loss:

GPU 占用 (53.4G):

合并 LoRA 模型:

bash 复制代码
CUDA_VISIBLE_DEVICES=0,1,2 swift infer \
--ckpt_dir [your path]/llm/ms-swift/output/qwen2-vl-7b-instruct/v18-20241013-065323/checkpoint-398/ \
--merge_lora true
# --load_dataset_config true
# 直接评估模型

使用 LoRA 模型:

bash 复制代码
NFRAMES=24 MAX_PIXELS=100352 CUDA_VISIBLE_DEVICES=0,1,2 swift infer --ckpt_dir [your path]/llm/ms-swift/output/qwen2-vl-7b-instruct/v18-20241013-065323/checkpoint-398-merged/
相关推荐
黑心萝卜三条杠6 分钟前
一文解决Jetson Orin Nano在不连接显示器的前提下VNC无法显示桌面
人工智能
远洋录6 分钟前
Ethan独立开发产品日报 | 2025-04-20
人工智能·程序员·独立开发
陈佬昔没带相机14 分钟前
[译]AI 是资深开发者的黄金时代
人工智能·程序员
Lilith的AI学习日记25 分钟前
n8n 中文系列教程_04.半开放节点深度解析:Code与HTTP Request高阶用法指南
大数据·人工智能·aigc·n8n
带娃的IT创业者35 分钟前
《AI大模型应知应会100篇》第22篇:系统提示词(System Prompt)设计与优化
人工智能·prompt
绝顶大聪明39 分钟前
【图像轮廓特征查找】图像处理(OpenCV) -part8
图像处理·人工智能·opencv
liruiqiang0540 分钟前
神经网络优化 - 小批量梯度下降之批量大小的选择
人工智能·深度学习·神经网络·机器学习·梯度下降
AI大模型顾潇40 分钟前
[特殊字符] Prompt如何驱动大模型对本地文件实现自主变更:Cline技术深度解析
前端·人工智能·llm·微调·prompt·编程·ai大模型
Blossom.1181 小时前
量子计算与经典计算融合:开启计算新时代
人工智能·深度学习·opencv·物联网·生活·边缘计算·量子计算
AI技术学长1 小时前
深度学习-python猫狗识别tensorflow2.0
人工智能·深度学习·计算机视觉·图像识别·计算机技术·tensorflow2·猫狗识别