【多模态】swift-3框架使用

swift-3框架使用

前言

接前面,swift3相比于swift2做了大升级,很多swift2能使用的在3里面error改改改...但是效率确实大升级,推理速度快了很多~~~

swift3安装

安装也是一波三折,和swift2一样需要注意安装顺序,不然可能得删了重装。

python 复制代码
# 首先安装conda python3.10
conda create -n swift3 python==3.10

# 然后安装torch和torchvision
pip install torch torchvision

# 安装flash-attn,如果安装失败像前一篇一样安装
pip install flash-attn

# 安装timm
pip install auto_gptq optimum bitsandbytes timm

# 下载仓库安装swift3,网络不好上github官网下载解压
git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .

# 如果有需要,安装vllm 
pip install vllm
  • 这里需要注意的是,上面pip install -e .安装的方式,ms-swift这个文件夹需要一直存好,删了这个文件夹就需要重新安装swift

swift训练

!!!注意,训练数据格式可以和swift2一样不需要改

bash 复制代码
#jsonl格式的数据
{"query": "<image>55555", "response": "66666", "images": ["image_path"]}
{"query": "eeeee<image>eeeee<image>eeeee", "response": "fffff", "history": [], "images": ["image_path1", "image_path2"]}
{"query": "EEEEE", "response": "FFFFF", "history": [["query1", "response2"], ["query2", "response2"]], "images": []}

但是训练的脚本需要改一下,很多参数swift3和swift2不一样,swift2的不同版本可能也不一样,如果还报错需要去官方git的swift的sft源代码下面去确认【主要是swift2里面的model_id_or_path在3里面就叫model了,flashattention这里参数名字也改了】

bash 复制代码
NPROC_PER_NODE=1 CUDA_VISIBLE_DEVICES=0 MAX_PIXELS=602112 swift sft \
--model_type qwen2-vl-7b-instruct \
--model /data/coding/llm_model/Qwen/Qwen2-VL-7B-Instruct \
--dataset /data/coding/qwen2_vl_mix_train_1214.jsonl \
--train_type lora \
--attn_impl flash_attn \
--per_device_train_batch_size 1 \
--output_dir internvl_lora \
--max_steps 3000 \
--save_total_limit 2 \
--logging_steps 10 \
--gradient_checkpointing false

swift cli推理

!!!注意,swift3可以使用2里面的数据格式,但是response不能为空,随便填一个字符串到response就行,response为空会报错

bash 复制代码
#jsonl格式的数据
{"query": "<image>55555", "response": "66666", "images": ["image_path"]}
{"query": "eeeee<image>eeeee<image>eeeee", "response": "fffff", "history": [], "images": ["image_path1", "image_path2"]}
{"query": "EEEEE", "response": "FFFFF", "history": [["query1", "response2"], ["query2", "response2"]], "images": []}

使用swift3推理时选用vllm和flash-attn快很多,A100-80的卡上,纯文本推理,没用的情况下是一个半小时,用了是10分钟,真香~

  • 注意,如果图片数量超过1,需要设置limit_mm_per_prompt,控制vllm使用多图, 默认为None. 例如传入--limit_mm_per_prompt '{"image": 10, "video": 5}'表示最多10张图,5个视频,否则报错
bash 复制代码
CUDA_VISIBLE_DEVICES=0 MAX_PIXELS=602112 swift infer \
--ckpt_dir /data/coding/checkpoint-3000-merged \
--attn_impl flash_attn \
--max_new_tokens 300 \
--temperature 0 \
--val_dataset /data/coding/content_test.jsonl \
--result_path output_3000.jsonl \
--max_batch_size 5 \
--infer_backend vllm

如果需要使用新的数据格式,swift3推荐的是这样的:

bash 复制代码
{"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "<image>图片中是什么,<video>视频中是什么"}, {"role": "assistant", "content": "一个大象,一个狮子"}], "images": ["/xxx/x.jpg"], "videos": ["/xxx/x.mp4"]}

swift vllm python推理

注意数据的格式,python推理时需要包成下面类似的格式

bash 复制代码
{"messages": [{"role": "system", "content": "<system>"}, {"role": "user", "content": "<query1>"}, {"role": "assistant", "content": "<response1>"}, {"role": "user", "content": "<query2>"}, {"role": "assistant", "content": "<response2>"}]}
python 复制代码
import os
from swift.llm import InferEngine, InferRequest, PtEngine, RequestConfig, load_dataset
from swift.plugin import InferStats

os.environ['CUDA_VISIBLE_DEVICES'] = '0'
os.environ['MAX_PIXELS']='602112'  # 设置最大图片大小,防止爆显存

from swift.llm import VllmEngine
model_name='模型的本地地址'
engine=VllmEngine(model_name,model_type='模型的type',gpu_memory_utilization=0.9)

test_img_path = '本地图片.jpg'

message = [{
            'role': 'user',
            'content': [
                {
                    "type": "image",
                    "image": test_img_path
                },
                {"type": "text", "text": "What can you see in the image?"},
            ]
}]
data = dict()
data['messages'] = message

request_config = RequestConfig(max_tokens=512, temperature=0)
metric = InferStats()
infer_requests = [InferRequest(**data)]

resp_list = engine.infer(infer_requests, request_config)
query0 = infer_requests[0].messages[0]['content']
response = resp_list[0].choices[0].message.content
print(response)
相关推荐
【建模先锋】13 分钟前
精品数据分享 | 锂电池数据集(10)基于阻抗的锂离子电池在不均衡使用情况下的性能预测
人工智能·python·深度学习·锂电池·锂电池寿命预测·锂电池数据集·剩余寿命预测
Trouvaille ~15 分钟前
零基础入门 LangChain 与 LangGraph(五):核心组件上篇——消息、提示词模板、少样本与输出解析
人工智能·算法·langchain·prompt·输入输出·ai应用·langgraph
吃一根烤肠25 分钟前
2026年4月AI大事件深度解读:大模型竞争进入“深水区“
人工智能
小陈工35 分钟前
数据库Operator开发实战:以PostgreSQL为例
开发语言·数据库·人工智能·python·安全·postgresql·开源
热爱生活的五柒36 分钟前
度量学习-Radar Signal Deinterleaving Using Transformer Encoder and HDBSCAN 论文解析
深度学习·学习·transformer
慕涯AI37 分钟前
Agent 30 课程开发指南 - 第21课
人工智能·python
源码之家43 分钟前
计算机毕业设计:Python城市天气数据挖掘与预测系统 Flask框架 随机森林 K-Means 可视化 数据分析 大数据 机器学习 深度学习(建议收藏)✅
人工智能·爬虫·python·深度学习·机器学习·数据挖掘·课程设计
数智化管理手记1 小时前
零基础认知精益生产——核心本质与必避误区
大数据·数据库·人工智能·低代码·制造
用户5191495848451 小时前
Kubernetes kubeadm 集群部署与 CKA 实战指南
人工智能·aigc
幻风_huanfeng1 小时前
人工智能之数学基础:坐标下降法
人工智能·深度学习·计算机视觉·梯度下降法·坐标下降法