利用多GPU,推理transformer模型,避免显存溢出

在一些模型参数量比较大的llm和多模态网络中,比如

  • llama系列70B
  • MOE系列
  • VL系列(QWenVL, GLM4V)

等,在推理的时候,对显存要求比较大,不是H800这种巨无霸显存很难跑起来。

像llama系列和MOE系列还好,可以借助deepseed等加速框架对齐进行TP切分,从而达到多卡切分参数的效果,但是像VL系列,TP等策略就不太好使了。

transformers框架提供了多设备load模型的方式,通过设置device_map,让模型均匀的分布在多卡,从而以类模型并行的方式,比如用上4-6个8g-24g显存的设备就可以跑起来70B, moe, vl这些。

具体代码如下,以GLM-4v为例:

from transformers import LlamaConfig,LlamaForCausalLM,AutoTokenizer,AutoModel, AutoConfig
from accelerate import init_empty_weights,infer_auto_device_map,load_checkpoint_in_model,dispatch_model
import torch

cuda_list = '0,1,2,3'.split(',')
memory = '20GiB'
model_path = '/home/root/.cache/hub/ZhipuAI/glm-4v-9b'

tokenizer = AutoTokenizer.from_pretrained(
    model_path,
    trust_remote_code=True,
    encode_special_tokens=True,
    use_fast=False,
)

model = AutoModel.from_pretrained(
    model_path,
    trust_remote_code=True,
    device_map="auto",
    torch_dtype=torch.bfloat16,
    max_memory={0: "20GiB", 1: "20GiB", 2: "20GiB", 3: "20GiB"}
)



torch.set_grad_enabled(False)
model.eval()

from PIL import Image
messages = [
    {
        "role": "user",
        "content": "图片中可以看到多少人玩滑板?",
        "image": Image.open("/home/data/CogVLM-SFT-311K/llava_instruction_multi_conversations_formate/images/000000000.jpg").convert("RGB")
    }
]

inputs = tokenizer.apply_chat_template(
        messages,
        add_generation_prompt=True,
        tokenize=True,
        return_tensors="pt",
        return_dict=True,
    ).to(model.device)
generate_kwargs = {
    "max_new_tokens": 128,
    "do_sample": True,
    "top_p": 0.8,
    "temperature": 0.8,
    "repetition_penalty": 1.2,
    "eos_token_id": model.config.eos_token_id,
}
outputs = model.generate(**inputs, **generate_kwargs)
response = tokenizer.decode(
    outputs[0][len(inputs["input_ids"][0]) :], skip_special_tokens=True
).strip()

print("=========")
print(response)

最终,笔者利用4个32G的设备,成功推理了GLM-4V的模型,每个仅用了30%的显存。

显存占用效果为:

Device Monitor of AIC
AIC   Pwr(W)  |  Die   Temp(C)   Oclk(MHz)   Dclk(MHz)   Eclk(MHz)    %Mem    %Dec    %Enc    %AI     %Dsp
--------------*-------------------------------------------------------------------------------------------
  0     58.8  |    0      60.5         880          20          20   21.10    0.00    0.00    0.00    0.00
              |    1      62.5         880          20          20   24.89    0.00    0.00    0.00    0.00
              |    2      61.2         880          20          20   34.92    0.00    0.00    0.00    0.00
              |    3      63.0         880          20          20   37.71    0.00    0.00   87.61    0.00
=========
从拍摄者的角度看,有两个人的脚踩在滑板上。但是由于视角问题只能看到两个轮子以及他们脚下的一部分木板并不能完全确认是否有人在上面滑行。

所以无法准确回答这个问题需要更多信息来判断哪些人正在积极地参与滑板运动而不是仅仅站在附近或等待机会使用他们的设备。通常来说
/home/zyhan/anaconda3/envs/py310/lib/python3.10/tempfile.py:860: ResourceWarning: Implicitly cleaning up <TemporaryDirectory '/tmp/tmpcqkta1ax'>
  _warnings.warn(warn_message, ResourceWarning)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS进阶和SASS

目录 一、CSS进阶 1.1、CSS变量 1.2、CSS属性值的计算过程 1.3、做杯咖啡 1.4、下划线动画 1.5、CSS中的混合模式(Blending) 二、SASS 2.1、Sass的颜色函数 2.2、Sass的扩展(extend)和占位符(%)、混合(Mixin) 2.3、Sass的数学函数 2.4、Sass的模块化开发 2.5、Sass…

python-Flask:SQLite数据库路径不正确但是成功访问到了数据库,并对表进行了操作

出现了这个问题&#xff0c;就好像是我要去找在南方的人&#xff0c;然后我刚好不分南北&#xff0c;我认为的方向错了&#xff0c;实则方向对了。 在我针对复盘解决&#xff1a;sqlite3.OperationalError: unrecognized token: “{“-CSDN博客这个内容的时候&#xff0c;又出现…

剪映--关键帧教程:制作视频文字说明,文字动态划线,透明文字,虚拟触控,画面旋转缩小退出

关键帧介绍 剪映当中许多动态的效果都是关键帧的应用&#xff0c;像接下来会讲到的文字动态划线&#xff0c;画面旋转退出&#xff0c;都是关键帧的效果&#xff0c;用户只要设定初始状态和最后状态&#xff0c;软件会将中间的动态补齐。剪辑的难点在于自己需要先想好要怎么去…

【数据结构Ⅰ复习题】

如有错误欢迎指正&#xff0c;题目根据教材----------严蔚敏数据结构&#xff08;c语言版 第2版&#xff09;人民邮电电子版 数据结构Ⅰ复习题 一、填空题1&#xff0e;算法应该具备的5个重要特性有___有穷性___、确定性、可行性、输入和输出。2&#xff0e;非空单链表L中*p是头…

697: Edit Distance

我们定义 dp[i][j] 为将字符串 A[0..i-1] 转换为 B[0..j-1] 的最小操作数 状态转移 通过动态规划的思想&#xff0c;我们可以使用 状态转移方程 来计算 dp[i][j]。具体来说&#xff0c;dp[i][j] 的值可以由以下几种操作得到&#xff1a; 如果 A[i-1] B[j-1]&#xff1a; 如果…

【AI创作】kimi API初体验

一、介绍 接口文档 https://platform.moonshot.cn/docs/guide/migrating-from-openai-to-kimi 收费详情 并发: 同一时间内我们最多处理的来自您的请求数RPM: request per minute 指一分钟内您最多向我们发起的请求数TPM: token per minute 指一分钟内您最多和我们交互的toke…

迈向AGI,3、2、1,2025上链接!

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 往期精彩文章推荐 关于AI TIME AI TIME源起于2019年&#xff0c;旨在发扬科学思辨精神&#xff0c;邀请各界人士对人工智能理论、算法和场景应用的本质问题进行探索&#xff0c;加强思想碰撞&#xff0c;链接全…

C语言中的强弱符号

文章目录 一、基本定义二、链接过程中的行为三、应用场景四、强弱符号示例1五、稍有难度示例2 在C语言中&#xff0c;强弱符号是与链接过程相关的重要概念&#xff0c;C中不存在强弱符号&#xff0c;以下是对它们的详细讲解&#xff1a; 一、基本定义 强符号 强符号通常是指在…

数据仓库建设方案和经验总结

在做数据集成的过程中&#xff0c;往往第二步的需求就是建设数仓由于数据分散在不同的存储环境或数据库中&#xff0c;对于新业务需求的开发需要人工先从不同的数据库中同步、集中、合并等处理&#xff0c;造成资源和人力的浪费。同时&#xff0c;目前的系统架构&#xff0c;无…

SAP SD学习笔记24 - 赠品的两种形式 - 内增Bonus数量、外增Bonus数量

上一章讲了无偿出荷的内容。 SAP SD学习笔记23 - 无偿出荷&#xff08;免费交货&#xff09;与继续无偿出荷&#xff08;继续免费交货&#xff09;-CSDN博客 本章继续将SAP中赠品的两种形式&#xff1a; - 内增Bonus数量&#xff1a;Bonus数量包含在总数量当中&#xff0c;比…

【JVM】JVM自学笔记(类加载子系统、运行时数据区、执行引擎)

JVM自学笔记 引言总结JVM跨平台JVM组成部分类加载子系统运行时数据区程序计数器虚拟机栈本地方法栈堆 执行引擎垃圾回收 引言 主要内容为学习b站视频后的笔记部分个人总结。原视频链接为&#xff1a;【【JVM极简教程】2小时快速学会JVM&#xff0c;史上用时最短&#xff0c;效…

丢弃法hhhh

一个好的模型需要对输入数据的扰动鲁棒 丢弃法&#xff1a;在层之间加入噪音&#xff0c;等同于加入正则 h2和h5变成0了 dropout一般作用在全连接隐藏层的输出上 Q&A dropout随机置零对求梯度和求反向传播的影响是什么&#xff1f;为0 dropout属于超参数 dropout固定随…

深入Android架构(从线程到AIDL)_06 短程通信 vs. 远程通信

目录 7、 短程通信 vs. 远程通信 範例&#xff1a; 短程通信 撰写步骤 範例&#xff1a; 遠程通信 7、 短程通信 vs. 远程通信 範例&#xff1a; 短程通信 首先出现ac01画面&#xff0c;立即启动myService&#xff0c;定时连续传来数字&#xff0c;如下&#xff1a;由于定…

进销存软件数据库设计

设置 system_config 系统参数配置pricing_policy 价格策略&#xff08;销售采购价格取数优先级&#xff09;code_rule 编码规则account_book 账套checkout 结账admin 管理员role 角色menu 菜单menu_role 角色菜单merchant 商户merchant_menu 商户菜单merchant_user 商户用户资料…

[文献阅读]ReAct: Synergizing Reasoning and Acting in Language Models

文章目录 摘要Abstract:思考与行为协同化Reason(Chain of thought)ReAct ReAct如何协同推理 响应Action&#xff08;动作空间&#xff09;协同推理 结果总结 摘要 ReAct: Synergizing Reasoning and Acting in Language Models [2210.03629] ReAct: Synergizing Reasoning an…

antd-vue - - - - - a-date-picker限制选择范围

antd-vue - - - - - a-date-picker限制选择范围 1. 效果展示2. 代码展示 1. 效果展示 如图&#xff1a;限制选择范围为 今年 & 去年 的 月份. 2. 代码展示 <template><a-date-picker:disabledDate"disabledDate"picker"month"/> &l…

OceanBase到MySQL实时同步方案

概述 本方案基于OceanBase Binlog服务&#xff0c;采用数据库实时复制软件Beedup订阅捕获OceanBase数据库的Binlog事件&#xff0c;复制软件将Binlog事件还原为MySQL支持的DML或DDL&#xff0c;然后交由MySQL数据库执行。 配置Binlog任务 启用OceanBase Binlog服务&#xff…

[QT]控件的核心属性

一、控件的核心属性 1.enable属性 表示一个控件是否可用&#xff0c;可以用isEnabled()接口获取到当前控件的可用状态&#xff0c;同时来提供了setEnabled()接口设置控件是否可用&#xff0c;传递的参数为true和false。 isEnabled(); setEnabled(bool); Demo&#xff1a;通过一…

DRAM 的类型

DRAM&#xff08;Dynamic Random Access Memory&#xff09;&#xff0c;即动态随机存取存储器&#xff0c;是现代计算机系统中不可或缺的存储组件之一。 根据市场情况主要分为以下几种&#xff1a; 一、SDRAM&#xff08;Synchronous Dynamic Random Access Memory&#xff0…

虚拟机中的时统卡功能和性能调优

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…