基于MS-Swift框架的Qwen2.5-VL大模型部署、推理教程

基于MS-Swift框架的Qwen2.5-VL大模型推理、部署全流程文档

一、MS-Swift框架简介

ms-swift是魔搭社区提供的大模型与多模态大模型微调部署框架,现已支持450+大模型与150+多模态大模型的训练(预训练、微调、人类对齐)、推理、评测、量化与部署,其中包括:Qwen、Qwen-VL、InternLM、GLM、Llama、MiniCPM-V和DeepSeek-R1等热门开源模型。此外,ms-swift还汇集了最新的训练技术,包括LoRA、QLoRA、Llama-Pro、LongLoRA、LoRA+等轻量化训练技术,以及DPO、GRPO、RM、PPO、KTO等人类对齐训练方法,并支持CPU,NvidiaGPU、AscendNPU和MPS等硬件设备,提供了分布式训练、量化训练、RLHF训练和多模态训练等多种大模型训练方式,极大地简化了大模型的训练微调步骤,降低了大模型训练的门槛。

二、环境准备

创建conda虚拟环境(本教程为ms-swift)

conda create -n ms-swift python=3.9 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

进入conda虚拟环境

conda activate ms-swift

安装ms-swift

pip install ms-swift -U

在ms-swift虚拟环境中安装modelscope包、decord包

pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install qwen-vl-utils[decord]==0.0.8

三、模型准备

在ms-swift项目根路径下,新建models文件夹

mkdir models

以Qwen2.5-VL为例,在ms-swift项目根路径下,编写模型下载脚本download_model.py

from modelscope import snapshot_download
model_id = 'Qwen/Qwen2.5-VL-3B-Instruct'
# 模型ID
local_root_dir = './models/' 
model_path = snapshot_download(model_id=model_id, local_dir=local_root_dir+model_id)
print(f"模型权重下载完成,权重存放路径为{model_path}")

在当前路径下,执行以下指令,下载模型

python download_model.py

下载完成后,模型存放在./models/Qwen/Qwen2.5-VL-3B-Instruct/

四、模型推理

本节教程以WebUI界面推理为例

在项目根路径下编写infer_webui.sh

CUDA_VISIBLE_DEVICES=0 \
MAX_PIXELS=1003520 \
VIDEO_MAX_PIXELS=50176 \
FPS_MAX_FRAMES=12 \
swift app \
 --model ./models/Qwen/Qwen2.5-VL-3B-Instruct \
 --infer_backend pt \
 --temperature 0 \
 --max_new_tokens 4096 \
 --studio_title "Qwen2.5-VL-3B" \
 --stream true

执行infer_webui.sh

bash infer_webio.sh

img

推理测试成功!

五、模型部署与调用

本节教程以OpenAI库调用部署的模型为例

1.模型部署

在ms-swift项目根路径下,ms-swift的conda虚拟环境中,执行以下指令

CUDA_VISIBLE_DEVICES=0 \
MAX_PIXELS=1003520 \
VIDEO_MAX_PIXELS=50176 \
FPS_MAX_FRAMES=12 \
swift deploy \
  --model ./models/Qwen/Qwen2.5-VL-3B-Instruct/ \
  --infer_backend vllm \
  --gpu_memory_utilization 0.9 \
  --max_model_len 8192 \
  --max_new_tokens 2048 \
  --limit_mm_per_prompt '{"image": 5, "video": 2}' \
  --served_model_name Qwen2.5-VL-3B-Instruct \
  --port 8000

2.模型调用

在项目根目录下新建一个Python脚本,如client_openai.py,通过OpenAI库来调用部署的Qwen2.5-VL大模型API服务,脚本中写入以下示例代码:

from openai import OpenAI

client = OpenAI(
    api_key='retoo',
    base_url='http://127.0.0.1:8000/v1',
)
model_type = client.models.list().data[0].id
print(f'model_type: {model_type}')

# 构建包含图像和文本的消息
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "image": "http://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/animal.png"
            },
            {
                "type": "text",
                "text": "对图片的中的物体进行数据集标注,答复内容为 类别名 矩形框左上角(x1, y1)位置 矩形框右下角(x2, y2)位置"
            }
        ]
    }
]

resp = client.chat.completions.create(
    model=model_type,
    messages=messages,
    max_tokens=256,
    temperature=0,
    seed=42
)
response = resp.choices[0].message.content
print(f'query: {messages[0]["content"]}')
print(f'response: {response}')

# 流式输出(这里假设流式输出也可以使用类似的多模态消息)
# 由于流式输出时,这里简单添加一条新的文本消息
new_text_query = "再解释一下标注的含义"
messages.append({'role': 'assistant', 'content': response})
messages.append({'role': 'user', 'content': [{"type": "text", "text": new_text_query}]})

stream_resp = client.chat.completions.create(
    model=model_type,
    messages=messages,
    stream=True,
    max_tokens=256,
    temperature=0,
    seed=42
)

print(f'query: {new_text_query}')
print('response: ', end='')
for chunk in stream_resp:
    print(chunk.choices[0].delta.content, end='', flush=True)
print()

img

模型调用成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值