当前位置: 首页 > news >正文

LLM - 配置 ModelScope SWIFT 环境与 Qwen2-VL 模型推理 教程 (1)

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/142827217

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


SWIFT

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

文档: https://swift.readthedocs.io/zh-cn/latest/

1. 配置环境

构建 Conda 环境:

conda create -n swift python=3.10
conda activate swift
pip3 install torch torchvision torchaudio

验证 Torch 环境:

# python
import torch
print(torch.__version__)
print(torch.cuda.is_available())

使用源码,安装 swift 依赖包:

git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .[llm]pip install git+https://github.com/huggingface/transformers.git@21fac7abba2a37fae86106f87fcf9974fd1e3830
pip install pyav qwen_vl_utils

安装 LMDeploy 和 vLLM 依赖包:

# 需要依赖 torch<=2.3.1
pip install lmdeploy==0.6.1 -i http://mirrors.aliyun.com/pypi/simple/
# 需要依赖 torch==2.4.0
pip install vllm==0.6.2 -i http://mirrors.aliyun.com/pypi/simple/

注意:优先安装 lmdeploy,再安装 vllm,否则 vllm 无法使用,报错。

2. 准备模型

导出 ModelScope 模型位置的环境变量 MODELSCOPE_CACHE,即:

export MODELSCOPE_CACHE="[your path]/modelscope_models/"

注意:模型是存储在 MODELSCOPE_CACHEhub 文件夹中

目录结构:

[your path]/modelscope_models
├── [4.0K]  AI-ModelScope
│   └── [4.0K]  LaTeX_OCR
├── [4.0K]  hub
│   └── [  33]  qwen -> [your path]/llm/Qwen
├── [4.0K]  offload_cache

之前下载过 Qwen2-VL-7B-Instruct,直接使用 软链接 至 hub 目录,即可:

cd [your path]/modelscope_models/hub
ln -s [your path]/llm/Qwen qwen  # 构建软链接

注意:模型的类型 Qwen 需要小写 qwen

3. 命令行调用模型

直接使用 swift infer 即可调用。

CUDA_VISIBLE_DEVICES=0 swift infer --model_type qwen2-vl-7b-instruct

测试文本:

<<< 你是谁?
我是来自阿里云的大规模语言模型,我叫通义千问。

测试图像:

<<< <image><image>这两张图片有什么区别
Input an image path or URL <<< [your path]/llm/vision_test_data/image1.png
Input an image path or URL <<< [your path]/llm/vision_test_data/image2.png
这两张图片的区别在于场景和人物的姿势不同。第一张图片中,人物站在木梯旁边,脚踩在木梯上,脚上穿着一双米色的凉鞋,凉鞋上有花朵装饰。第二张图片中,人物坐在床上,脚上穿着白色的袜子,旁边有一个蓝色的哆啦A梦玩偶。

两张图像,如下:

Image

测试数学:

<<< <image>计算结果是多少
Input an image path or URL <<< [your path]/llm/vision_test_data/math.png

输入复杂的数学运算,即:

Image

输出 (非常厉害):

首先,我们逐步计算这个表达式:
1.计算除法部分:

  • 6 13 ÷ 9 26 = 6 13 × 26 9 = 6 × 26 13 × 9 = 2 × 26 13 × 3 = 52 39 = 4 3 \frac{6}{13} \div \frac{9}{26} = \frac{6}{13} \times \frac{26}{9} = \frac{6 \times 26}{13 \times 9} = \frac{2 \times 26}{13 \times 3} = \frac{52}{39} = \frac{4}{3} 136÷269=136×926=13×96×26=13×32×26=3952=34
  • 18 35 ÷ 0.6 × 2 3 = 18 35 ÷ 3 5 × 2 3 = 18 35 × 5 3 × 2 3 = 18 × 5 × 2 35 × 3 × 3 = 180 315 = 4 7 \frac{18}{35} \div 0.6 \times \frac{2}{3} = \frac{18}{35} \div \frac{3}{5} \times \frac{2}{3} = \frac{18}{35} \times \frac{5}{3} \times \frac{2}{3} = \frac{18 \times 5 \times 2}{35 \times 3 \times 3} = \frac{180}{315} = \frac{4}{7} 3518÷0.6×32=3518÷53×32=3518×35×32=35×3×318×5×2=315180=74

2.现在,我们将这些结果代入原始表达式:

  • 2 − 4 3 − 2 3 + 4 7 2 - \frac{4}{3} - \frac{2}{3} + \frac{4}{7} 23432+74

3.将分数转换为相同的分母,以便进行加减运算:

  • 2 − 4 3 − 2 3 + 4 7 = 14 7 − 4 3 − 2 3 + 4 7 2 - \frac{4}{3} - \frac{2}{3} + \frac{4}{7} = \frac{14}{7} - \frac{4}{3} - \frac{2}{3} + \frac{4}{7} 23432+74=7143432+74

4.将分数相加:

  • 14 7 + 4 7 = 18 7 \frac{14}{7} + \frac{4}{7} = \frac{18}{7} 714+74=718
  • − 4 3 − 2 3 = − 6 3 = − 2 -\frac{4}{3} - \frac{2}{3} = -\frac{6}{3} = -2 3432=36=2

5.将结果相减: 18 7 − 2 = 18 7 − 14 7 = 4 7 \frac{18}{7} - 2 = \frac{18}{7} - \frac{14}{7} = \frac{4}{7} 7182=718714=74
所以,计算结果是 4 7 \frac{4}{7} 74

测试OCR:

<<< <image>OCR识别图像文字
Input an image path or URL <<< [your path]/llm/vision_test_data/ocr.png
Top Tips For
Pole Dancing In Heels

测试图像:

Image
测试视频:

<<< <video>描述视频内容
Input a video path or URL <<< [your path]/llm/vision_test_data/video4.mp4
[INFO:swift] Using environment variable `NFRAMES`, Setting nframes: 50.
视频中展示了一位穿着白色裤子和拖鞋的人,她正在用拖鞋摩擦地面,然后将拖鞋放在地上,接着她用拖鞋摩擦地面,最后她将拖鞋放在地上。

注意:避免显存溢出,只使用 50 帧,export NFRAMES=50

视频:

Image

4. 源码调用模型

调用源码:

python my_test.py

参考 my_test.py 源码:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'from swift.llm import (get_model_tokenizer, get_template, inference, ModelType,get_default_template_type, inference_stream
)
from swift.utils import seed_everything
import torch
print(f"[Info] torch: {torch.__version__}")model_type = ModelType.qwen2_vl_7b_instruct
template_type = get_default_template_type(model_type)
print(f'template_type: {template_type}')model, tokenizer = get_model_tokenizer(model_type, torch.bfloat16,model_kwargs={'device_map': 'auto', },
)
model.generation_config.max_new_tokens = 256
template = get_template(template_type, tokenizer)
seed_everything(42)query = """<img>[your path]/llm/vision_test_data/image2.png</img>女孩的袜子是什么颜色?"""
response, history = inference(model, template, query)
print(f'query: {query}')
print(f'response: {response}')# 流式
query = '女孩在做什么事情?'
gen = inference_stream(model, template, query, history)
print_idx = 0
print(f'query: {query}\nresponse: ', end='')
for response, history in gen:delta = response[print_idx:]print(delta, end='', flush=True)print_idx = len(response)
print()
print(f'history: {history}')

输出:

query: <img>[your path]/llm/vision_test_data/image2.png</img>女孩的袜子是什么颜色?
response: 女孩的袜子是白色的。
query: 女孩在做什么事情?
response: 女孩正在弹奏一把电吉他。
history: [['<img>/nfs_beijing_ai/chenlong[your path]/llm/vision_test_data/image2.png</img>女孩的袜子是什么颜色?', '女孩的袜子是白色的。'], ['女孩在做什么事情?', '女孩正在弹奏一把电吉他。']]

视频:

Image

视频处理工具:视频下载、视频帧


http://www.mrgr.cn/news/47384.html

相关文章:

  • CDP中的Hive3之Apache Hive3特性
  • Win10微调大语言模型ChatGLM2-6B
  • 每日一题:链表中环的入口结点
  • Kafka 会丢消息吗?
  • Linux第一课:c语言 学习记录day06
  • /src/utils/request.ts:axios 请求封装,适用于需要统一处理请求和响应的场景
  • Shell编程-什么是shell
  • 【含文档】基于Springboot+Android的校园论坛系统(含源码+数据库+lw)
  • 10.10 QT服务器与客户端
  • jfif怎么转换成jpg格式?值得推荐的几种图片格式转换方法
  • 7-基于国产化FT-M6678+JFM7K325T的6U CPCI信号处理卡
  • Buffer模块
  • 在Vue3中如何实现四种全局状态数据的统一管理?
  • 终于爆单了!做跨境亏久了才知道的选品经验!
  • 从 Reno TCP 到 Scalable TCP,HighSpeed TCP
  • 大数据新视界 --大数据大厂之大数据如何重塑金融风险管理:精准预测与防控
  • pdf合并成一个文件,揭秘四款好用软件!
  • 写一个代码:打印100~200之间的素数
  • SWAP分区
  • Hyper-V管理器连接到服务器出错。请检查虚拟机管理服务是否正在运行以及是否授权你连接到此服务器。
  • 【洛谷】P10499 开关问题 的题解
  • 简简单单的质数(复习)
  • 多功能点击器(文末附Gitee源码)——光遇自动弹奏
  • 【项目实战】g-sensor输出的gyro数据值没有变化
  • PyCharm 项目解释器切换指南:如何在项目中更换 Python Interpreter
  • C语言小测复习