在使用TensorFlow Lite库时,有没有办法确保或至少在运行时确定使用了正确的加速器(CPU、GPU)?
尽管我已经按照指南设置了解释器。Options()
对象在具有GPU(Samsung S9)的设备上使用GPU委托,但在某些情况下很可能使用CPU。例如,如果您使用带有默认委托选项对象的量化模型,它将默认使用CPU,因为量化模型允许
设置为false。我几乎可以肯定,即使传递给解释器的选项对象有GPU委托
,但还是使用了CPU。不幸的是,我不得不根据推理速度和准确性进行猜测。
没有任何警告,我只是注意到推理时间变慢并提高了准确性(因为在我的案例中,GPU的行为很奇怪,给了我错误的值,我正在试图找出原因作为一个单独的问题)。目前,我必须猜测是否正在使用GPU/CPU,并做出相应的反应。现在,我认为还有其他类似的情况,它会落回CPU,但我不想猜测。
我听说过AGI(Android GPU Inspector),它目前只支持3像素设备。如果能用它来看到GPU在分析器中得到使用,那就太好了。我也尝试过三星GPUWatch,但它根本不起作用(在OpenGL和Vulkan上),因为我的应用程序不使用这两个API中的任何一个(它不渲染东西,它使用tensorflow!)。
正如Farmaker提到的,TFLite的基准测试
首先,使用基准测试工具检查各种配置的延迟(对于代理,使用参数,如use\u gpu=true)。有关该工具的详细说明,请参阅本页,以及供您通过adb使用的预构建二进制文件。您还可以使用param--enable\u op\u profiling=true来查看代理对图中的哪些操作进行了加速。
然后,如果您想检查模型代理的准确性/正确性(即代理的行为是否像CPU在数字上的行为),请参阅此文档以了解工具的详细信息。
TensorFlow advocate的回答:
当我们设置使用特定的代理,但手机无法支持时,会发生什么?假设我设置为使用六边形代理,而手机无法使用它。它将回落到CPU使用率
A=它应该回退到CPU。
Q=如果我设置了GPU而此委托无法支持特定型号怎么办。它是回退到CPU还是崩溃?
A=它也应该回退到CPU,但棘手的是,有时委托“认为”它可以在初始化时支持op,但在运行时“意识到”它不能支持特定模型中op的特定配置。在这种情况下,代理崩溃。
Q=有没有一种方法可以确定在运行时使用什么委托,而不管我们已经设置了使用什么委托
A=您可以查看logcat,或使用基准测试工具在特定手机上运行模型以找出答案。
使用基准测试工具后,我会将结果放在这里:
正如你们所见,模型是由GPU处理的。我还随机选择了两部手机。如果你想要任何特定的设备,请告诉我。最后,你可以从这里的基准工具下载所有结果。
问题内容: 有什么方法可以确定进程(脚本)是否在lxc容器(〜Docker运行时)中运行?我知道有些程序能够检测它们是否在虚拟机中运行,是否可以为lxc / docker使用类似的程序? 问题答案: 最可靠的方法是检查。它会告诉您init进程的控制组,并且当您 不在 容器中时,它将用于所有层次结构。当您 在 容器内时,将看到锚点的名称。对于LXC / Docker容器,将分别类似于或。
问题内容: 在我的代码中,仅当它在JUnit测试中运行时,才需要进行某些修复。如何确定代码是否在JUnit测试中运行?是否有类似JUnit.isRunning()== true的东西? 问题答案: 如果您要以编程方式确定要运行哪个“配置文件”,则可能是一个好主意。考虑使用Spring Profiles进行配置。在集成测试中,您可能需要针对其他数据库进行测试。 这是经过测试的有效代码
问题内容: 您如何确定大写锁定是否在使用JavaScript? 需要注意的是:我用google搜索了,找到的最佳解决方案是将事件附加到每个输入,然后每次检查所按字母是否为大写,如果是,则检查是否也按住shift键。如果不是,则必须打开大写锁定。这感觉真的很脏而且只是… 浪费 -当然有比这更好的方法了吗? 问题答案: 您可以尝试一下。添加了一个有效的示例。当焦点位于输入上时,打开大写锁定会使LED变
问题内容: 我有一个需要用户输入密码的应用程序。 我想要做的是从控制台读取密码(如果操作系统支持unix)或显示JOptionPane并要求用户输入密码(如果操作系统支持图形界面(例如Windows))。 有人可能会争辩说,在上述两种情况下控制台始终可用,因此控制台输入就足够了。但是问题是,如果Java应用程序开始使用javaw.exe,则控制台不可用。因此,我需要一种方法来确定我是否可以做任何一
我们使用.Net MySql Connector的v6.9.9使用此连接字符串访问MySql,指定需要SSL。 我们的DBA已经启用了对SSL的支持,但在测试期间,无论我的机器上是否安装了证书,也不管我是否具有“SSL模式=必需”都可以连接到服务器。 然而,当我的DBA禁用SSL时,如果我使用上述连接字符串,我会得到一个错误,即SSL未启用。 因此,我真的不知道我的网络流量是否被加密。如何验证?
问题内容: 在JMS中,很容易找出连接是否丢失,是否发生异常。但是,如何确定连接是否再次存在? 场景:我使用JMS与服务器通信。现在我的连接断开了(服务器已关闭),这导致了异常。到目前为止,一切都很好。如果服务器再次启动并重新建立连接,我怎么知道? 我看不到任何可以提供此类信息的侦听器。 问题答案: 啊…旧的异常处理/重新连接难题。 有些传输提供程序将为您自动重新连接您的应用程序,而另一些传输提供