模型优化Roof-line模型的使用

news2024/12/24 7:44:15

一、目录

  1. 定义
  2. 求模型的计算强度,绘制屋檐模型,并分析
  3. 绘制多级缓存的屋檐模型
  4. 计算模型计算强度、工具
  5. A100显卡下模型分析
  6. 分析
  7. 如何提高模型的计算强度

二、实现

  1. 定义:
    Roof line Model(屋檐模型):模型在一个计算平台的限制下,到底能达到多快的浮点计算速度.
    模型构建的曲线:曲线由 硬件决定。在这里插入图片描述
    算力决定“屋顶”的高度(绿色线段)
    带宽决定“房檐”的斜率(红色线段)
    Peak:机器的最大算力,查表获取
    Imax:计算强度上限,即内存最大情况。
    带宽: 计算平台每秒能完成的内存交换量上限;单位: Byte/s
    计算强度I: 表示每Byte内存交换到底用于多少次浮点运算,计算强度越大,内存使用效率越高。
    例如:1080Ti 的算力 π=11.3 TFLOP/s
    ,1080Ti 的带宽 β=484 GB/s 进行绘图:
    Imax=(11.310^12) /(48410^9)=23.35 1gb约10^9 byte
    Peak=11.3 TFLOP
    所以: 可以绘制计算机Roof line 模型。
    计算瓶颈区、宽带瓶颈区
    讲的是模型位于 屋檐模型中的分析。
    计算瓶颈区
    不管模型的计算强度 I 有多大,它的理论性能 P 最大只能等于计算平台的算力 π 。当模型的计算强度 I 大于计算平台的计算强度上限 Imax 时,模型在当前计算平台处于 Compute-Bound状态,即模型的理论性能 P 受到计算平台算力 π 的限制,无法与计算强度 I 成正比。从充分利用计算平台算力的角度上看,此时模型已经 100% 的利用了计算平台的全部算力。可见,计算平台的算力 π 越高,模型进入计算瓶颈区域后的理论性能 P 也就越大。
    模型位于计算瓶颈区:模型的算力受限于平台的算力。
    宽带瓶颈区
    当模型的计算强度 I 小于计算平台的计算强度上限 Imax 时,由于此时模型位于“房檐”区间,因此模型理论性能 P 的大小完全由计算平台的带宽上限 β (房檐的斜率)以及模型自身的计算强度 I 所决定,因此这时候就称模型处于 Memory-Bound 状态。可见,在模型处于带宽瓶颈区间的前提下,计算平台的带宽 β 越大(房檐越陡),或者模型的计算强度 I 越大,模型的理论性能 P 可呈线性增长。
    模型位于计算瓶颈区,位于曲线下,可优化模型的计算强度。位于曲线上,可优化模型的计算强度+宽带。

  2. 求模型的计算强度,绘制屋檐模型,并分析
    模型的计算强度=运算量/访存量
    运算量= 模型前向传播的浮点运算次数
    访存量=模型前向传播内存交换数量
    假设 VGG16 的计算强度 IV≈25 MobileNet 的计算强度 IM≈7 (后面)在这里插入图片描述
    (7484109)/(1012)=3.3
    由上图可以非常清晰的看到:
    MobileNet 处于 Memory-Bound 区域。在 1080Ti 上的理论性能只有 3.3 TFLOP/s。
    VGG16 刚好迈入 Compute-Bound 区域。完全利用 1080Ti 的全部算力。

  3. 绘制多级缓存的屋檐模型
    参考:https://zhuanlan.zhihu.com/p/665990267
    在这里插入图片描述
    流程:
    确定不同计算指令的峰值FLOPS值,画出其Roof-line(即上方横向“屋顶”)—>查询平台算力
    以L1、L2、HBM三级缓存之间的最大带宽速率为斜率,得到包括多级缓存Roof-line(即左侧斜向“屋檐”)---->查询带宽
    使用prof工具得到算子的一次推理中L1、L2、HBM三层的访存量。---->求模型的访存量
    使用prof工具得到算子的一次推理的计算量FLOPs。 ------>求模型的推理量
    计算L1、L2、HBM三层的计算强度(FLOPs/访存量),计算得到三个计算强度,画到图中。---->计算、绘图。

  4. 计算模型计算强度、工具
    在这里插入图片描述

from torchstat import stat
import torchvision.models as models
net = models.resnet18() #以resnet18为例
print(stat(net, (3, 224, 224)))    # (3,224,224)表示输入图片的尺寸

在这里插入图片描述
计算量:131.77GFlops、内存读写8.03GB
模型计算强度=(131.77*109)/(8.03*109)=16.471Flops/Byte

  1. A100显卡下模型分析
    1. 查看算力、宽带: https://www.nvidia.cn/data-center/a100/
      FP32 算力为 19.5TFLOPS,
      HBM2E(高带宽内存)High Bandwidth Memory: 1555GB/SEC
      L1:一级缓存 缓存可以不用绘制
      L2: 二级缓存
      I max=(19.5/1555)*1000=12.5

在这里插入图片描述
在这里插入图片描述
3. 求模型参数:
16.471Flops/sec1555GB/sec109/1012=25.61

import matplotlib.pyplot as plt
import numpy as np
# 峰值性能(Peak Performance)与内存带宽(Memory Bandwidth)
peak_performance = 19500 # 以 GFLOPS 表示, 处理器可以达到的最大浮点运算性能
memory_bandwidth = 1555 # 以 GB/s 表示, 内存与处理器之间每秒可以交换的最大数据量
# 设置算术密集度的范围(FLOPS/Byte)
arithmetic_intensity = np.logspace(-2, 2, num=100)
# 计算绩效上限
performance_limit = np.minimum(peak_performance, memory_bandwidth * arithmetic_intensity)
# 绘制 Roofline 模型
plt.loglog(arithmetic_intensity, performance_limit, label='Roofline')


app_arithmetic_intensity = 16.474 # FLOPS/Byte 运算量/访存量
app_peak_performance = 25610 # 每秒进行的浮点运算次数
# 标记应用程序性能
plt.scatter(app_arithmetic_intensity, app_peak_performance, color='red', label='App Performance')
# 添加图例和标签
plt.xlabel('Arithmetic Intensity (FLOPS/Byte)')
plt.ylabel('Performance (GFLOPS)')
plt.legend()
plt.grid(True, which="both", ls="--")
plt.title('Roofline Model')
# 显示图表
plt.show()
  1. 分析

在这里插入图片描述
模型位于计算瓶颈期,宽带已充分使用,模型计算能力也超过平台的最大计算能力。
7. 如何提高模型的计算强度
https://zhuanlan.zhihu.com/p/677057296
平台的计算强度:Imax=Peak_flops/ 带宽
模型的计算强度=运算量/访问量 ---->横坐标
模型计算强度>平台的计算强度(Imax)模型受限于平台的计算资源运行速度慢、延迟高、吞吐量低等模型的计算强度<平台计算强度(Imax)模型受限于平台的宽带资源运行速度慢、延迟高、吞吐量低等
在这里插入图片描述

  1. 如果处于计算能力受限情况下,可以:
    1 升级到更强大、更昂贵、峰值 FLOPS 更高的芯片。
    2 对于矩阵乘法等特殊运算,NVIDIA Tensor Cores 等更快的专用硬件单元。
    3 减少模型运行所需的运算操作数量。更具体地说,对于 ML 模型,这可能说明使用更少的参数就能获得相同的结果。像模型剪枝(pruning)或知识蒸馏(knowledge distillation)这样的技术可以帮助实现这一点。
    4 使用精度更低、速度更快的数据类型进行计算。
  2. 如果处于内存带宽受限情况(Memory bandwidth bound)下,可以:
    1 升级到功能更强大、更昂贵、具有更高内存带宽的芯片。
    2 使用模型量化(quantization)等模型压缩技术或并不流行的模型剪枝和知识蒸馏技术,减少需要移动的数据量。对于 LLM(大语言模型),data size issue(译者注:此处应当指的是由于大规模数据传输导致的内存带宽受限问题)主要通过仅对模型权重进行量化的技术来解决(如 GTPQ [5] 和 AWQ [6] 量化算法),以及 KV-cache 量化来解决。
    3 减少内存操作的次数。在 GPU 上运行任务实际上就是执行一个有向图,图中的每个节点都代表一个计算核心(或 GPU 函数)的执行。对于每个核心(kernel),必须从内存中获取输入,并将输出写入内存。将多个计算核心(或 GPU 函数)合并为一个更大的计算核心,即以调用单个计算核心的方式来执行最初分散在多个计算核心中的内存操作,可以减少内存操作的次数。将多个内存操作融合的过程可以由编译器自动执行,也可以通过手动编写自定义的内核来进行内存操作融合(这种方式比较困难,但对于复杂的内存操作融合来说是必要的)。
    4 对于 Transformer 模型,为注意力层(attention layer)开发高效的经过融合处理后的计算核心(fused kernels)仍然是一个较为活跃的领域。许多经过优化的计算核心都基于流行的FlashAttention算法 [7]。Transformer 模型所需的经过融合处理的计算核心库包括 FlashAttention 、 Meta 的 xFormers 以及现已废弃的 NVIDIA FasterTransformer (已并入 NVIDIA TensorRT-LLM 中)。

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

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

相关文章

Python番外篇之代码编译与字节码

引言 关于字节码&#xff0c;不太想讲&#xff0c;不影响实际使用&#xff0c;对新手不友好…… 但是&#xff0c;涉及到新手经常碰到的问题的解惑&#xff0c;似乎又不得不讲。 最终&#xff0c;还是打算以番外篇的形式&#xff0c;稍微提一下。 不过&#xff0c;关于字节码的…

恒创科技:HTTP错误码403禁止意味着什么,怎么修复它?

HTTP错误码403禁止意味着客户端无权访问特定网页或服务器。403 错误表示客户端存在问题&#xff0c;无论用户使用的是哪种网络浏览器&#xff0c;都可能发生这种情况。幸运的是&#xff0c;阻止服务器允许访问特定页面的问题通常可以修复。以下是一些常见原因和相应的解决方案。…

Playwright之录制脚本转Page Object类

Playwright之录制脚本转Page Object类 设计思路 &#xff1a; 我们今天UI自动化设计的时候&#xff0c;通常会遵循一些设计模式&#xff0c;例如Page Object模式。但是自己找元素再去填写有一些麻烦&#xff0c;所以我们可以通过拆解录制的脚本&#xff0c;将其中的元素提取出来…

行业洞察 | 2024应用程序安全领域现状报告

在信息爆炸的时代&#xff0c;我们每天都在使用各种应用&#xff0c;从社交娱乐到工作学习&#xff0c;应用已经成为我们生活中不可或缺的一部分。然而&#xff0c;你是否知道&#xff0c;在这些便捷的背后&#xff0c;隐藏着巨大的安全风险&#xff1f; 近年来&#xff0c;应用…

爬虫-网页基础

HTML 基本语法 HTML&#xff1a;Hyper Text Markup Language, 超文本标记语言&#xff0c;是计算机语言的一种&#xff0c;由元素构成。 p元素 <p>Web 真好玩&#xff01;</p> 由三大部分组成 开始标签&#xff1a;一对尖括号中间包裹这元素名称元素内容&#x…

中霖教育怎么样?注册会计师可以跨省考试吗?

中霖教育怎么样?注册会计师可以跨省考试吗? 1. 考试地点安排&#xff1a; 注册会计师考试是在全国范围内统一举行的&#xff0c;通常设在各省、自治区和直辖市指定的考区。考生须依据准考证上提供的信息&#xff0c;核实自己的具体考试地点。该考试实行的网上统一报名制度&…

mpeg格式怎么转换成mp4?这四种转换方法非常好用!

mpeg格式怎么转换成mp4&#xff1f;在数字视频领域中&#xff0c;MPEG格式算是相对冷门的一种选择&#xff0c;然而&#xff0c;选择这种格式却不是没有代价的&#xff0c;首先&#xff0c;MPEG采用了有损压缩技术&#xff0c;这意味着在视频处理过程中&#xff0c;会丢失一些细…

欧洲杯:高精度定位技术,重塑体育赛事新体验

随着科技的飞速发展&#xff0c;体育赛事的观赏体验与竞技水平正被不断推向新的高度。在即将到来的2024年欧洲杯赛场上&#xff0c;一项革命性的技术——高精度定位&#xff0c;正悄然改变着比赛的每一个细节&#xff0c;为球迷们带来前所未有的观赛享受&#xff0c;同时也为运…

Linux Shell 脚本入门教程:开启你的自动化之旅

目录 一、什么是Shell&#xff1f; 二、 编写第一个Shell脚本 ​编辑 2.2 变量 2.3 功能语句 2.4 数组 一、什么是Shell&#xff1f; Shell是一种计算机程序&#xff0c;它充当了用户与操作系统之间的接口。在Linux系统中&#xff0c;Shell允许用户通过命令行界面&#x…

揭开梵蒂冈秘密档案馆的神秘面纱

关注我们 - 数字罗塞塔计划 - PART 01 深邃的历史 梵蒂冈秘密档案馆起源于公元8世纪&#xff0c;负责保存官方文书和教皇书信。9世纪开始在圣彼得大教堂设立档案库&#xff0c;负责保管外交和法律文件&#xff0c;在帕拉蒂诺山塔内保存经济和行政方面的档案。11至13世纪&…

3.2ui功能讲解之graph页面

本节重点介绍 : graph页面target页面flags页面status页面tsdb-status页面 访问地址 $ip:9090 graph页面 autocomplete 可以补全metrics tag信息或者 内置的关键字 &#xff0c;如sum聚合函数table查询 instante查询&#xff0c; 一个点的查询graph查询调整分辨率 resolutio…

在地图上根据经纬度,画一个矩型围栏,设置每个点的经纬度

在做一个需求时有一个小点就是添加一个配送区域(5公里直径内的)矩形围栏 我做的比较简单 大家看看有没有帮助, 也是精简代码。测试效果上相对是精准的 //谷歌&#xff0c;根据经纬度获取以它为中心半径为5公里内的矩形的四个点经纬度getDefalutPoints (lng: number, lat: num…

【SpringCloud】Ribbon源码解析

ribbon是一个负载均衡组件&#xff0c;它可以将请求分散到多个服务提供者实例中&#xff0c;提高系统的性能和可用性。本章分析ribbon是如何实现负载均衡的 1、LoadBalanced 消费者在引入ribbon组件后&#xff0c;给http客户端添加LoadBalanced注解就可以启用负载均衡功能。Lo…

LangChain 入门上篇:模型 I/O 封装

LangChain 是面向大模型的开发框架&#xff0c;是 AGI 时代软件工程的探索和原型。学习 LangChain 需要关注接口的变更。 LangChain 的核心组件 1.模型 I/O 封装 LLMS 大语言模型Chat Models 一套基于 LLMS&#xff0c;但按对话结构重新封装PromptTemplate 提示词模板Output…

Unity中TimeLine的一些用法

Unity中TimeLine的一些用法 概念其他 概念 无Track模式&#xff08;PlayableAsset、PlayableBehaviour&#xff09; 1. 两者关系 运行在PlayableTrack中作用 PlayableBehaviour 实际执行的脚本字段并不会显示在timeline面板上 PlayableAsset PlayableBehaviour的包装器&#x…

uboot run命令基本使用

run 命令可以用于运行环境变量的中定义的命令,run bootcmd 可以运行bootcmd中启动命令 作用:可以运行我们自定义的环境变量 include/command.h common/cli.c /*** board_run_command() - Fallback function to execute a command** When no command line features are enabled …

性能测试-JMeter学习

1、给不同的访问口分配访问占比&#xff1b;例&#xff1a;登录30%&#xff0c;首页&#xff1a;20%&#xff0c;新增&#xff1a;50% 不同业务放到不同线程组里&#xff0c;实现不同业务的分配 使用吞吐量控制器&#xff0c;设置不同的占比 使用if控制器&#xff0c;设置不同…

mac鼠标键盘共享:ShareMouse for Mac 激活版

hareMouse 是一款 Windows 和 macOS 操作系统上的共享和切换鼠标和键盘的实用工具。这款软件允许用户在多台计算机之间无缝地共享鼠标和键盘&#xff0c;使得在不同设备之间进行工作和操作变得更加便捷。占用资源少&#xff1a; ShareMouse 设计轻量&#xff0c;占用系统资源较…

Logback日志配置两种方式

SpringBoot 默认使用的是Logback 1. 在resource新建文件logback-spring.xml&#xff0c;配置日志相关信息 <configuration><property name"app.name" value"order-service"/><property name"log.path" value"./logs/"…

克隆gitee仓库,在vs2022创建文件夹开发项目操作步骤

git网站 git知识大全 git教程&#xff1a;廖雪峰的官方网站 git菜鸟教程 gitee之创建项目步骤 同步源仓库 2. 克隆命令 3. 右击git Bash Here>粘贴命令行 4. 选中项目文件夹》创建本人文件夹&#xff08;ZYY&#xff09; 5. 打开vs2022》新建项目》选择Framework》下…