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

推理加速 --- torch.compile

推理加速-- torch.compile

  • 一、背景介绍
    • 1.2 首次推理速度慢
    • 1.3 推理多次之后,又会出现一次速度特别慢的情况,感觉好像是重新优化
  • 二、如何使用
  • 三、其他设置
    • 3.1 mode 设置
    • 3.2 backend
    • 3.3 fullgraph
    • 3.4 dynamic
  • 参考资料

一、背景介绍

PyTorch 2.0 官宣了一个重要特性 —— torch.compile,这一特性将 PyTorch 的性能推向了新的高度,并将 PyTorch 的部分内容从 C++ 移回 Python。torch.compile 是一个完全附加的(可选的)特性,因此 PyTorch 2.0 是 100% 向后兼容的。

支撑 torch.compile 的技术包括研发团队新推出的 TorchDynamo、AOTAutograd、PrimTorch 和 TorchInductor。

  • TorchDynamo:使用 Python Frame Evaluation Hooks 安全地捕获 PyTorch 程序,这项重大创新是 PyTorch 过去 5 年来在安全图结构捕获方面的研发成果汇总;
  • AOTAutograd:重载 PyTorch 的 autograd 引擎,作为一个跟踪 autodiff,用于生成 ahead-of-time 向后跟踪;
  • PrimTorch:将约 2000 多个 PyTorch 算子归纳为一组约 250 个原始算子的闭集,开发人员可以将其作为构建完整 PyTorch 后端的目标。这大大降低了编写 PyTorch 功能或后端的流程;
  • TorchInductor:是一种深度学习编译器,可为多个加速器和后端生成快速代码。对于 NVIDIA GPU,它使用 OpenAI Triton 作为关键构建块。
  • TorchDynamo、AOTAutograd、PrimTorch 和 TorchInductor 是用 Python 编写的,并支持 dynamic shapes(无需重新编译就能发送不同大小的向量),这使得它们具备灵活、易于破解的特性,降低了开发人员和供应商的使用门槛。

1.2 首次推理速度慢

值得注意的是,torch.compile函数不会立即对函数进行加速优化,而是在第一次运行的时候才进行优化。这就会导致编译后的函数在第一次执行的时候十分缓慢。但是,会在第二次执行开始,变得非常快。

1.3 推理多次之后,又会出现一次速度特别慢的情况,感觉好像是重新优化

  • 原因分析

动态推理的原因,即输入的tensor是动态的

二、如何使用

一行代码进行使用

modoel_compile = torch.compile(model)

三、其他设置

def compile(model: Optional[Callable] = None, *,fullgraph: builtins.bool = False,dynamic: builtins.bool = False,backend: Union[str, Callable] = "inductor",mode: Union[str, None] = None,options: Optional[Dict[str, Union[str, builtins.int, builtins.bool]]] = None,disable: builtins.bool = False) -> Callable:"""Optimizes given model/function using TorchDynamo and specified backend.Args:model (Callable): Module/function to optimizefullgraph (bool): Whether it is ok to break model into several subgraphsdynamic (bool): Use dynamic shape tracingbackend (str or Callable): backend to be usedmode (str): Can be either "default", "reduce-overhead" or "max-autotune"options (dict): A dictionary of options to pass to the backend.disable (bool): Turn torch.compile() into a no-op for testing"""

3.1 mode 设置

关于mode参数介绍如下:

  • (默认)default: 适合加速大模型,编译速度快且无需额外存储空间
  • reduce-overhead:适合加速小模型,需要额外存储空间
  • max-autotune:编译速度非常耗时,但提供最快的加速
  • 未正确设置该参数导致的问题:
    1)推理速度慢
  • 示例
modoel_compile = torch.compile(model, mode="reduce-overhead")

3.2 backend

backend 编译器后端:API使用哪个后端将中间表示(IR)计算图(FX graph)转换为低级内核操作。这个选项对于调试graph编译问题和更好地理解torch.compile的内部非常有用。在大多数情况下,默认的Inductor后端似乎能够提供最佳的训练性能结果。有很多后端列表,我们可以使用下面命令查看:

from torch import _dynamoprint(_dynamo.list_backends())

我们测试使用nvprims-nvfuser后端,可以获得比eager模式13%的性能提升(与默认后端28.6%的性能提升相比)。具体区别还是要看Pytorch文档,我们这里就不细说了,因为文档都有。

3.3 fullgraph

fullgraph 强制单个图:这个参数是非常有用,可以确保没有任何不希望的图截断。

3.4 dynamic

dynamic 动态形状:目前 2.0对具有动态形状的张量的编译支持在某种程度上是有限的。编译具有动态形状的模型的一个常见解决方案是重新编译,但会大大增加开销并大大降低训练速度。如果您的模型确实包含动态形状,将动态标志设置为True将带来更好的性能,特别是减少重新编译的次数。

都有什么是动态形状呢,最简单的就是时间序列或文本长度不同,如果不进行对齐操作的话序列长度不同就是动态的形状。

参考资料

https://www.zhihu.com/question/590338541/answer/2959785643
https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/130939176

相关文章:

推理加速 --- torch.compile

推理加速-- torch.compile 一、背景介绍1.2 首次推理速度慢1.3 推理多次之后,又会出现一次速度特别慢的情况,感觉好像是重新优化 二、如何使用三、其他设置3.1 mode 设置3.2 backend3.3 fullgraph3.4 dynamic 参考资料 一、背景介绍 PyTorch 2.0 官宣了…...

JS-----数据结构与算法(2)

目录 三. 栈结构 1.认识栈结构 2. 封装栈结构 3. 应用 3-1 十进制转二进制 3-2 进制转换法 四. 队列 1.队列是什么? 2.队列的封装 3. 队列的应用-击鼓传花 4. 双端队列 5.判断是否为回文 三. 栈结构 1.认识栈结构 栈(stack)又…...

手把手安装TomCat;并部署JPress

目录 一、了解Tomcat: 二、安装 1、获取Tomcat软件包,且需要Java环境。 2、安装jdk 3、安装Tomcat 1.解压并创建软链接: 2.创建启动用户并更改文件权限: 3.编写系统服务文件: 4.重新加载配置文件并启动tomcat…...

tensorflow1.13分布式训练 参考资料 -教程原理

前言 对于数据量较大的时候,通过分布式训练可以加速训练。相比于单机单卡、单机多卡只需要用with tf.device(‘/gpu:0’)来指定GPU进行计算的情况,分布式训练因为涉及到多台机器之间的分工交互,所以更麻烦一些。本文简单介绍了多机(单卡/多卡…...

DP学习第五篇之礼物的最大价值

DP学习第五篇之礼物的最大价值 剑指 Offer 47. 礼物的最大价值 - 力扣(LeetCode) 一.题目解析 二. 算法原理 状态表示 tips: 经验题目要求。以[i,j]位置为结尾,。。。 dp[i][j]: 到达[i, j]位置时,此时的最大礼物价值 状态转移…...

cURL error 1: Protocol “https“ not supported or disabled in libcurl

1、php项目composer update报错 2、curl -V检查 发现curl已经支持了https了 3、php版本检查 4、php插件检查 插件也已经含有openssl组件了 5、phpinfo检查 curl是否开启ssl 定位到问题所在,php7.4的 curl扩展不支持 https 需要重装 php7.4的curl扩展 6、curl下载 下…...

XCode升级后QT无法编译的问题

原因是SDK的版本变了,Qt配置的版本要修改。 解决办法如下: 1.找到 /Users/*/Qt/5.15.2/clang_64/mkspecsqdevice.pri 这个文件打开编辑, 在文件末尾追加一句 !host_build:QMAKE_MAC_SDKmacosx13.1 至于这个版本号13.1是怎么来的呢&#xff1…...

springboot编写mp4视频播放接口

简单粗暴方式 直接读取指定文件,用文件流读取视频文件,输出到响应中 GetMapping("/display1/{fileName}")public void displayMp41(HttpServletRequest request, HttpServletResponse response,PathVariable("fileName") String fi…...

华为OD机试真题 JavaScript 实现【机器人活动区域】【2023Q1 200分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试&am…...

C++中的静态分配和动态分配

为什么不是 LaoJiaHelper mydalnew LaoJiaHelper (); 而是LaoJiaHelper mydal? 这个都没有new ,对象为什么能用?在 C 中,有两种创建对象的方式:静态分配和动态分配。 静态分配: 当你使用类似 LaoJiaHelpe…...

【Android常见问题(五)】- Flutter项目性能优化

文章目录 知识回顾前言源码分析1. 渲染过程2. 分析工具3. 优化方法合理使用const关键词合理使用组件管理着色器编译垃圾 知识回顾 前言 项目迭代开发一定程度后,性能优化是重中之重,其中包括了包体积,UI 渲染、交互等多个方面。 通过 Flutt…...

JSON转换:实体类和JSONObject互转,List和JSONArray互转(fastjson版)

//1.java对象转化成String String sJSONObject.toJSONString(javaObject.class); //2. java对象转化成Object Object strJSONObject.toJSON(javaObject.class); //3.String类型转json对象 JSONObject jsonObject JSONObject.parseObject(str); //4. String…...

Java单例模式几种代码详解

在软件开发中,单例模式是一种常见的设计模式,它的目的是确保一个类在任何情况下都只有一个实例,同时提供一个全局访问点。在Java中,有几种常见的实现单例模式的方式,下面将逐一进行详细解释。 懒汉式(非线…...

PHP代码审计--理论

提供资料: php 基础 : https://www.runoob.com/php/php-tutorial.html php是什么? PHP 是服务器端脚本语言。 首先在学习PHP前需要对HTML 和CSS有一定的认识 PHP 能做什么? PHP 可以生成动态页面内容PHP 可以创建、打开、读取、写入、关…...

在云服务器上,clone github时报Connection timed outexit code: 128

文章目录 问题解决方案 问题 在执行pip install安装依赖时,需要clone github代码,此时报了Connection timed out&exit code: 128错误,原因是访问超时了,此时需要使用代理 fatal: unable to access https://github.com/hugg…...

小型双轮差速底盘寻迹功能的实现

1. 功能说明 寻迹机器人是一种能够跟踪特定物体或线路的机器人。它们通常具有以下功能和特点: ① 传感器:寻迹机器人配备了用于感知环境的传感器,如摄像头、灰度传感器等。这些传感器可以探测地面上的标记、颜色、纹理或其他特定特征&#xf…...

第七篇:k8s集群使用helm3安装Prometheus Operator

安装Prometheus Operator 目前网上主要有两种安装方式,分别为:1. 使用kubectl基于manifest进行安装 2. 基于helm3进行安装。第一种方式比较繁琐,需要手动配置yaml文件,特别是需要配置pvc相关内容时,涉及到的yaml文件太…...

Chrome 75不支持保存成mhtml的解决方法

在Chrome 75之前,可以设置chrome://flags -> save as mhtml来保存网页为mhtml。 升级新版,发现无法另存为/保存网页为MHTML了。 在网上搜索无果后,只得从chromium项目的commits中查找,原来chrome搞了个"Chrome Flag Owner…...

工程监测振弦采集仪应用于岩土工程监测案例

振弦采集仪是一种用于测量地面或岩土中振动参数的仪器,可以对地基、土壤和岩体的性质及其变化进行监测。在岩土工程监测中,振弦传感器被广泛应用于测量土体或岩体的振动情况,以了解地震或其他自然灾害的影响。 以下是一个振弦采集仪应用岩土工…...

配置HDFS单机版,打造数据存储的强大解决方案

目录 简介:步骤:安装java下载安装hadoop配置hadoop-env.sh配置 core-site.xml配置hdfs-site.xml初始化hdfs文件系统启动hdfs服务验证hdfs 结论: 简介: Hadoop分布式文件系统(HDFS)是Hadoop生态系统中的一个…...

LangGraph与智能体:当AI学会了“思考图谱”,离真正干活还有多远?

你有没有发现:现在的AI聊天工具虽然能回答五花八门的问题,可一旦交给它稍微复杂点的任务——比如“订一张去上海的机票,顺便查查那边的天气,再帮我写份会议纪要”——它就手忙脚乱,要么忘记前面的信息,要么…...

谷歌收录怎么做比较快?Shopify过滤5个无效参数提升商品页收录

一个拥有5000个SPU的Shopify独立站,在Google Search Console后台的网页报告中,未收录网页数量高达45000个。索引分配明细标明,超过32000个URL带有“已抓取 - 目前未索引”标签。谷歌浏览器爬虫每天分配给该站点的抓取请求固定在4000次左右。检…...

qb-web测试策略:Jest单元测试与Vue组件测试最佳实践

qb-web测试策略:Jest单元测试与Vue组件测试最佳实践 【免费下载链接】qb-web A qBittorrent Web UI, write in TypeScriptVue. 项目地址: https://gitcode.com/gh_mirrors/qb/qb-web qb-web作为基于TypeScriptVue开发的qBittorrent Web UI,采用Je…...

AI人工智能行业的发展:从机器学习到深度学习的演变历程

在数字化浪潮席卷全球的当下,人工智能(AI)已然成为推动各行业变革的核心力量。对于软件测试从业者而言,深入了解AI从机器学习到深度学习的演变历程,不仅能把握技术发展脉络,更能为测试工作的智能化转型提供…...

汽车零部件三维扫描检测:精密制造新标杆,全链路质量管控升级

当下,汽车产业正加速向轻量化、电动化、集成化转型,零部件作为整车质量的核心基石,其制造精度与检测标准持续攀升。主机厂对零部件的形位公差、曲面轮廓度、装配匹配度要求日趋严苛,尤其在新能源汽车领域,薄壁件、复杂…...

Taotoken API Key的权限管理与审计日志功能初探

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken API Key的权限管理与审计日志功能初探 对于将大模型能力集成到业务流程中的团队而言,API Key的安全管理与操作…...

Audio Slicer:智能音频分割终极指南,告别繁琐手动剪辑

Audio Slicer:智能音频分割终极指南,告别繁琐手动剪辑 【免费下载链接】audio-slicer A simple GUI application that slices audio with silence detection 项目地址: https://gitcode.com/gh_mirrors/aud/audio-slicer 还在为音频剪辑的繁琐操作…...

ElevenLabs缅甸文TTS落地难题全拆解:从音素对齐失败到语调失真,3步精准修复

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs缅甸文TTS落地难题的根源认知 ElevenLabs官方API当前未原生支持缅甸文(Burmese, my-MM),其语音合成模型训练语料库中缺乏足够规模、高质量、带韵律标注的缅…...

LiveSplit深度解析:构建专业级速度跑计时系统的核心技术架构

LiveSplit深度解析:构建专业级速度跑计时系统的核心技术架构 【免费下载链接】LiveSplit A sleek, highly customizable timer for speedrunners. 项目地址: https://gitcode.com/gh_mirrors/li/LiveSplit LiveSplit是一款为速度跑者设计的专业级计时软件&am…...

六核国产CPU高性能显控方案:从自主可控到流畅体验的工程实践

1. 项目概述:从“能用”到“好用”的国产化显控之路 最近几年,但凡关注过信息技术领域的朋友,对“国产化”、“自主可控”这几个词一定不陌生。从芯片到操作系统,再到上层应用,一场深刻的产业变革正在发生。我作为一名…...