让GPU跑的更快

news/2024/5/2 14:17:16/文章来源:https://blog.csdn.net/qq_29788741/article/details/127199815

作为一个cuda爱好者 一定要好好看看

不再让CPU和总线拖后腿:Exafunction让GPU跑的更快!确实只用cpu会卡的一比...

在云服务中使用 GPU 是获得低延迟深度学习推理服务最经济的方式。使用 GPU 的主要瓶颈之一是通过 PCIe 总线在 CPU 和 GPU 内存之间复制数据的速度。对于许多打算用于高分辨率图像和视频处理的深度学习模型来说,简单地复制输入会大大增加系统的整体延迟,特别是当非推理任务,如解压缩和预处理也可以在 GPU 上执行时。

在这篇博文中,研究者们将展示如何在 TensorFlow 中直接通过 GPU 内存传递模型输入和输出以进行模型推理,完全绕过 PCIe 总线和 CPU 内存。

 由于大多数 GPU 代码是用 CUDA 编写的,本文将使用 TensorFlow 的 C++ 接口来演示这种技术。这样有利于对接其他库的接口,如用于 GPU 加速的图像预处理的 OpenCV 和用于硬件加速的视频解码的 NVIDIA NVDEC。

初始设置

在 TensorFlow 的 C++ 接口中,tensorflow::LoadSavedModel 被用来加载模型包:

然后可以使用 tensorflow::Session 来运行模型包。默认情况下,这将使用 CPU。 

使用 GPU

使用 GPU 就比较麻烦了。首先,用户必须从会话中创建一个 tensorflow::CallableOptions 的实例,以指定哪些张量被传入和传出 GPU 内存而不是 CPU 内存。此外,有必要指定内存将从哪个 GPU 中输入和获取。在这个例子中,为了简单起见,本文将把所有的输入和输出的张量(Tensor)放在第一个 GPU 上。

使用下面的函数可以获得 GPU 设备的名称: 

现在,用户可以创建一个 tensorflow::Session::CallableHandle 的实例,这个类封装了如何在 GPU 上运行带有输入和输出的 TensorFlow 图的方法。创建和销毁可调用对象的代价比较大,所以最好只在模型初始化时创建和销毁可调用对象。另外,可调用的对象应该在会话本身被销毁之前被销毁。

接下来就可以创建一些输入张量了。在这个例子中,本文将只使用 TensorFlow 内置的 GPU 分配器,但其实也是可以通过 tensorflow::TensorBuffer 接口将外部张量传入外部 GPU 缓冲区。 

 

 最后就可以运行模型了。现在,TensorFlow 既可以直接使用来自 GPU 的输入,也可以将输出放在同一个 GPU 上   whaosoft aiot http://143ai.com

使用 CUDA stream

尽管 TensorFlow 内部使用 CUDA stream,但上述样例中所有的 CUDA 操作仍然是同步的。运行 cudaDeviceSynchronize 必须要在分配内存之前,以确保不会破坏先前分配好的 TensorFlow 内存。还必须在写入输入后进行同步操作,以确保 TensorFlow 能获取到有效的输入。TensorFlow 本身也会在模型执行结束时与 GPU 进行同步,以确保输出的张量是有效的。

显然,人们希望 GPU 能尽可能长时间地异步运行以减少 CPU 造成的阻塞。幸运的是,用户可以访问内部的 TensorFlow CUDA stream。TensorFlow CUDA stream 的输入必须与 TensorFlow 的流同步,而输出的使用对象必须在访问内存之前与 TensorFlow 的流同步。使用 TensorFlow CUDA stream,我们可以完全取消与 CPU 的同步。

具体来说,首先,在 CallableOptions 上设置一个额外的选项,以便在模型执行结束时禁用 TensorFlow 的内部同步。 

 可以使用下面的辅助函数访问内部流,需要注意的是参数包括设备名称。

 创建模型的输入,并如下面的代码所示运行。注意这里没有调用 cudaDeviceSynchronize!

请注意,如果 TensorFlow 内部需要将内存从 GPU 复制到 CPU,那么在运行模型时仍然可能发生 CPU 与 GPU 同步。然而,在向模型传递输入和输出时不再固有的需要任何与 CPU 的同步。

结论

作者旨在通过这篇文章演示如何只通过 GPU 将输入和输出传递给 TensorFlow,这样一来可以绕过 PCIe 总线,减少开销和有限的 CPU 内存带宽。在 Exafunction,研究者们将在他们的模型服务解决方案——ExaDeploy——中使用这样的技术,以最大限度地提高 GPU 的利用率,即使是那些具有非常大的输入和输出的模型。

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

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

相关文章

关卡一: ajax

【学习前提】 完成前端开发基础和JavaScript基础学习 【阶段说明】 Ajax这个术语源自描述从基于 Web 的应用到基于数据的应用。 Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。 使用 JavaScript 向服务器提出请求并处理响…

有被惊艳到 复刻一个大型互联网项目有多简单?大型网约车项目实战+东宝商城(附项目白皮书+核心源码)

从上图可以看出,面试准备其实可以分为两个部分:第一个部分是日常工作中对自己负责项目的抽象、提效、数据化表达;不断反思如何用技术的手段提升业务价值,就是我们日常常说的技术为业务赋能;第二个部分才是决定面试后 &…

第八章 CSP 架构 - CSP 网关配置

文章目录第八章 CSP 架构 - CSP 网关配置CSP 网关配置CSP 网关管理器定义服务器访问定义应用程序访问CSP 网关参数第八章 CSP 架构 - CSP 网关配置 CSP 网关配置 CSP 网关是安装在 Web 服务器上并由其加载的 DLL 或共享库。 CSP 网关检测对扩展名为 .csp 或 .cls 的文件的任何…

ApplicationRunner和CommandLineRunner的作用和区别

一、作用 ApplicationRunner和CommandLineRunner都用于在容器启动后(也就是SpringApplication.run()执行结束)执行某些逻辑。 可用于项目的一些准备工作,比如加载配置文件,加载执行流,定时任务等 二、共同点和区别 …

nodejs+vue+elementui学生成绩管理系统python/php/java445

前台首页功能模块 学生成绩管理系统设计;主要实现首页、优秀教师、优秀班主任、学校简介、教学课件、公告信息、优秀学生、试卷列表、新闻资讯、我的、跳转到后台,功能。 优秀教师,在优秀教师页面可以填写标题、教师工号、荣誉等详细&#xf…

经典论文研读:《F1:A Distributed SQL Database That Scales》

一 简介 F1是Google提出的分布式关系型数据库,支持便捷的水平伸缩。这篇论文是NewSQL分布式数据库架构的基石。论文首先定义了F1分布式数据库设计的关键方向: 可伸缩性:数据库要提供对业务透明的水平扩展能力,并支持数据迁移、数…

全同态加密(FHE)体系概述

同态加密定义 假设有这样一个场景,用户有一组私密数据,被加密存储在了第三方的云平台,现在,该用户想对这组数据进行某种处理,但是处理过程和结果都不想让第三方云平台看到。当然,用户可以选择将数据下载下…

ITU-T G.781解读(一)

引言 本系列是作者在学习ITU-T时做学习笔记之用,ITU-T的标准库是一个非常庞大的系列,尽管网络上有许多对标准的解读,但作者认为要想系统的掌握一个系列的知识,还是要自己看一遍原汁原味的原文。 时钟同步准则 同步信息通过同步…

【操作系统】第三章:内存管理

第三章:内存管理 OVERVIEW第三章:内存管理一、内存管理1.内存管理内容(1)地址转换:Point1:程序装入Point2:程序链接(2)内存保护:(3)内…

Linux命令:netstat【监控TCP/IP网络,可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息】【TCP的11种状态】

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。 netstat [选项] 选项描述-a显示所有网络连接和监听的所有端口。-b显示创建每个连接或者监听商品的相关可执行程序。有时候有些已知的可执行…

参数传递和重定向

目录 1、参数传递 方法一 (1)修改路由配置, 主要是router下的index.js中的 path 属性中增加了 :id 这样的占位符 (2)视图层传递参数 (3)接收参数 (4)测试 方法二(…

2022年中国研究生数学建模竞赛A题——移动场景超分辨定位问题

目录一、题目原文1、背景2、研究现状3、待解决的问题二、雷达基础知识三、解决方案一、题目原文 1、背景 在日常家庭生活中,人们可能需要花费大量时间去寻找随意摆放在家中某些角落里的小物品。但如果给某些重要物品贴上电路标签,再利用诸如扫地机器人…

IS-IS(v4)协议分析

IS-IS协议分析 基本概述 工作原理 基本配置 一、基本概述 IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织&#x…

BGP(边界网关)协议的介绍与配置

边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系…

无法打开源文件opencv2

目录 一般有三种情况: 没有下载opencv: 配置环境变量: 属性配置: 一般有三种情况: 1、没有下载opencv的库 2、下载但是没有配置系统的环境变量 3、以上二者都已完成,但当前项目(每一个新…

《Google软件工程》读书笔记

文章目录理论什么是软件工程时间与变化规模与效率权衡与成本软件工程 VS 编程文化如何更好地参与团队合作隐藏有害一切为了团队谷歌范儿知识共享学习的挑战知识共享的哲学设定基调:心理安全不断充实知识扩大提问渠道:向社区提问分享你的知识:…

青少年CTF-Web-Robots

题目信息题目名称:Robots 题目描述:昨天十三年社团讲课,讲了Robots.txt的作用,小刚上课没有认真听课正在着急,你能不能帮帮忙? 题目难度:一颗星 解题过程 访问题目链接浏览器里是空白的,题目名称是Robots,我们访问robots.txt看看。发现有个Disallow的f1ag_1n_the_h3re…

SpringSecurity学习笔记(九)RememberMe进阶

参考视频,编程不良人 前面我们介绍了rememberMe的实现原理,从中我们可以思考这样一个问题,如果我们的cookie被非法用户获取,然后携带这个cookie进行访问我们的项目中的内容,就会导致非法用户登录。这个问题怎么解决呢…

正则化方法笔记

能解决过拟合的方法都叫-正则化 L1和L2正则化只针对W进行正则化,减少过拟合,重点还是W。 权重W,可以理解为一个高维的向量,也可以理解为高维空间中的一个点,这个点到原点的距离,这个距离如果是欧氏距离&a…

(附源码)ssm模具配件账单管理系统 毕业设计 081848

ssm模具配件账单管理系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术…