热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PyTorchMobile在端侧可堪大用?能否与TensorFlowLite一较上下

田海立CSDN2020-11-07PyTorch在1.3发布PytorchMobile,其支持情况如何,能否与TensorFlowLite一较上下呢&

田海立@CSDN 2020-11-07

PyTorch在1.3发布Pytorch Mobile,其支持情况如何,能否与TensorFlow Lite一较上下呢?本文试分析之。PyTorch Mobile的宣传显得要么诚意不足要么对行业领悟不够。目前只能说是有Mobile这个路在而已,与TFLite比不可同日而语,至少目前的实现是。相对于Google移动端的既有Android生态布局,Facebook有其苦衷,要坚守其生态底线又要放弃次要考量去适配NNAPI才是其捷径。

 


一、历史

Facebook历史上,在Caffe2中号称设计之初就为移动部署考虑的,笔者也跟踪了几年,发现Caffe2对NNAPI的支持还是3年前提交过代码,也只是对几个最常用算子做了适配,几乎是无所作为,当然显然Caffe2目前也基本是被废弃的状态。现在PyTorch实现Mobile支持,特别是PyTorch作为训练(模型)框架,已占主导地位,当然关注其在移动领域的表现。

关注AI移动领域的读者应该有所了解,其实TensorFlow最初对移动的支持是通过TensotFlow Mobile,之后才是重新实现的TensorFlow Lite。

 


二、PyTorch Mobile

据PyTorch Mobile网站介绍,处在Beta阶段,待API稳定之后,很快会推出稳定版。Feature包括:


  • 为ios,Android,Linux提供支持;
  • 提供API,涵盖将 ML 集成到移动应用中所需的常见预处理和集成任务;
  • 通过TorchScript IR支持tracing与scripting;
  • 支持 XNNPACK为ARM CPU上执行浮点运算;
  • 集成QNNPACK 支持INT8量化内核库,可支持per-channel量化、动态量化以及其他方式;
  • 根据用户的应用需求进行构建级别的优化和选择性编译,也就是根据应用如用的模型里的算子可定制选择算子从而改变最终编译出目标程序的尺寸;
  • GPU/DSP/NPU等backends会在后续支持

典型工作流程:

与别的推理框架其实并没大的差别:


  1. 把训练出的模型进行量化(可选)
  2. 模型转换:pt(TorchScript)
  3. 优化(可选)
  4. 保存
  5. 部署到终端上执行

只是,上述1~4步骤中在Host上完成;步骤5在手机或别的边缘设备上部署。别的方案把这些都交代清楚了而已。

 


三、PyTorch Mobile前景

PyTorch Mobile目前发布的信息可以说是没什么特别的新意,本来就在移动端落后了TensorFlow很多,也可以理解。

不过,有些说法就让人觉得要么真的跟产业离的太远,不知道端侧设备的痛点在哪,要么诚意不足!

看Facebook所宣传的PyTorch Mobile的“卖点”:


  • No new framework
  • No model conversion
  • No operator porting

No new framework:已经转换了模型了,在端侧设备上执行pt模型了还说是没有新的Framework,应该是有一个端侧Runtime的东西在运行,什么量级的才叫Framework呢?刻意隐藏不告诉普通开发者而已。

No model conversion:变成pt TorchScript模型了不是模型转换吗?而且将来有NPU/GPU/DSP支持没有模型转换或编译的存在才怪。也还是偷换概念。

No operator porting:这点还没有深入看实现,不好说做没做。不过知道TensorFlow Mobile到TensorFlow Lite发展变化历程的都知道,这可能不是卖点,而是还没get到痛点。TensorFlow Mobile是挑选了一些TF的算子做了个c++的推理,但是尺寸和运行速度都是端上设备最关注的,所以才后来全部重写算子,重新实现而成的TFLite。当然,可能PyTorch Mobile也是重写了的,只是不宣传,隐藏起来而号称的。

如果与TFLite的现状比,PyTorch Mobile只能说是有Mobile这个路在而已,不可同日而语,至少目前的实现是

边缘设备更关注的是Latency、功耗、隐私等,所以对加速器的支持更重要:


  • TFLite里对GPU通过Delegate机制支持;
  • TFLite对Qualcomm Hexagon提供Delegate机制支持;
  • TFLite对通过NNAPI Delegate对所有NN Device(GPU/DSP/NPU)提供支持

PyTorch Mobile还没看到这部分的实现。

 


四、总结

显然与Google不会加入ONNX一样,Facebook的PyTorch也不会提供模型转换或适配的方式转换到Google的TensorFlow生态。而是守住自己生态内的这条底线的情况下,尽量支持边缘设备。

Google手里有Android,耕耘了这么多年,对移动端/边缘设备端的理解和生态布局不是Facebook所能比拟的。PyTorch Mobile如果把竞争对手瞄准TensorFlow Lite,不要针对AndroidNN(NNAPI),积极拥抱去适配NNAPI,倒是推动AI设备支持的捷径。AndroidNN诞生之初的定位本就是与上层ML Framework配合,不假定上层ML Framework一定是TFLite,这也刚好契合。

 


推荐阅读
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 本文介绍了 Python 中的基本数据类型,包括不可变数据类型(数字、字符串、元组)和可变数据类型(列表、字典、集合),并详细解释了每种数据类型的使用方法和常见操作。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 依然最钟爱《People Have the Power》,强烈推荐大家聆听这首经典之作
    尽管今日情绪低落,我在音乐库中反复筛选,最终还是选择了《People Have the Power》来激励自己。这首歌不仅旋律动听,歌词也充满力量,能够带给人正能量。强烈建议大家找来聆听,体验其独特的魅力。《People Have the Power》虽然不是出自专辑《Horses》,但同样是一首不可多得的经典之作。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 深入理解排序算法:集合 1(编程语言中的高效排序工具) ... [详细]
author-avatar
请让我来打酱油
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有