当前位置: 代码网 > it编程>编程语言>Java > 关于使用Bing AI或Copilot时GPU占用高的问题分析与解决

关于使用Bing AI或Copilot时GPU占用高的问题分析与解决

2024年08月05日 Java 我要评论
这篇文章一步步分析了edge浏览器使用Bing AI或Copilot占用高的问题和解决方法

就在上周,我使用bing ai时,发现单位老机子的风扇响个不停,开始没在意,后来在bing的对话框长度越来越长后,电脑震动的越来越厉害,所以习惯性打开的win10的任务管理器一看,好家伙,edge浏览器的gpu占用好高,达到了30%-40%,处于一种分析问题的本能,我开始了接下来的各种实验,希望能找到根源。

本人的单位电脑是i3-4130,内存16g ddr3,集成显卡。

我开始是以为我的电脑配置问题导致的, 所以试了下家里的电脑i3-9100t,还是有10-20%的gpu占用,显然这是不正常的,我换了台独显(gtx-750)再试,还是一样的超过10%的占用。

然后我开始怀疑是bing ai的网页问题,而且我发现一个问题,只要当前网页不是bing ai或copilot时,或者最小化bing ai时,gpu占用都几乎为0。我对比了其他网页,比如gpt、视频网站等,包括不停翻动网页,最大的占用也不会超过20,(gpt生成代码时占用很低,只有0.5-1%),显然时bing ai网页的问题,因为不单单是在生成回答时占用高,连上下翻动bing的对话网页也很高。

我估计看到这里,有些网友都要怀疑微软是不是偷偷在生成ai回答时,做什么计算,好减轻它云计算的压力了。我当时也是抱有这个想法,当时怀疑是不是微软在edge浏览器中藏了什么后门,所以我搜索了下gpt,怎么才能分析出gpu占用高的程序的代码位置,它给出我下面的答案。

这么多工具,我选择了gpuview用用看, 这是一个微软的实习生编写的工具,使用bing ai找到它的下载方法:

gpuview 是一个用于分析和诊断windows系统中图形处理单元(gpu)性能的工具。您可以通过以下方式获取gpuview:

  1. windows performance toolkit (wpt)

    • gpuview和其他相关文件包含在windows performance toolkit(wpt)中,这是windows评估和部署工具包(adk)的可安装选项。
    • wpt msi(microsoft软件安装程序)会安装多个文件和目录,其中包括一些gpuview特定的文件。
    • 您可以从这里下载wpt。
  2. 安装步骤

    • 下载并安装wpt。
    • 默认安装目录位于\\microsoft windows performance toolkit目录下,例如x86平台的wpt可能安装在类似\\program files (x86)\\windows kits\\10\\windows performance toolkit\\gpuview的目录中。
    • 您也可以选择自定义安装选项,以自定义二进制文件和相关支持文件的位置。

至于更多使用介绍,请查看如下链接(matt 的网页角 - gpuview (stanford.edu)) ,使用此软件时,就是它需要先打开系统记录事件功能,先录制一段gpu事件,然后会合并保存为merged.etl文件,用gpuview.exe打开它就可以看了。其中还有一个坑,录制时,需先运行log.cmd,命令提示符脚本,先开一个cmd,把这个脚本拖进去运行,不然后一闪而过,啥输出也看不到,运行后会报错"此时不应有4000",网上的解决方法是,用记事本打开这个log.cmd,搜索"if %trace_logging_memory% gtr 4000 goto set_large_buffers"这句代码(没有引号),然后在代码上面添加上"goto set_large_buffers",至于原因是因为这个微软实习生编写时,没有考虑到多语言的问题,所以除了英文的其他国家都会报错,具体看这个链接(solving gpuview 4000 was unexpected at this time error. – yosoygames)

 添加代码后,运行修改后的log.cmd,就不会报错了,然后我们操作下bing ai,把gpu占用高事件的记录下来,然后再次点击log.cmd关闭记录,接着程序就会自动合并一个merged.etl,然后和上面说的一样用gpuview打开就可以了。

详细情况可以看上图,我们需要的就是左侧列表中的线程运行gpu占用高的代码偏移地址,可以给我们调试代码使用。

现在我们可以使用任意的调试工具,如x64dbg、wingdbg、ida等加载msedge.exe查看分析上面得到的偏移地址。这里我选择windbg,使用它的附加功能,附加到msedge中去,我们可以看到有很多msedge线程,选择我们在gpuview得到的pid就可以了(请看上图最左侧,因为本文是后写的,所以windbg中的pid和gpuview中不一样,实际请忽略这个问题)。

幸运的是,微软提供了msedge的符号表,我们可以查看里面的程序方便一点,输入u msedge.exe+0x125fd0,可以看到如下的反汇编代码:

显然msedge.exe+0x125fd0的偏移地址和主程序的0号线程是一个东西,那我们切换到0号线程看看,输入命令~0s,如下图:

在stack堆栈里发现了一个有趣的函数,msedge!base::messagepumpforui::waitforwork,问问gpt看看,得到如下说明:

 

分析到这,情况逐渐明朗,显然这是一个chromium的代码库里的函数,有处理渲染等作用,显然应该找chrome浏览器渲染方面的资料,于是我搜索了chrome浏览器gpu占用高的问题,倒是有几个帖子如下:

chrome 的 gpu 进程的背后 | ladjzero's blog

这篇文章简单解释了下chrome浏览器gpu工作的原理。

chrome中的gpu加速合成_skia 的 opengl 后端(ganesh)-csdn博客

这篇文章详细说明了chrome的gpu渲染的原理、构架等方面的内容,相当不错。

上面的文章中,提到一个东西,如下:

 显然所有的关键就是css样式表里调用了transform,为了验证,我又问了下bing,如下:

那我们来验证下bing ai网页里是否调用了gpu加速。选择好网页,按f12打开edge浏览器的开发者模式,如下图:

 点击源代码选项卡,按ctrl+shirt+f快捷键搜索下"transform:"得到超多的transform结果,显然微软在bing ai里大量调用了gpu加速渲染,所以是gpu占用相当高,顺便说一句,css的transform渲染在ie、火狐、chrome、edge等主流浏览器都能开启gpu加速,终于知道了原因,现在来说下解决方法。

我搜索了下chrome浏览器gpu占用高的网友帖子,有不少,既然chrome不行,我们试试火狐浏览器,结果如下图:

我的分析完成,收工了,各位下周见! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com