【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

谷歌发布 TensorFlow Lite 预览版,推理速度提升 4 到 6 倍

  • 2019-01-17
  • 本文字数:2969 字

    阅读完需:约 10 分钟

谷歌发布TensorFlow Lite预览版,推理速度提升4到6倍

TensorFlow 团队近日在博客上发布了 TensorFlow Lite 开发者预览版,据介绍,新的版本可以让模型推理速度提升至原来的 4~6 倍。


以下为博客全文


由于设备的处理和能力有限,在移动设备上的计算密集型机器学习模型上运行推理,对资源的要求很高。虽然转换为定点模型是一种加速的方法,但我们的用户已经要求我们提供 GPU 支持作为加速原始浮点模型推理的选项,且不增加量化的额外复杂性和潜在的准确性损失。


我们很高兴地宣布,随着 TensorFlow Lite GPU 后端开发者预览版的发布,你将能够利用移动 GPU 来选择模型训练(如下所示),对于不支持的部分,将自动使用 CPU 进行推理。在未来的几个月里,我们将继续增加额外的操作系统,并改善 GPU 整体的后端产品。


新的后端利用了:


  • OpenGL ES 3.1 在 Android 设备上计算着色器

  • iOS 设备上的金属计算着色器


今天,我们发布了新的 GPU 后端的预编译二进制预览版,让开发人员和机器学习研究人员可以尽早尝试这种令人兴奋的新技术。我们计划在 2019 年晚些时候发布一个完整的开源版本,包含我们从开发者的经验中收集的反馈。



目前 TensorFlow Lite 仍使用 CPU 浮点推断进行人脸轮廓检测(非人脸识别)。未来我们会利用新的 GPU 后端,可以将 Pixel 3 和三星 S9 的推理速度提升 4~6 倍。

GPU 与 CPU 性能

我们已经在谷歌的产品中进行了几个月新的 GPU 后端测试,加速了计算密集型网络,为我们的用户提供了重要的用例。


对于 Pixel 3 的人像模式,Tensorflow Lite GPU 让前景-背景分割模型的速度提高了 4 倍以上,新的深度预估模型的推理速度提高了 10 倍以上,同时还对 CPU 推理浮点精度提高。在 YouTube 上的 YouTube Stories 和 Playground Stickers 中,实时视频分割模型在各种手机上的测试加速 5~10 倍。


我们发现,对于各种深度神经网络模型,新的 GPU 后端通常比浮点 CPU 速度快 2~7 倍。我们对 4 个公共模型和 2 个内部模型进行了基准测试,涵盖了开发人员和研究人员在一系列 Android 和 Apple 设备上遇到的常见用例:


公共模型:


1.MobileNet v1 (224x224)图像分类


(基于移动和嵌入式视觉应用的图像分类模型)


2.用于姿态估计的PoseNet


(图像或视频中估计人体姿势的视觉模型)


3.DeepLab分割(257x257)


(图像分割模型,将语义标签(如狗、猫、车)分配给输入图像中的每个像素)


4.MobileNet SSD对象检测


(检测带有边框的多个对象的图像分类模型)


谷歌专有用例:


1.MLKit


2.实时视频分割



表 1:在 GPU 上的平均性能提高,相比之下,在不同的 Android 和 Apple 设备上的 6 种型号的基准 CPU 性能均有提升。


在更加复杂的神经网络模型上 GPU 加速效果最显著,这些模型本身更有利于 GPU 的利用,例如密集的预测/分割或分类任务。在小型模型中,加速效果效果可能略差,但 CPU 的使用可以降低内存传输固有的延迟成本。

如何使用?

教程

最简单的入门方法是按照我们的教程使用带有 GPU 委托的 TensorFlow Lite 演示应用程序。下面简要介绍了这种方法。有关更多信息,请参阅我们的完整文档:https://www.tensorflow.org/lite/performance/gpu_advanced。

使用 Java for Android

我们已经准备了一个完整的 Android 存档(AAR),包括带有 GPU 后端的 TensorFlow Lite。编辑 gradle 文件替换当前版本,以包含这个 AAR,并将此代码片段添加到 Java 初始化代码中。


// Initialize interpreter with GPU delegate.GpuDelegate delegate = new GpuDelegate();Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);Interpreter interpreter = new Interpreter(model, options);
// Run inference.while (true) { writeToInputTensor(inputTensor); interpreter.run(inputTensor, outputTensor); readFromOutputTensor(outputTensor);}
// Clean up.delegate.close();

复制代码

使用 C ++ for iOS

步骤 1.下载 TensorFlow Lite 的二进制版本。


步骤 2.更改代码,以便在创建模型之后调用 ModifyGraphWithDelegate()。


// Initialize interpreter with GPU delegate.std::unique_ptr<Interpreter> interpreter;InterpreterBuilder(model, op_resolver)(&interpreter);auto* delegate = NewGpuDelegate(nullptr);  // default configif (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
// Run inference.while (true) { WriteToInputTensor(interpreter->typed_input_tensor<float>(0)); if (interpreter->Invoke() != kTfLiteOk) return false; ReadFromOutputTensor(interpreter->typed_output_tensor<float>(0));}
// Clean up.interpreter = nullptr;DeleteGpuDelegate(delegate);

复制代码

如何加速?

GPU 后端目前支持 select 操作(请参阅文档)。当只包含这些操作时,你的模型运行速度将最快;不支持的 GPU 操作将自动退回到 CPU 进行操作。

它是如何工作的?

深度神经网络按顺序运行数百个操作,这使得它们非常适合针对吞吐量的并行工作负载而设计的 GPU。


Objective-C++可通过调用 Interpreter::ModifyGraphWithDelegate(),或者通过 Interpreter.Options 间接调用 Interpreter 的构造函数来初始化 GPU。在初始化阶段,基于从框架接收的执行计划,构建输入神经网络的规范表示。使用此新表示,可应用一组转换规则,包括但不限于:


  • 剔除不需要的 ops

  • 将 ops 替换为性能更好的等效 ops

  • 合并 ops,以减少最终生成的着色程序的数量


基于此优化图(optimized graph),生成并编译计算着色器。我们目前在 Android 上使用 OpenGL ES 3.1 计算着色器,在 iOS 上使用 Metal 计算着色器。在创建这些计算着色器时,我们还采用了各种特定于体系结构的优化,例如:


  • 进行某些操作特殊化而不是较慢的通用实现

  • 释放寄存器压力

  • 选择最佳工作组大小

  • 安全地调整精度

  • 重新排序显式数学操作


在这些优化结束后,编译着色程序可能需要几毫秒到半秒,就像手机游戏一样。一旦着色程序编译完成,新的 GPU 推理引擎就可以开始工作了。


在推断每个输入时:


  • 如有必要,输入将移至 GPU:如果输入张量还没有存储为 GPU 内存,那么通过创建 GL 缓冲区/texture 或 mtlbuffer(同时还可能复制数据),GPU 可以访问输入张量。由于 GPU 在 4 通道数据结构中效率最高,因此通道大小不等于 4 的张量将被重新塑造成更适合 GPU 的布局。

  • 执行着色器程序:将上述着色器程序插入命令缓冲区队列中,GPU 将这些程序输出。在这一步中,我们还为中间张量管理 GPU 内存,以尽可能减少后端的内存占用。

  • 必要时将输出移动到 CPU:一旦深度神经网络完成处理,框架就会将结果从 GPU 内存复制到 CPU 内存,除非网络的输出可以直接在屏幕上呈现,不需要这样的传输。

  • 为了获得最佳体验,我们建议优化输入/输出张量副本和/或网络架构。有关此类优化的详细信息,可以在TensorFlow Lite GPU文档中找到。有关性能最佳实践,请阅读本指南

它有多大?

GPU 委托将为 Android armeabi-v7a APK 增加 270KB 的内存,为 iOS 增加 212KB 的内存。但后端是可选的,因此,如果不使用 GPU 委托,就不需要包含它。

未来的工作

这只是我们 GPU 支持工作的开始。除了社区反馈外,我们还打算进行以下改进:


  • 扩大运营范围

  • 进一步优化性能

  • 发展并最终确定 API


我们欢迎你在GitHubStackOverflow页面上留下你的想法和评论。


原文链接:


https://medium.com/tensorflow/tensorflow-lite-now-faster-with-mobile-gpus-developer-preview-e15797e6dee7


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-01-17 14:307541
用户头像
陈思 InfoQ编辑

发布了 576 篇内容, 共 262.5 次阅读, 收获喜欢 1293 次。

关注

评论

发布
暂无评论
发现更多内容

本地文件搜索查找器Find Any File (FAF) for Mac激活版

iMac小白

Python陷阱-如何安全地删除列表元素?

这我可不懂

Python

软件测试/测试开发全日制|Pytest结合yaml实现数据驱动

霍格沃兹测试开发学社

SpringBoot3 WebFlux 可观测最佳实践

观测云

链路追踪 spring boot3

软件测试/测试开发全日制培训|Pytest的异常处理

霍格沃兹测试开发学社

悦数图数据库助力电信运营商宽带业务提效

悦数图数据库

图数据库

CUDA驱动深度学习发展 - 技术全解与实战

EquatorCoco

人工智能 机器学习 深度学习 大数据

推荐收藏!10大程序员必备生产力工具

EquatorCoco

软件测试/测试开发/全日制/测试管理丨Allure测试报告特点与优势

测试人

软件测试

低代码——面向程序员,帮助程序员敏捷开发

高端章鱼哥

低代码 开发平台 JNPF

软件测试/测试开发/全日制/测试管理丨Pytest常用插件

测试人

软件测试 自动化测试 测试开发 pytest

2023 IoTDB Summit:天谋科技高级开发工程师张金瑞《筑其形:如何轻松搞定 IoTDB 数据建模》

Apache IoTDB

星耀新春,集星探宝,卡奥斯开源社区双节活动上线啦!

Openlab_cosmoplat

开源 活动

外贸企业为何要选择Yandex推广?

九凌网络

图扑物联 | WEB组态可视化软件

图扑物联

工业物联网 web组态软件 智慧污水处理 web scada 云组态

每日一题:LeetCode-198. 打家劫舍

半亩房顶

面试 算法 LeetCode 动态规划 滚动数组

如何保护linux服务器远程使用的安全

德迅云安全杨德俊

SSH 远程

软件测试/测试开发全日制|Pytest结合Excel实现数据驱动

霍格沃兹测试开发学社

Simplemind pro for Mac(mac上的思维导图软件)v2.3.0中文版下载

iMac小白

BOE(京东方)位列2023 IFI专利授权排行榜全球第15位 创新驱动引领中国科技再飞跃

科技热闻

需要监控的五个主要加密货币趋势

区块链软件开发推广运营

区块链开发 链游开发 NFT开发 公链开发

低代码开发的困境与解药

SoFlu软件机器人

从像素到洞见:图像分类技术的全方位解读

不在线第一只蜗牛

机器学习 深度学习 图像 项目开发

专业医学绘图工具prism for Mac v10.1.1激活版下载

iMac小白

直播预告丨看零售场,如何玩转 MaaS

京东科技开发者

这些常见的python编码习惯,你都会吗

不在线第一只蜗牛

Python 编码 开发语言

Kubernetes Pod配置:从基础到高级实战技巧

互联网工科生

Kubernetes

EasyMR:为 AI 未来赋能,打造弹性大数据引擎的革命

袋鼠云数栈

AI 计算引擎 弹性计算 弹性伸缩

知识图谱系统在人工智能领域的应用与前景

悦数图数据库

图数据库

软件测试开发/全日制/测试管理丨Python 开发者的首选工具PyCharm

测试人

虾皮API在电商营销活动中的应用与创新

技术冰糖葫芦

API

谷歌发布TensorFlow Lite预览版,推理速度提升4到6倍_AI&大模型_TensorFlow团队_InfoQ精选文章