TensorFlowLite GPU加速

2023-05-16

官方文档:https://tensorflow.google.cn/lite/performance/gpu?hl=zh_cn

TF LITE支持移动端GPU加速,特别对android端的支持比较丰富。相对android来说,对IOS的支持就有点差了。从给出的文档也能看出,android的文档也比IOS的丰富。

TF LITE明确只支持android和ios端,而且在不同的系统上会有不同表现。即便是可以用GPU,也有可能是部分操作可以应用GPU加速,部分依旧在CPU上,这要看具体系统对GPU操作的支持。TF LITE在运行时会给出log

引用官方的解释:

不支持的模型和 ops

如果一些 ops 并不支持 GPU 代理,框架只会在 GPU 上运行图形的一部分,剩下的部分会在 CPU 上运行。因为这会导致 CPU/GPU 同时出现很高的使用率,像这样的分开执行模式会导致运行起来比整个网络在 CPU 上运行要慢。在这种情况下,用户会收到一个像这样的警告:

 

WARNING: op code #42 cannot be handled by this delegate.

 

警告:此代理无法处理#42操作码

我们没有为这种失败提供回调,因为这不是真的运行错误,但是这个错误是开发者可以注意到的,他们可以尝试将整个网络在代理上运行。

 

TF LITE采用代理的方法为个平台提供GPU的支持,而且在android和IOS上使用的是不同的delegate。

下面的代码帮助屏蔽了不同平台对GPU代理的使用方法:

	std::unique_ptr<tflite::FlatBufferModel> model_ = tflite::FlatBufferModel::BuildFromFile(modelPath.c_str());
	if (!model_) {
		throw "build model error!";
	}
	tflite::ops::builtin::BuiltinOpResolver resolver;
	tflite::InterpreterBuilder(*model_, resolver)(&interpreter_);
	if (gpuMode)
	{
#if defined(__APPLE__) && TARGET_OS_IPHONE
		auto option = TFLGpuDelegateOptionsDefault();
		option.allow_precision_loss = true;
		option.enable_quantization = true;
		option.wait_type = TFLGpuDelegateWaitTypeAggressive;
		delegate_ = TFLGpuDelegateCreate(&option);
#endif
#if defined(__ANDROID__)
		auto option = TfLiteGpuDelegateOptionsV2Default();
		option.inference_priority1 = TfLiteGpuInferencePriority::TFLITE_GPU_INFERENCE_PRIORITY_MIN_LATENCY;
		delegate_ = TfLiteGpuDelegateV2Create(&option);
#endif
		if (delegate_)
		{
			if (kTfLiteOk != interpreter_->ModifyGraphWithDelegate(delegate_))
			{
				throw ("set gpu delegate failed, tensor create failed!");
			}
		}
		else
		{
			std::cout << "GPU acceleration is unsupported on this platform, use CPU mode.";
		}
	}
	if (!delegate_)
	{
		if (kTfLiteOk != interpreter_->AllocateTensors())
		{
			throw ("tensor create failed!");
		}
	}

代理使用完之后需要手动删除:

#if defined(__ANDROID__)
	TfLiteGpuDelegateV2Delete(delegate_);
#endif
#if defined(__APPLE__) && TARGET_OS_IPHONE
	TFLGpuDelegateDelete(delegate_);
#endif

其他调用与不使用代理相同

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorFlowLite GPU加速 的相关文章

随机推荐

  • Eclipse代码提示功能失效

    Eclipse 代码提示功能失效问题解决 Windows gt preferences gt java gt Editor gt Code Assist中Auto Activetion中的Enable auto activetion选项要勾
  • VM-tools选项为灰色无法安装的问题

    安装虚拟机VMware时 xff0c 桌面上没有vmware tools的安装光盘 虚拟机 gt 重新安装vmware tools选项为灰色 xff0c 也无法选择 尝试了将CD DVD SATA 的使用ISO映像文件改为物理驱动器 自动检
  • 数据库学习 - like(模糊查询)

    模糊查询问题 比如查询姓张的同学 xff0c 查询张某某等这类型问题 xff0c 在 select语句中通过查询条件中加入运算符 like 来表示 xff1b 含有 like运算符的表达式 列名 not like 字符串 xff08 表示其
  • 蓝桥杯2022年第十三届省赛真题-X进制减法(超详细解析)

    转自作者弗莱 详细解析和分享经验 进制规定了数字在数位上逢几进一 X 进制是一种很神奇的进制 xff0c 因为其每一数位的进制并不固定 xff01 例如说某种 X 进制数 xff0c 最低数位为二进制 xff0c 第二数位为十进制 xff0
  • WearOS复杂数据的刷新

    表盘可以通过setDefaultSystemComplicationProvider int watchFaceComplicationId int systemProvider int type 来设置要显示的系统复杂数据 一 系统支持哪
  • VMware下使用Gparted对系统盘扩容

    第一步 xff0c 下载Gparted的iso镜像文件 xff0c 这里对应下载相应的32或者64位版本 第二步 xff0c 设置虚拟机 xff0c 将硬盘容量扩容为指定的容量 xff0c 保存 第三步 xff0c 设置虚拟机 xff0c
  • Android系统深度游

    项目原因 xff0c 让我们必须深入探索Android系统 xff0c 完成对之前的我们来说比较艰巨的任务 这样 xff0c 我们开启了Android深度游 Android这个系统 xff0c 应用层开发还是比较舒服的 xff0c Goog
  • IT痴汉的工作现状56-耳鸣

    自从这个项目启动 xff0c 与客户方的沟通就逐渐多了起来 xff0c 沟通的方式是语音会议 也不知从什么时候起 xff0c 每天的会议时间变得很长很长 尤其是定位复杂问题时 xff0c 一个会议就要4个小时 张伟是从项目开始买的耳机 xf
  • 我的2020---熬过去

    恰逢周末 xff0c 本人自认为过了一个美好的圣诞节之后 xff0c 在深圳图书馆开始思考我的第十一个年终总结了 提笔之前 xff0c 我翻看了去年的总结 xff0c 想到了我还有一套书没有读完 xff0c 那就是 大败局 2020结束还有
  • 我的2022-工程师文化的思考

    没有想到 xff0c 今年大环境的变化可谓是大开大合 xff0c 超出想象 各行各业都遭到强大的挑战 xff0c 是泯灭还是苟活 xff0c 亦或是再创辉煌 xff0c 时也命也 在此情况下的个人 xff0c 最好的选择是跟公司抱团取暖 x
  • 用户名 不在 sudoers文件中,此事将被报告。

    继续昨天的故事 话说昨天新建了一个帐号linc xff0c 今天在执行sudo时回显一个很吓人的信息 xff1a sudo password for linc linc 不在 sudoers 文件中 此事将被报告 这是要去哪儿报告呢 xff
  • Git冲突:commit your changes or stash them before you can merge.

    今天用git pull来更新代码 xff0c 遇到了下面的问题 xff1a error Your local changes to the following files would be overwritten by merge xxx
  • Android问题集锦之二十八:You need to use a Theme.AppCompat theme (or descendant) with this activity.

    错误描述为 xff1a java lang IllegalStateException You need to use a Theme AppCompat theme or descendant with this activity 起因
  • Docker实践6:Cannot connect to the Docker daemon.

    正在免费适用着Aliyun主机 xff0c 当然要用docker来部署我的服务器啦 但是今天碰到了题目的问题 xff0c 细节如下 xff1a span class hljs comment docker info span FATA sp
  • DFS与BFS总结

    总结 bfs多用于在一次选择中可以有多种情况的选择 而dfs是确定唯一性如唯一路径 xff0c 也就是深度 当问题是全盘式的搜索 xff0c 不在乎形式或者具体情况呈现还是详细过程的 xff0c 使用bfs 当问题是要求具体过程 xff0c
  • 一个简单的自定义通信协议(socket)

    转自 xff1a http vtrtbb javaeye com blog 849336 这是转自javaeye的一篇文章 xff0c 作者是vtrtbb 按照网络通信的传统 xff0c 我们都会自定义协议 xff0c 这有很多好处 xff
  • ImageView 设置图片

    android doc中是这样描述的 xff1a public void setImageResource int resId 这是其中的一个方法 xff0c 参数resld是这样 xff1a ImageView setImageResou
  • Android问题集锦之八:调用其他程序中的activity和Permission Denial: starting Intent 错误解决办法

    今天想调试多个task中栈的情况 xff0c 在测试程序中调用另一个程序的activity xff0c 代码片段如下 xff1a btnStartX 61 Button findViewById R id btnStartX btnStar
  • VB.NET串口通信例子--我的回忆录

    这是我3年前的一个例子 xff0c 最近翻出来回忆一下 串口是计算机上一种非常通用设备通信的协议 大多数计算机包含两个基于RS232的串口 xff0c 现在配电脑好像只有一个 串口同时也是仪器仪表设备通用的通信协议 xff1b 很多GPIB
  • TensorFlowLite GPU加速

    官方文档 https tensorflow google cn lite performance gpu hl 61 zh cn TF LITE支持移动端GPU加速 xff0c 特别对android端的支持比较丰富 相对android来说