240831-Qwen2-VL-7B/2B部署测试

news2024/9/20 8:43:11

A. 运行效果

在这里插入图片描述

B. 配置部署

  • 如果可以执行下面就执行下面:
pip install git+https://github.com/huggingface/transformers accelerate
  • 否则分开执行
git clone https://github.com/huggingface/transformers
cd transformers
pip install . accelerate
  • 随后,执行
pip install qwen-vl-utils
pip install torchvision

C. 模型测试

C.1 测试代码与注意事项
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'  # 使用GPU 0 
# ⚠️ 注意事项1: 如果是混合显卡,且中有一块不支持Flash2-Attention,则需要在代码最开始的地方指定可用显卡

from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info

# default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
    # "/home/lgk/Downloads/Qwen2-VL-2B-Instruct", torch_dtype="auto", device_map = "auto"
    "/home/lgk/Downloads/Qwen2-VL-2B-Instruct", torch_dtype="auto", device_map = "balanced_low_0"
)
# ⚠️ 注意事项2: 模型与输入需要选择与开头对应的设备,tokenizer没有要求,这里需要更改device_map = "balanced_low_0"

# We recommend enabling flash_attention_2 for better acceleration and memory saving, especially in multi-image and video scenarios.
# model = Qwen2VLForConditionalGeneration.from_pretrained(
#     "/home/lgk/Downloads/Qwen2-VL-2B-Instruct",
#     torch_dtype=torch.bfloat16,
#     attn_implementation="flash_attention_2",
#     device_map="auto",
# )

# default processer
processor = AutoProcessor.from_pretrained("/home/lgk/Downloads/Qwen2-VL-2B-Instruct")

# The default range for the number of visual tokens per image in the model is 4-16384.
# You can set min_pixels and max_pixels according to your needs, such as a token range of 256-1280, to balance performance and cost.
# min_pixels = 256*28*28
# max_pixels = 1280*28*28
# processor = AutoProcessor.from_pretrained("/home/lgk/Downloads/Qwen2-VL-2B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",
            },
            {"type": "text", "text": "Describe this image."},
        ],
    }
]

# Preparation for inference
text = processor.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True
)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(
    text=[text],
    images=image_inputs,
    videos=video_inputs,
    padding=True,
    return_tensors="pt",
)
inputs = inputs.to("cuda")

# Inference: Generation of the output
generated_ids = model.generate(**inputs, max_new_tokens=128)
generated_ids_trimmed = [
    out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
C.2 测试
  • mode=1
(qwen2-vl) (base) lgk@WIN-20240401VAM:~/Projects/transformers$ python -u "/home/lgk/Projects/transformers/test.py"
Loading checkpoint shards: 100%|███████████████████████████████████████████████████████| 2/2 [00:03<00:00,  1.58s/it]
['The image depicts a serene beach scene with a woman and her dog. The woman is sitting on the sand, wearing a plaid shirt and black pants, and appears to be smiling. She is holding up her hand in a high-five gesture towards the dog, which is also sitting on the sand. The dog has a harness on, and its front paws are raised in a playful manner. The background shows the ocean with gentle waves, and the sky is clear with a soft glow from the setting or rising sun, casting a warm light over the entire scene. The overall atmosphere is peaceful and joyful.']
  • mode=2
(qwen2-vl) (base) lgk@WIN-20240401VAM:~/Projects/transformers$ python test.py 
You are attempting to use Flash Attention 2.0 without specifying a torch dtype. This might lead to unexpected behaviour
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:08<00:00,  4.03s/it]
['The image depicts a serene beach scene with a woman and her dog. The woman is sitting on the sand, wearing a plaid shirt and black pants, and appears to be smiling. She is holding up her hand in a high-five gesture towards the dog, which is also sitting on the sand. The dog has a harness on, and its front paws are raised in a playful manner. The background shows the ocean with gentle waves, and the sky is clear with a soft glow from the setting or rising sun, casting a warm light over the entire scene. The overall atmosphere is peaceful and joyful, capturing a moment of connection between the']

D. 问题分析

D.1 Flash-Attention版本选择

flash_attn-2.3.5+cu117torch2.0cxx11abiFALSE-cp310-cp310-linux_x86_64.whl与flash_attn-2.3.5+cu117torch2.0cxx11abiTrue-cp310-cp310-linux_x86_64.whl两个版本有什么区别?

这两个版本的 flash_attn 包的区别在于它们的编译选项,特别是关于 cxx11 ABI(Application Binary Interface)的设置,这影响到包的二进制兼容性。具体来说:

  1. cxx11abiFALSE

    • 编译时未启用 C++11 ABI(应用程序二进制接口)的选项。
    • 使用了旧的 ABI(即 cxx03 ABI),通常用于与旧版本的系统或编译器(例如 GCC 4.x 系列)兼容。
    • 对于那些需要与旧版本的 C++ 库兼容的系统或环境,这是合适的选择。
  2. cxx11abiTrue

    • 编译时启用了 C++11 ABI 选项。
    • 使用了新的 C++11 ABI,这通常是在较新的系统上运行的默认选择,兼容性较好,性能也有一定的提升。
    • 适用于较新的编译器(如 GCC 5 及以上)以及那些完全支持 C++11 标准的系统环境。
主要区别:
  • 二进制兼容性:启用 C++11 ABI 的版本(cxx11abiTrue)通常更现代化并且与新编译器及标准库更兼容。而未启用 C++11 ABI 的版本(cxx11abiFALSE)则是为了兼容旧的二进制接口。
  • 性能和特性:使用 cxx11abiTrue 可能会带来性能上的微小提升,因为它使用了较新的 ABI 优化。
选择哪个版本:
  • 如果你的环境中所有相关的 C++ 库和编译器都是较新的版本(支持 C++11 及以上),那么使用 cxx11abiTrue 版本是更合适的选择。
  • 如果你需要兼容老版本的系统或编译器,或者有其他旧的库依赖未启用 C++11 ABI,那么选择 cxx11abiFALSE

总之,选择时要考虑你系统的编译器版本、与其他库的兼容性以及性能需求。

D.2 如何判断

要判断你的环境中的所有相关 C++ 库和编译器是否支持 C++11 及以上版本,可以按照以下步骤进行检查:

1. 检查编译器版本

对于大多数系统,常用的 C++ 编译器是 GCC 或 Clang。以下是检查编译器版本的方法:

  • GCC (GNU Compiler Collection):

    gcc --version
    

    如果版本是 5.1 或更高,则默认支持 C++11 ABI。

  • Clang:

    clang --version
    

    Clang 3.3 及以上版本支持 C++11,但 Clang 3.5 及以上版本默认启用 C++11 ABI。

2. 检查编译器的默认 ABI 设置

检查你的编译器是否默认启用了 C++11 ABI,可以通过编译一个简单的测试程序并查看 ABI 信息:

  • 编译测试程序:

    创建一个简单的 C++ 文件(如 abi_check.cpp):

    #include <iostream>
    
    int main() {
        std::cout << "__GLIBCXX_USE_CXX11_ABI = " << __GLIBCXX_USE_CXX11_ABI << std::endl;
        return 0;
    }
    
  • 编译并运行:

    g++ abi_check.cpp -o abi_check
    ./abi_check
    

    输出结果 __GLIBCXX_USE_CXX11_ABI = 1 表示启用了 C++11 ABI,而 0 表示未启用。

3. 检查系统中已安装的 C++ 库

有些 C++ 库可能也需要支持 C++11 ABI。检查已安装的库是否与 C++11 ABI 兼容:

  • 查看已安装库的版本:可以使用包管理器(如 apt, yum, dnf 等)查看安装的 C++ 库的版本。

    例如,查看 libstdc++ 版本:

    apt list --installed | grep libstdc++
    
  • 查看符号信息:对于已安装的库,使用 nmobjdump 查看符号信息,确保符号表中的符号与 C++11 ABI 兼容。

4. 检查构建工具链配置

如果你的项目使用 CMake、Makefile 或其他构建系统:

  • CMake: 确保 CMAKE_CXX_STANDARD 设置为 11 或更高:

    set(CMAKE_CXX_STANDARD 11)
    
  • Makefile: 在编译选项中加入 -std=c++11 或更高的标准:

    CXXFLAGS = -std=c++11
    
总结

通过以上步骤,你可以确认你的编译器、库和构建工具链是否默认支持并启用了 C++11 及以上的 ABI。如果所有检查结果都表明支持 C++11,那么你可以安全地使用 cxx11abiTrue 版本的包。

E. 参考文献

  • 但是CUDA_VISIBLE_DEVICES只能在代码最开始的时候设置,中间改是没用的。
  • 【⚠️ 大模型运行漫长的开始】 关于多GPU使用 device_map_device map-CSDN博客
  • from_pretrained加载本地模型文件 - 知乎
  • ⚠️ flash-attn安装报错 - 知乎
  • ⚠️ 微调Qwen2-VL 最佳实践 — swift 2.4.0.dev0 文档
  • vllm-project/vllm: A high-throughput and memory-efficient inference and serving engine for LLMs
  • QwenLM/Qwen2-VL: Qwen2-VL is the multimodal large language model series developed by Qwen team, Alibaba Cloud.
  • Dao-AILab/flash-attention: Fast and memory-efficient exact attention
  • ⚠️ 下载编译好的Flash-attention, True/False版本可以测试下
  • ValueError: Flash Attention 2.0 only supports torch.float16 and torch.bfloat16 dtypes. You passed torch.float32, this might lead to unexpected behaviour. · Issue #28052 · huggingface/transformers
    在这里插入图片描述
pip install flash_attn-2.6.3+cu123torch2.4cxx11abiFALSE-cp310-cp310-linux_x86_64.whl --no-build-isolation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092942.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8.27FLEX,BISON

RC ParseStage::handle_request(SQLStageEvent *sql_event) 这个意思是返回类型是RC&#xff0c;然后用到的函数来自 ParseStage&#xff0c;&#xff1a;&#xff1a;就是用来标识作用域的&#xff0c;函数名是handle_request&#xff0c;是ParseStage里的函数 FLEX BISON

vue.js项目实战案例详细源码讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 为帮助大家更好地掌握Vue.js项目的开发流程&#xff0c;我将为你讲解一个完整的Vue.js实战案例&#xff0c;并提供详细的源码解析。这个案例将涵盖从项目创建到实现各种功能模块的全过程&#xff0c;适合用于…

组织培训如何分组?

在组织培训活动时&#xff0c;合理分组是提高效率和参与度的关键。云分组小程序提供了一个简单而有效的解决方案&#xff0c;帮助组织者快速、公平地将参与者分配到不同的小组中。以下是使用云分组小程序进行培训分组的详细步骤&#xff1a;一、创建分组 1. 打开云分组小程序。…

入坑大模型18个月的反思与贩私

前几天开完一个有高层参加的会议&#xff0c;会后组里的技术大佬直接就开喷“要规划没规划&#xff0c;整天只知道对着几个糊弄老板的榜使劲刷”。我下意识地赶紧去拉住他&#xff0c;低声对他讲“你声音太小了&#xff0c;老板听不到的&#xff0c;回头我领你去大厦的保安室&a…

Docker容器技术(下)超多好上手的实验,保姆级教程

文章目录 Docker数据卷管理及优化为什么要使用数据卷bind mount数据卷docker managed数据卷Data Volume Container&#xff08;数据卷容器&#xff09;bind mount数据卷 VS docker managed数据卷备份与迁移数据卷 Docker的安全优化Docker的资源限制限制CPU的使用限制CPU的使用量…

RAG重磅升级:DSF带来特定领域精准提升的全新方案!

检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;是一种结合了检索&#xff08;Retrieval&#xff09;和生成&#xff08;Generation&#xff09;能力的框架&#xff0c;通过从背景数据中检索相关信息来增强模型的生成输出。在当前的大型语言模型&…

Linux 安装mysql 数据库通用教程(rpm傻瓜安装)

通用教程&#xff1a;Centos7.9安装mysql8.0.39&#xff08;使用rpm 安装&#xff09; 目录 前言 下载镜像源 删除或查看旧版本 安装mysql 启动mysql mysql授权远程登录 前言 在本篇博客中&#xff0c;我将向您展示如何在CentOS 7.9系统上通过RPM包安装特定版本的MySQL…

神经网络搭建实战与Sequential的使用

一、需要处理的图像 二、对上述图片用代码表示&#xff1a; import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass SUN(nn.Module):def __init__(self):super(SUN, self).__init__()self.conv1 Conv2d(3, 32, 5, padding2)self…

解决移动端使用Vant van-overlay 遮罩层导致的弹窗不可滚动问题

项目场景 在游戏门户网站需要根据弹出层列举出自己背包的饰品&#xff0c;然后进行选择置换。 问题描述 例如&#xff1a;在PC端的时候能物品过多的时候能正常左右滚动&#xff0c;而且启用Google的开发者工具进行查看的时候也是能正常滚动&#xff0c;但是在手机端访问的时候…

持续集成与持续部署(CI/CD)的深入探讨

在现代软件开发中&#xff0c;持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;已成为不可或缺的实践。这些方法旨在加快软件交付的速度&#xff0c;同时提高软件的质量和稳定性。通过CI/CD&#xff0c;开发团队可以频繁地将代码更改集成到主分支&…

Mate 60、Mate X5和Pocket 2新增AI修图功能:AI消除能力效果惊艳

你有没有试过拍照的时候不小心把路人拍进来&#xff0c;或者拍风景的时候有煞风景的事物闯入镜头中&#xff1f;有些美好的画面稍纵即逝、有些景点不复存在&#xff0c;看着略带瑕疵的照片&#xff0c;多少会感觉有点遗憾。 最近Mate 60、Mate X5和Pocket 2三款机型都进行了鸿…

Python sys.path与-m参数的作用

文章目录 Python sys.path与-m参数的作用sys.path作用验证结论 Python sys.path与-m参数的作用 sys.path作用 sys.path‌当试图导入一个模块时&#xff0c;Python解释器会按照sys.path中列出的路径顺序搜索对应的模块文件。 sys.path的组成包括当前目录&#xff08;即包含你…

二叉树相关练习

二叉树相关oj题&#xff1a; 对称二叉树 解题思路&#xff1a;判断一棵树是否轴对称&#xff0c;先判断左右子树结构是否相同&#xff0c;结构相同的情况下再判断对应的val是否轴对称&#xff0c;判断根节点的左右子树&#xff0c;再判断根节点的左右子树的左右子树是否轴对称…

《潮骚》爱恋的心如海潮般骚动,又如大海般广袤平静

《潮骚》爱恋的心如海潮般骚动&#xff0c;又如大海般广袤平静 三岛由纪夫&#xff08;1925-1970&#xff09;,日本当代小说家、剧作家、记者、电影制作人和电影演员&#xff0c;右翼分子。主要作品有《金阁寺》《潮骚》《丰饶之海》等。曾3次获诺贝尔文学奖提名&#xff0c;属…

类图的关联关系

类图关联关系分为单向关联关系&#xff0c;双向关联关系&#xff0c;自关联关系 单向关联关系 是一个类的属性或方法被另外一个类引用&#xff0c;二者之间用一个箭头表示 比如顾客类和地址类&#xff0c;每个顾客都有一个地址 单向关联关系在UML图中两个类之间用单向箭头表…

AI绘图提示词/咒语/词缀/关键词使用指南(Stable Diffusion Prompt 最强提示词手册)

一、为什么学习AI绘画关键词 在人工智能技术飞速发展的今天&#xff0c;AI绘画已成为艺术领域的一大热点。学习AI绘画关键词&#xff0c;不仅有助于我们掌握这一新兴技术&#xff0c;还能拓宽我们的创作思路&#xff0c;实现艺术与技术的完美融合。以下是学习AI绘画关键词的几…

基于python的人力资源管理系统/基于django的OA系统的设计与实现

摘 要 随着当今社会的发展&#xff0c;时代的进步&#xff0c;各行各业也在发生着变化&#xff0c;比如人力资源管理这一方面&#xff0c;利用网络已经逐步进入人们的生活。传统的人力资源管理&#xff0c;都是员工去公司查看部门信息、招聘信息&#xff0c;这种传统方式局限性…

C++入门基础知识44——【关于C++ 判断】

成长路上不孤单&#x1f60a;【14后&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;如有需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#xff01;&#xff01;&#xff01;&#xff01;&#xff…

【MYSQL】5 性能优化

1步骤 2查看系统性能参数 在MySQL中&#xff0c;可以使用 SHOW STATUS 语句查询一些MySQL数据库服务器的 性能参数 、 执行频率 。 SHOW STATUS语句语法如下&#xff1a; SHOW [GLOBAL|SESSION] STATUS LIKE ‘参数’; 一些常用的性能参数如下&#xff1a; • Connections&…

认识人工智能(AI,Artificial Intelligence)

人工智能(AI, Artificial Intelligence)是当今科技领域最引人注目的前沿技术之一。它的影响已渗透到各行各业,从日常生活中的虚拟助手到复杂的工业自动化系统,AI 的应用无处不在。本文将详细探讨人工智能的定义与发展历程、学习人工智能的目的、人工智能在实际生活中的应用…