Jarvis-拍立淘里面的深度学习引擎-之持续优化

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
推荐全链路深度定制开发平台,高级版 1个月
OpenSearch LLM智能问答版免费试用套餐,存储1GB首月+计算资源100CU
简介: 介绍 Jarvis是一款专门为手机端而设计研发的深度学习引擎,它比我们目前已知的所有开源产品都要快。在使用高通芯片的安卓手机上,其他产品在性能上甚至还没有接近于我们的。小小骄傲一下。在最开始的时候,Jarvis was heavily influenced by Caffe2 and borrowed quite a bit of code from it. 但是随着时间的推移以及业务的演进,Jarvis离Caffe2也越来越远,所以,我们最终决定发布独立的产品。

介绍

Jarvis是一款专门为手机端而设计研发的深度学习引擎,它比我们目前已知的所有开源产品都要快。在使用高通芯片的安卓手机上,其他产品在性能上甚至还没有接近于我们的。小小骄傲一下。在最开始的时候,Jarvis was heavily influenced by Caffe2 and borrowed quite a bit of code from it. 但是随着时间的推移以及业务的演进,Jarvis离Caffe2也越来越远,所以,我们最终决定发布独立的产品。

Jarvis由淘宝的 拍立淘 业务而生,已持续稳定服役一年。

性能

距离上次介绍Jarvis又过去了三个月的时间,现在的Jarvis相比之前又有了很多进步,在端上承载的拍立淘业务也逐渐增多。不知不觉间,Jarvis已经成为了最快的那一款。之前我们的CPU实现比ncnn要慢,现在已经超过了。而GPU的实现在之前的高起点上又有了更大的提高,之前GPU的性能大约是ncnn的两倍,现在已经到了4倍。

在下表中,我列出了几款常见的端上深度学习引擎的SqueezeNet耗时(毫秒)对比。

Jarvis(GPU) Jarivs(CPU) Caffe2(Facebook) ncnn(Tencent) mdl(Baidu)
Samsung S8 30 80 110 120 150
Huawei P10 - 110 160 140 180
iPad pro 23 56 140 65 -
iPhone 6sp 35 58 160 80 -

在我们测试几款高中低端手机上,Jarvis的CPU实现的性能表现都是最好的。GPU就不用说了。

下面这幅图是在Samsung S8上,换算成FPS(每秒处理图片数)的对比结果。

TB1XjMLXGmWBuNjy1XaXXXCbXXa-822-621.png

使用

编译打包

已经随源码一起提供了预编译包,参考目录里面的android和iOS demo工程。也可以使用里面的工程自己编译打包。

模型生成

为了平衡性能、包大小以及便利程度,Jarvis采用flatbuffers作为模型文件格式。

示例里面带有SqueezeNet和MobileNet两个已经生成好的model,tools目录下面有转化caffe和caffe2模型的工具。

如果需要,你也可以可以使用C++,包含public目录下的schema_generated.h头文件通过代码动态生成模型。

当然,你也可以使用Objective-C++来包含这个文件。事实上,如果你想,你甚至可以根据schema.fbs文件生成Java类来做同样的事儿。

API

Jarvis提供了android(Java),iOS(Objective-C)和C++三套API,都很简单。Jarvis在设计时已尽量屏蔽掉烦人的东西,而只提供给你极速的体验。

查看一下Java类,Objective-C interface或者public目录里面的header file,即可知道Jarvis为数不多的API了。

android

// 构建网络,modelBuffer是包含jarvis模型文件的ByteBuffer
Session session = new Session(modelBuffer);

// Where amazing happens, jarvis会根据网络配置的输入大小对testBitmap做缩放
Tensor[] results = session.inference(testBitmap);

// 得到结果
float[] values = results[0].readFloats();


// 更通用的调用方式
Tensor input = session.input(0);
float[] data = new float[input.size()];
// put some values...
input.write(data);
// run
session.inference();
// got result
Tensor output = session.output(0);
float[] results = output.readFloats();

iOS

// model是包含模型的NSData *
JVSSession *session = [[JVSSession alloc] initWithModel:model];
NSArray<JVSTensor *> *results = [session inferenceWithImage:testImage];

C++

std::unique_ptr<jarvis::Session> session(new jarvis::Session(model_buffer));
auto results = session->inference_rgba(p_rgba, width, height, stride);

目前我们在运行的业务

  1. 用户行为特征端上实时计算
  2. 拍立淘活动页面扫商品/logo抠图
  3. 拍立淘多主体拍照识别和智能识别

这一阶段我们所完成的工作

  1. 性能优化,iOS和Android都有较大提升
  2. 统一了iOS和Android的基础代码
  3. 完善了caffe model的转化工具
  4. 多数据类型支持,现在已经可以运行float32和float16网络
  5. 更多的线上业务

接下来的安排

  1. int8的支持,下一个必需攻克的难关。有了它,安卓低端机无忧
  2. Mali GPU优化,能达到和高通GPU同样的水平吗
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
3月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品加工优化的深度学习模型
使用Python实现智能食品加工优化的深度学习模型
249 59
|
4月前
|
机器学习/深度学习 边缘计算 人工智能
探讨深度学习在图像识别中的应用及优化策略
【10月更文挑战第5天】探讨深度学习在图像识别中的应用及优化策略
88 1
|
4月前
|
机器学习/深度学习 数据采集 算法
深度学习之路径优化与车辆调度
基于深度学习的路径优化与车辆调度技术在交通管理、物流配送、公共交通、共享出行等领域具有重要应用价值。这些技术利用深度学习模型处理复杂的交通数据、实时信息以及用户需求,旨在提高运输效率、降低成本、减少拥堵并提升服务质量。
149 0
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
341 63
|
4月前
|
机器学习/深度学习 数据采集 TensorFlow
智能市场营销策略优化:使用Python实现深度学习模型
【10月更文挑战第1天】 智能市场营销策略优化:使用Python实现深度学习模型
227 63
|
3月前
|
机器学习/深度学习 数据采集 人工智能
探索人工智能中的深度学习模型优化策略
探索人工智能中的深度学习模型优化策略
127 13
|
3月前
|
机器学习/深度学习 数据采集 运维
使用 Python 实现深度学习模型:智能食品生产线优化
使用 Python 实现深度学习模型:智能食品生产线优化
81 13
|
3月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
112 8
|
3月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品供应链优化的深度学习模型
使用Python实现智能食品供应链优化的深度学习模型
69 8
|
3月前
|
机器学习/深度学习 数据采集 算法
深度学习中的模型优化策略
在深度学习的海洋中,模型优化是提升航船速度的关键。本文将探讨如何通过调整学习率、应用正则化技术以及利用先进的优化算法来提高深度学习模型的性能。我们将从简单的线性回归模型入手,逐步深入到复杂的卷积神经网络,展示如何在实践中应用这些优化策略,以期达到更好的泛化能力和计算效率。