NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

谷歌发布 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:307544
用户头像
陈思 InfoQ编辑

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

关注

评论

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

图的遍历的定义以及深度优先搜索和广度优先搜索(一)

乔乔

7月月更

基础到高级涵盖11个技术,Alibaba最新出品711页Java面试神册真香

程序员小毕

Java 面试 程序人生 JVM 中间件

如何借助自动化工具落地DevOps|含低代码与DevOps应用实践

云智慧AIOps社区

开源 DevOps 低代码平台 开发与运维

浅谈云原生边缘计算框架演进

谐云

7月月更

有一说一,阿里P7的薪资待遇是真的香

程序员小毕

Java 程序员 程序人生 后端 架构师

2022最新最全Java面试八股文(整整1685页,14个技术栈,20余万字)

Java全栈架构师

Java spring 面试 JVM 消息中间件

netty入门之服务端启动过程分析

Hex

Java 后端 Netty

就这一次!详细聊聊分布式系统的那些技术方案

Java全栈架构师

程序员 面试 分布式 系统设计 架构师

MySQL精品学习资源合集 | 含学习教程笔记、运维技巧、图书推荐

墨天轮

MySQL 数据库 学习笔记 运维技术

基础+框架+数据库+系统设计+算法,2022阿里最新Java面试突击手册我粉了

Java永远的神

Java 数据库 spring 面试 JVM

TDengine 落地协鑫能科,数百亿数据压缩至 600GB

TDengine

数据库 tdengine 时序数据库

研发效能的道与术 - 道篇

FreeW

架构 研发效能

2022 云原生编程挑战赛火热报名中!看导师如何拆解 Serverless 赛题?

阿里巴巴云原生

阿里云 Serverless 云原生编程挑战赛

机器视觉在服务机器人中的应用

优必选科技

机器人

如何通过学会提问,成为更加优秀的数据科学家

Baihai IDP

AI 数据科学 职业发展

一文讲清楚SpringBoot六种读取配置方式

王小凡

Java 程序员 Sprint Boot

菜鸟 CPaaS 平台微服务治理实践

阿里巴巴云原生

阿里云 微服务 云原生 CPaaS 菜鸟

技术风向标 | 云原生技术架构成熟度模型解读

阿里巴巴云原生

阿里云 云原生 成熟度模型

公共数据如何兼顾开放利用和隐私安全合规?

Jessica@数牍

数据安全 隐私计算 公共数据开放 数据开放和利用

兆骑科创海外高层次人才引进平台,创业赛事活动路演

兆骑科创凤阁

高层次人才引进平台

Spark数据格式UnsafeRow

矛始

spark 内存 UnsafeRow

导数、微分、偏导数、全微分、方向导数、梯度的定义与关系

矛始

高数 导数 微分

[ Kitex 源码解读 ] 服务发现

baiyutang

Go 微服务架构 kitex CloudWeGo

融云直播 SDK 玩法翻新,入围信通院「实时互动创新应用优秀案例」

融云 RongCloud

直播 sdk

面试OPPO,16道题甩过来,我人傻了

Java永远的神

Java 程序员 面试 分布式 项目

如何组装一个注册中心

捉虫大师

注册中心 7月月更 后端启示录

6种方法帮你搞定SimpleDateFormat类不是线程安全的问题

华为云开发者联盟

高并发 开发

Spark统一内存划分

矛始

spark 统一内存

kudu设计-tablet

矛始

kudu tablet

极大似然估计

矛始

概率 极大似然估计

深圳云管平台厂商哪家好?有哪些功能?咨询电话多少?

行云管家

云计算 云管平台

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