端智能研发核心套件,MNN 工作台深度解析

开源地址:https://github.com/alibaba/MNN

背景

随着移动互联网的快速发展,人工智能在移动端上的应用越来越广泛,端智能在图像识别、视频检测、数据计算等核心场景发挥着重要作用。众所周知,Python 是算法进行端智能研发的首选语言,目前阿里巴巴内已经建立了端智能的研发生态,包含 Python 虚拟机,系列的数据/视觉等运行时 Python 扩展库、Python 任务调度库,以及配套的任务发布系统等等。

端智能的主要场景在数据计算、视觉内容理解这两个领域,如果算法研发完全在 PC 端的会简单的多,因为 PC 环境对于 Python 的研发有官方天然的支持,但在移动端上,进行算法的部署、调试、验证,仍处在“刀耕火种”的时代,目前算法主要通过两种途径:

  1. 日志调试:完全脱离运行时代码,通过在代码中插入日志,验证程序的运行逻辑和结果。

  2. PC 模型端侧环境:为了能够进行代码的断点调试,在 PC 侧搭建和安装端侧 Python 代码依赖的所有库,让 Python 程序能独立地运行和在和调试在 PC 端通用 IDE(如 PyCharm )上,数据输入则使用 Mock 的方式。

通过打日志当然也能验证结果和定位问题,但一旦工程稍微复杂点,生产效率会非常低;而脱离移动端环境,在 PC 侧独立运行,并不能反应真实的运行环境(实时数据、运行性能等),无法保证 PC 和端侧数据的一致性。

上面两种研发方式的主要问题是脱离了代码当前的运行环境,因而会产生调试信息的缺失。我们知道,每一种语言在开发者之间的流行都离不开配套的 IDE 调试工具,就像可以使用 Xcode 调试手机应用的 OC 代码一样,我们需要一种能真正进行端智能算法在端侧部署和调试的工具和方案,来提高 AI 研发生产效率。

9082484f881d295c2d96c3453782e945.png

MNN 工作台

MNN 是阿里巴巴开源的一个轻量级深度学习端侧推理引擎,核心解决深度神经网络模型在端侧推理运行问题,涵盖深度神经网络模型的优化、转换和推理。

开源地址:https://github.com/alibaba/MNN

除 MNN 引擎建设外,MNN 团队还深度参与了阿里内部的端AI应用实践。AI 应用门槛高、算法模型部署链路长是长期困扰我们的问题。为了解决这两个问题,我们将上百次实践中长期积累的方案沉淀为一站式 AI 研发范式 —— MNN 工作台。(www.mnn.zone 或点击文末阅读原文,下载 MNN 工作台)

MNN 工作台提供了端 AI 的研发范式,同时它也是一个对移动端 Python 的通用调试编辑器,工作台不仅包含标准的端侧 Python 调试能力,还覆盖了阿里集团内端智能算法常用的研发部署场景,是算法研发的效率工具。

73d22760366ae4573d3ae51478253f90.png

工作台提供了 VSCode 风格的 Python 集成开发环境,它的使用过程很简单,一般分为三步:

085042e885cc2891dc929cc554f49d13.png

  1. 建立连接:应用通过扫描工作台上的二维码,建立局域网内手机和PC的连接

  2. 代码推送:工作台上的工程通过局域网推送到端侧应用中

  3. 运行:端侧应用触发执行端侧 Python 代码,如果设置了断点,就可以进行端侧代码的调试了

a0aec2d7b015e9c820ad93ddae8f5abc.gif

  端计算研发

MNN 工作台同样为阿里内重要的端智能场景 - 端计算的研发提供了高效的本地调试部署方案,覆盖了 Walle/Jarvis、CV 这几个主要的端计算场景。

  • 研发流程

9a62d3a21279c6b4626f25188a401741.png

在此之前,端计算的研发是依赖于平台发布的,在开发阶段将调试日志加到代码中,通过预发/beta发布到平台,然后再扫码连接到平台将日志输出,通过日志来定位和分析问题,以此往复。这种方式相对比较原始,开发调试周期也比较长,一次修改或验证就是一轮上传发布的操作,而且调试信息只有日志,整体开发效率比较低。

68c15ec5981e1546078b9034bc88f05a.png

上图为算法使用工作台进行端计算研发的一般过程:

  1. 新建端计算工程,或打开从平台 clone 的端计算工程

  2. 应用扫码连接工作台,此时工作台中会实时输出算法的日志

  3. 在工作台 IDE 环境中开发代码,修改配置,添加资源

  4. 运行任务,此时任务会通过本地推送部署到端上。线上/预发环境都可以,任何代码都不会影响到线上,无需担心稳定性问题

  5. 代码断点调试、查看堆栈、变量等

  6. 工作台本地测试通过后,提交代码,再进行后续的平台发布操作

工作台有效解决了算法在开发阶段的调试部署问题,它的主要优势在于:

  1. 本地部署,开发阶段可以完全脱离平台

  2. 支持端计算工程的实时 Python 调试

  3. 端上部署不受预发/线上环境,或窗口期的限制

  4. 实时查看端侧算法的运行性能

  • 持久化调试

c450f909a7a7ac8d457fb04a341158af.gif

端计算任务的触发一般都是 UT,也有工程主动调用的,不管触发方式如何,代码只要推送一次,后面每次触发都会运行调试,除非代码有修改才需要重新推送,这就是工作台的持久化调试能力。

  • 实时日志

dcc3fa72a236c3735b1dd9350ba5181b.gif

工作台支持各种类型日志的实时打印,在设备与工作台连接成功后就可以开始使用,支持的日志类型包含:

  1. Current Task:本工程日志,包含本工程普通 print 日志和工程的运行日志

  2. Python:应用中所有的 Python 日志

  3. C:通过端计算提供的 C 接口打印的日志

  4. OC/Java:通过端计算中 Java/OC 接口打印的日志

  • 端文件浏览器

451ab2c56ed8ae9e00ab7c0ca33a4d0c.gif

端计算研发中,经常需要查看或处理设备的本地文件,如数据库文件、深度学习模型、资源图片、脚本等等。工作台中提供了可视化的设备文件浏览器,iOS 设备上可以查看应用的沙盒目录,Android 设备上的浏览和 Android Studio 一样,同时支持常用的目录/文件的本地保存和路径拷贝。

  • 依赖二方库联调

有时算法需要去查看依赖库代码的运行情况,工作台同样能支持依赖 Python 二方库的研发,本地部署时会将算法指定的依赖库和工程一起推送到端上,调试的时候也能断点到库代码中。

401f539ef3bc1606d27d1bcfa81a08cf.gif

上图展示了一个 Jarvis 工程依赖 Jarvis 基础库中的代码进行联调的过程,log.log 为 Jarvis 基础库中的打印方法。依赖二方库联调只影响到本工程,对其他工程不会产生任何影响。

  视觉内容理解研发

Walle/Jarvis 都属于端计算的数据场景,除此之外很大一部分算法处理的都是视频、图片,最常见的是摄像头/视频流输入、内存中的图片,典型的算法如图像分类、目标检测等,他们都是算法在计算机视觉(CV,Computer Vision)场景中的具体应用,简称视觉算法。

  • CV 部署方案

端计算框架为数据算法提供了丰富了 Python 运行时扩展库,算法可以基于这些库开发各种 Python 计算任务,然后部署在端上执行。而针对视觉场景,图片和视频流的处理一般都涉及到计算机视觉库 OpenCV 以及函数计算库 Numpy,之前的端侧 Python 运行时库中并不包含,所以算法在 PC 上使用 Python 开发的视觉算法并不能直接运行在端上,所以一般都是使用 SDK 集成的部署方式:

99aaf056100cbe33a83e92643e811814.png

算法使用 Python 在 PC 环境开发,通常都会基于 OpenCV/Numpy 等基础库,移植到端上时,虽然端上这些基础还未支持,但可以通过一些方式转换为类似的 C/C++ 实现,如格式转换使用 MNN CV 替换 OpenCV 的实现,同时也要针对端侧的运行环境做一些性能优化。后面蓝色的部分都需要工程同学深度参与,封装 Android/iOS 上的 SDK,然后搭建本地的 Demo 应用验证,再集成到应用中。

其主要缺点在于:

  1. 视觉算法需要针对端侧部分重新实现和优化,成本较高

  2. 算法严重依赖工程协作,工程维护SDK的成本也比较大(以算法为核心的SDK)

  3. 算法的测试验证需要让工程开发App Demo,且算法一般不能直接在手淘等应用环境中测试算法代码

  4. 发布后一旦出现缺陷,无论是算法还是工程问题,迭代周期依赖应用的版本计划,一般超过1周

MNNKit 就是视觉算法最典型的 SDK 集成方式。

a6d87802b81dc8f12d619f51b6cc438b.png

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
nQoGik-1712497221709)]

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值