TensorFlowLite GPU加速_最爱吹吹风的博客-程序员宅基地

技术标签: C++  tensorflow  神经网络  TensorFlowLite  

官方文档: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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/linfengmove/article/details/110492938

智能推荐

Jedis源码分析(三)-JedisCluster的内部实现_liuqinen的博客-程序员宅基地

Jedis源码分析共有四个章节,以下为各章链接:Jedis源码分析(一)-Jedis介绍 Jedis源码分析(二)-Jedis类结构及实现 Jedis源码分析(三)- JedisCluster类结构及实现 Jedis源码分析(四)-JedisSentinel与ShardedJedis介绍1 JedisCluster的内部结构首先看一下JedisCluster的类结构,为橘色标志为核...

LVS安装配置_weixin_34125592的博客-程序员宅基地

LVS安装部署一、LVS安装(CENTOS)1、LVS模块ip_vs已经内置在LINUX内核中,一般情况下ip_vs并没有启动,可以通过lsmod|grepip_vs查看,能够看到信息表示模块已经加载,否则用modprobeip_vs来启动。2、192.168.0.156/200/201上都启动ip_vs模块。二、VIP服务器IPVSADM安装1、...

soap是什么东西?_weixin_30713953的博客-程序员宅基地

soap是什么东西呢?刚刚接触程序的程序员一定会问这么一堆名词都是什么呢?也许你有基础的可能这些你早就明白了,但是像我这样不是计算机专业半路转行的程序员们是一定会问的。让我们一步一步学习稳扎稳打,共同进步吧。简单对象访问协议SOAP即简单对象访问协议。简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在...

C语言中兴面试编程题,中兴一套笔试题及部分答案_西从南来的博客-程序员宅基地

A 、适用于最大似然准则B 、适用于最小似然准则C 、适用于似然比判决准则D 、适用于最大差错概率准则3、下面关于源端口地址和目标端口地址的描述中,正确的是(A )A 、在TCP/UDP 传输段中,源端口地址和目的端口地址是不能相同的B 、在TCP/UDP 传输段中,源端口地址和目的端口地址必须是相同的C 、在TCP/UDP 传输段中,源端口地址和目的端口地址是可以相同的D 、以上描述均不正确4、...

计算机死亡公式,半数致死量及其计算方法概述.pdf_StevenConan的博客-程序员宅基地

2009年 12月第 36卷第 6期 C h in O ccup M ed, December, 2009, Vo.l 36, No. 6 # 507#: 1000- 6486(2009) 06- 0507- 03 ...

利用IPSec安全策略阻断内网违规外联(一)_weixin_34072458的博客-程序员宅基地

这是本人根据相关资料改写的一篇论文,发表在自家学校的学报上,有需要的朋友可供参考,pdf文档下载地址:http://down.51cto.com/data/1430027 在某些企业中出于安全目的建设了信息内、外网两套物理隔离网络系统,与生产相关的重要应用均在信息内网中运行。由于用户终端数量众多,员工使用习惯各异,不可避免的存在内网终端违规外联的情况,导致企业重要机密外泄风险可能性大大提高。违规外...

随便推点

Unity3D_(插件)小地图自刷新制作Minimap小地图_weixin_30832405的博客-程序员宅基地

  制作小地图:小地图自刷新制作小地图  原理:用不同的图标表示场景中不同的游戏物体,将(场景中)游戏物体位置实时放置小地图上,并控制图标的位置更新   好处:可更好控制小地图上所需要显示的游戏物体  游戏项目已托管到Github上:  传送门  使用Camera渲染制作Minimap小地图:  传送门小地图效果(不足:并未对超出地图中的物...

《构建高可用VMware vSphere 5.X虚拟化架构》——1.4 使用ESXi主机配置文件_weixin_34233618的博客-程序员宅基地

本节书摘来自异步社区《构建高可用VMware vSphere 5.X虚拟化架构》一书中的第1章,第1.4节,作者:何坤源著,更多章节内容可以访问云栖社区“异步社区”公众号查看1.4 使用ESXi主机配置文件1.4.1 ESXi主机配置文件介绍ESXi主机配置文件可以理解为一个自动应答文件,当ESXi主机配置完成后,可以将配置以文件形式导出,通过vCe...

【转】完整精确导入Kernel与Uboot参与编译了的代码到Source Insight,Understand, SlickEdit..._weixin_30216561的博客-程序员宅基地

The linux kernel and u-boot contains lots of files, when we want to broswe the source code,we just want to see these compiled files, and the header files which required. So this script in this repo ...

DELL服务器远程控制组件BMC设置及应用_十年壹剑的博客-程序员宅基地

设置方法:网线一定要插到1号口,因为只有插到1号口远程管理才管用,当时操作体统的ip地址也要设置在1号口上.启动机器,然后机器开始自检,要特别注意屏幕上的提示,等出现有BMC 字样的或者让按  CRTL + E 的时候,马上按  CRTL + E 进入设置界面进入管理界面之后设置如下1  将蓝色的光条移动到 IPMI Over LAN  选项,敲空格键,此时

localStorage保存账号密码_weixin_34055787的博客-程序员宅基地

&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maxim...

推荐文章

热门文章

相关标签