让GPU跑的更快

article/2025/8/28 13:53:58

作为一个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://chatgpt.dhexx.cn/article/2oKjKUUb.shtml

相关文章

什么是GPU 加速?

1、什么是GPU加速计算 GPU,又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器,与CPU类似,只不过GPU是专为执行复…

什么是GPU加速

1、什么是GPU加速计算 GPU,又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器,与CPU类似,只不过GPU是专为执行复…

GPU加速原理技术介绍

GPU加速技术&原理介绍 1、GPU&CPU GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。与CPU不同,GPU是专门为处理图形任务而产生的芯片。从这个任务定位上面来说,不仅仅在计算机的显卡上面,在手机、游戏机等等各种有多媒体处理需求的地方都可以见到…

GPU加速原理浅析及代码实现

GPU加速原理浅析及代码实现 一、CUDA简介二、GPU架构特点三、CUDA线程模型四、CUDA内存模型五、CUDA编程规范**第一个要掌握的编程要点**:**我们怎么写一个能在GPU跑的程序或函数呢?****第二个要掌握的编程要点**:**CPU和GPU间的数据传输怎么…

1129-

标题1-行情概览 标题2-行情图片 标题3-重点分析 WTA原油七点开盘高开高走,导致国内原油跌停板上高开高走,下午一点半不知道什么原因又低开。铁矿收一根4.7%的大阳线。贵金属高开高走

连接mysql报错 errorCode 1129, state HY000, Host ‘xxx‘ is blocked because of many connection errors

springcloud项目启动连接mysql过程中报错. 报错关键信息如下: java.sql.SQLException: null, message from server: "Host 192.168.56.1 is blocked because of many connection errors; unblock with mysqladmin flush-hosts" 错误原因: mysql设定了单个客户端…

Navicat连接MySQL 报错 1129

启动本地项目时,由于nacos设置的数据库账号密码未将本地改为线上,导致数据库连接多次而报错,另外navicat进到该IP的线上库也报错1129,报错信息 Host’123.45.678.99’ is blocked because of many connection errors; unblock wit…

ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1129)

在使用 requests 爬网站时报错: ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1129)urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(hostmooc1-1.chaoxing.com, port443): Max retries exceeded with url: /work/ .......requests.ex…

【dfs爆搜】poj 1129 Channel Allocation

1129 -- Channel Allocation (poj.org) 题意: 大致的题意就是给你一张图,给这张图染色,最多能染多少种颜色 思路: 首先要构造状态图,构造完状态图之后对其进行搜索(注意是先有图再有的dfs,而…

#1121

#1121 水题,巧妙暴力,拒绝强行暴力导致TLE; 找条件 你好! 这是你第一次使用 *Markdown编辑器 #include #include #include #include #include #include #include #include #include #include #include #include #inc…

Java-1129

Java8 新特性 速度更快代码更少(lambda、stream)强大的Stream API便于并行最大化减少空指针异常Optional 速度更快:对底层数据结构哈希map的优化 解释说明hashmap基本原理 hashmap本质是一个长度16的数组元素的键值对以key:valu…

如何用管理员权限打开CMD(快捷键)

近期给电脑重新装了win10系统,在使用cmd时发现执行一些命令提示我权限不够,需要管理员权限,有两种常用方法可以使用管理员权限打开cmd命令行: 第一种:搜索cmd应用,然后点击以管理员身份运行 第二种&#x…

Windows | 管理员权限打开CMD 快捷键

大家打开CMD一般用windows R,然后在运行框中输入cmd,接着Enter就好啦。 有时候安装啥东西需要管理员权限,运气不好,需要多次使用,每次操作都相比较麻烦,于是找了快捷键。 解决方法 和打开普通权限的CMD…

如何快速进入/打开cmd--快捷键

Windows系统快速进入cmd 1.WinR(win键在键盘左下角,ctrl和alt中间是个图标) 2.如何在一个目录内快速进入cmd? 2.1进入想要进入的目录 2.2直接在地址栏输入cmd 2.3回车即可进入cmd 3.在运行里面敲cmd也可进入 4.按住SHIFT鼠标右键可以在任意目录进入cmd 别忘了选择在此处打开…

cmd暂停快捷键_是否有键盘快捷键可以暂停正在运行的CMD窗口的输出?

cmd暂停快捷键 When running a batch script, you may need or want to pause the output in the CMD window so that you can look things over. Is there an easy way to pause, then restart the output? Today’s SuperUser Q&A post has the answer to help with a r…

cmd 实用快捷键。。

我相信大家用cmd时会感到很憋手蹩脚的。。什么CtrlC,CtrlV,都不能用。只能通过点击上面的边框通过编辑-->粘贴实现。其实并不需要这么做,在这里首先介绍几个简单的操作: 1.在cmd上点击右键,选中属性,在编辑选项中的…

【windows小技巧】快速以管理员的方式启动CMD窗口and使用快捷键启动管理员CMD窗口

启动CMD窗口想必很简单,大家都会,以管理员的方式启动CMD窗口,虽说有点麻烦,但是也不难。以上这两种方式还是有点麻烦,能不能直接快捷键一按就直接启动 【管理员:命令提示符】窗口呢? 一、具体操…

Win10 CMD命令大全与超好用的快捷键

一、Windows CMD 命令大全 按组合键 Win(Windows图标键)R 键打开运行窗口,输入“cmd”按回车即可打开cmd命令提示符 在窗口右击选择属性可进行个性化设置~ 1.calc:启动计算器2.appwiz.cpl:程序和功能3.certmgr.msc:证书管理实用…