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

ops/2024/12/23 7:34:21/

swift-3框架使用

前言

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

swift3_5">swift3安装

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

# 首先安装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_30">swift训练

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

#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这里参数名字也改了】

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_57">swift cli推理

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

#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分钟,真香~

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推荐的是这样的:

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

swift_vllm_python_87">swift vllm python推理

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

{"messages": [{"role": "system", "content": "<system>"}, {"role": "user", "content": "<query1>"}, {"role": "assistant", "content": "<response1>"}, {"role": "user", "content": "<query2>"}, {"role": "assistant", "content": "<response2>"}]}
import os
from swift.llm import InferEngine, InferRequest, PtEngine, RequestConfig, load_dataset
from swift.plugin import InferStatsos.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'] = messagerequest_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)

http://www.ppmy.cn/ops/144251.html

相关文章

2024年华为OD机试真题-字符串变换最小字符串-C++-OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,持续跟新。 题目描述࿱

【自用】通信内网部署rzgxxt项目_01,后端pipeDemo部署(使用nssm.exe仿照nohup)

做完这些工作之后&#xff0c;不要忘记打开 Windows Server 的防火墙端口&#xff0c;8181、8081、8080、22、443、1521 做完这些工作之后&#xff0c;不要忘记打开 Windows Server 的防火墙端口&#xff0c;8181、8081、8080、22、443、1521 做完这些工作之后&#xff0c;不要…

sql server msdb数据库备份恢复

备份 BACKUP DATABASE [msdb] TO DISK ND:\liyuanshuai\test\sqlserver_bakfile\msdb20241219.bak WITH NOFORMAT, NOINIT, NAME Nlys-完整 数据库 备份, SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS 10 GO然后删除2个测试的job&#xff0c;停止 SQL Server 代理…

浏览器可以直接请求 websocket

一、原生支持 浏览器原生支持 WebSocket 协议&#xff0c;这使得开发者可以直接在 JavaScript 代码中使用 WebSocket 来建立与服务器的双向通信通道。 const socket new WebSocket("ws://localhost:8080");socket.addEventListener("open", function (e…

豆包MarsCode:小T的密码变换规则

问题描述 思路分析 1. 输入输出 输入&#xff1a;一个字符串 s&#xff0c;其中可能包含字母、数字和其他符号。输出&#xff1a;一个字符串&#xff0c;代表输入字符串按规定转换后的数字密码。 2. 转换规则分析 根据题目描述&#xff0c;密码转换的规则如下&#xff1a; …

Visual studio中C/C++连接mysql

我使用的是Visual studio 2019连接的数据库&#xff0c;其他版本的VS操作应该类似 1.选择X64 因为我们使用的MySQL 提供的连接库&#xff08;如 libmysql.dll 或 MySQL Connector&#xff09;都是64位的&#xff0c;所以不能选择X86版本 2.找到本地安装MySQL的目录 MySQL默认…

AJAX与Axios

什么是 AJAX ? AJAX 是异步的 JavaScript 和 XML&#xff08;Asynchronous JavaScript And XML&#xff09;。 简单理解AJAX&#xff1a;是一种客户端与服务器进行网络通信技术&#xff0c;AJAX通常使用XMLHttpRequest 对象来发送请求和接收响应 现代开发中我们通常使用 JS…

使用Node.js搭配express框架快速构建后端业务接口模块Demo

使用Node.js搭配express框架快速构建后端业务接口模块Demo&#xff01;实际开发中&#xff0c;有很多项目&#xff0c;其实都是可以使用node.js来完成对接mysql数据库的&#xff0c;express确实使用起来非常简单&#xff0c;入手快&#xff0c;效率非常高。下面是一个简单的案例…