前不久,2022 OPPO开发者大会刚刚结束,OPPO在高性能异构计算领域,相较去年对于算力提升的追求,今年OPPO重点发力探索跨不同处理器的新型软件执行。比方,全部2D游戏图层渲染工作已经从GPU迁移到DSP,实现在GPU处理关键任务的同时,保证游戏的高性能运行。
此外,OPPO针对目前行业存在的业务场景复杂、推理框架效率不足、性能和功耗不稳定等痛点,OPPO 希望充分利用软硬件资源,通过多芯协作,提升系统流畅性并降低功耗,实现多样适配。基于此,OPPO在发力高性能异构计算之初就确立了覆盖算法、芯片、产品的全面布局。
ODC22上,OPPO发布了名为ShaderNN(https://github.com/inferenceengine/shadernn)的移动端开源深度学习推理框架,并且已经在Github开源,采用Apache License 2.0。我们先来看一下benchmark。后面我们会再次重新介绍。
图1 ShaderNN主页标志
1. benchmark:与TensorFlow Lite的性能与功耗对比
目前不少文档部分的内容还是空的,如benchmark等等,都是写的Coming soon,但是在其他地方找到一些性能数据。
- 模型:Spatial Denoise, ESPCN, Resnet18,YOLO V3 Tiny
机型:
- Dimensity 1300(MT6893)gpu:Mali G77
- Dimensity 9000(MT6983)gpu:Mali G710
- Snapdragon 888(SM8350)gpu:Adreno 660
- Snapdragon 8 Gen1(SM8450)gpu:Adreno 730
图2 与TensorFlow Lite的功耗对比:天玑1300(mali G77)、天玑9000(mali 710)、骁龙888(Adreno 660)、骁龙8Gen1(Adreno 730)
图3 与TensorFlow Lite的性能对比
2. ShaderNN是什么
ShaderNN作为OPPO在业内算是继NCNN、MNN后专注于移动端图形着色器、图像后处理的卷积神经网络AI应用的开源轻量推理框架,具备通用性、高性能、可移植性、可扩展性四大优势,不仅在推理时间上大幅超越业内的性能竞品,在平均功耗方面同样取得领先。未来,ShaderNN将深度集成到OPPO自研的AI Boost框架中,在更多场景中落地应用。
这里插播一下关于OPPO自研的AI Boost框架,曾在2020年的OPPO开发者大会提到过,OPPO AI 开放能力主要包含 AIUnit 算法引擎和 AI Boost 模型推理加速框架。AIUnit 来帮助应用开发者更好地开发 AI 功能,而 AI Boost 可以帮助开发者部署算法到移动端。
AIUnit 引擎能力提供了视觉算法、视频算法、音频算法、感知算法四大方向的能力建设,能够向应用开发者提供人工智能算法 API,使应用开发者高效地编写用于在移动设备上运行的 AI 应用程序。目前,AIUnit 已经应用于 ColorOS 系统相册、视频编辑、音频及感知等相关应用中,如系统相册的老照片修复、人脸聚类能力、视频增强能力、铃声编辑能力等。
AI Boost 作为面向移动端的 AI 模型加速框架,借助 OPPO 终端强大的硬件计算资源,可有效帮助 AI 算法研究者将算法模型快速部署到 OPPO 终端设备上,最大限度地提供端侧 AI 加速能力。在 ETH 瑞士苏黎世大学 AI Benchmark 的评测平台上(https://ai-benchmark.com/),借助 AI Boost,平台效能可提升 23-33%;在高通和 MTK 同芯片平台的产品中均优化达到了业界最佳表现,对标准的模型效能提升了 30% 左右。
ShaderNN基于OpenGL片段和计算着色器,实现与原本渲染任务无缝衔接的模型推理。已支持基于OpenGL的卷积网络模型和算子,且内部已有很多应用落地,目前的工作在添加基于Vulkan计算着色器的后端的推理能力。
图4 ShaderNN推理的工作流程
与其他大多数推理框架一样,使用过程是在训练完成后得到模型,针对其做模型转换和算子融合,转换过程会将TF、PyTorch模型转换为ONNX中间格式,并将它们进一步转换为ShaderNN JSON格式。当然中间有算子融合的过程。
图5 ShaderNN的应用场景:光线追踪去噪、超分辨率采样、HDR、风格迁移
在加载完模型后,会对计算图做拓扑排序,Shader完成对计算图的算子执行。推理优化分为两部分:
- 编译优化:Shader代码的编译与缓存,类似OpenCL可以提前准备好算子的Binary文件;
- 运行优化:卷积选择、纹理重用(目测就是in-place计算),CPU和GPU内存重用(Zero Copy),数据排布优化选择,向量化等特性。
运行优化的过程因为本身可能应用是图形图像任务,可以直接操作纹理数据,无需对其进行从其他非GPU后端的数据拷贝、格式转换等。利用GPU的原生纹理数据作为输入,省去中间拷贝时间。
图6 Programmable Graphics Pipeline
可编程的Graphics Pipline主要是Vertex shader和fragment shader,使用OpenGL可以在运行时编译和链接着色器程序,这些程序将会加载到GPU。然后,将根据运行时的需要在GPU上的核心上执行。
管道的第一阶段是顶点着色器。它接收顶点流作为输入。这些顶点将是某些形状或对象的顶点绘制到屏幕上,顶点着色器将对顶点做变换如旋转或缩放。变换后的顶点将会被组成为形状,通常是三角形,来形成物体表面。
在之后,这些三角形会以特定的视角被栅格化,即像素化,这些像素或片段会再传递给片段着色器,该着色器将在像素中着色通常使用可以映射到对象上的纹理或图像,之后被推入帧缓冲器,最后被绘制到屏幕上。
3. ShaderNN的架构实现与特点
图7 ShaderNN实现架构图:刨除模型准备与算法应用层,中间推理引擎部分可以看到已经实现了不少算子且同时支持GPU、CPU后端
特点部分我就把README部分内容贴过来:
Targeted for real time graphic and image post-processing
- Directly operate the texture data of graphics graphics and image applications, save big I/O time which is critical for real time application on mobile platforms;
- Native OpenGL ES based, easily integrate with the graphics rendering pipeline to maximize the use of computing resources, suits for rendering, image/video and game AI applications;
High Performance (这部分都是老生常谈的)
- Makes full use of the parallel computing advantages of GPU Shader to implement core operators;
- Pre-building the static computation graph for inference first and then running it, compared to the dynamic graph, the graph structure can be optimized before running, such as constant folding, operator fusion, etc., which can obtain faster forward operation speed;
- When the model is running, the running backend will be selected statically or dynamically according to the platform resources, and the running parameters of the kernel will be dynamically adjusted to achieve the best energy consumption utilization at runtime
- Optimizes for Convolutional Neural Networks to improve real-time performance;
- Supports heterogeneous device hybrid computing, and currently supports CPU and GPU;
- Provides a demo app pipeline optimized for throughput over latency, minimized data transfer and optimized for video processing
Lightweight & Portability & Extensibility
- OpenGL-based does not require reliance on other third-party(兼容性相比CL/Vulkan的优势) technology libraries and optimized for mobile platforms, making it easy to port, deploy and upgrade;
- Simple input/output interface, compatible with GPU processing;
Versatility
- Supports popular framework formats such as TensorFlow/PyTorch/ONNX;
- Supports popular Convolutional Neural Networks (CNN), such image classification, object detection, image segmentation, image enhancement;
- Supports user-defined operators, convenient to implement new operators and models;
目前Model Zoo(https://github.com/inferenceengine/shadernn/blob/devopensourcerelease/modelzoo/ModelZoo.md)包含的模型是下面几个:
- image classification (Resnet18, MobileNetV2)
- object detection (Yolov3-tiny)
- image segmentation (U-Net)
- image enchancement (ESPCN)
- style transfer (StyleTransfer)
目前提供了一个风格转换模型的demo,展示效果如下:
图8 风格转换的demo效果
模型转换的支持上:
- Conversion from TensorFlow: The .h5 model format is supported in this release.
- Conversion from PyTorch: Please export the model into ONNX model format (opset 11), simplify it and then convert it with convertTool.
- Conversion from ONNX: Opset version 11 is supported.
得到onnx/.h5格式后,将其转换为JSON格式。
编译产物部分:
图9 编译产物展示
4. ShaderNN的未来
作为一个纯全图形栈的推理引擎,后续ShaderNN将会重点发力在:
- 优化已有后端OpenGL的性能;
- 添加Vulkan后端。并覆盖更多场景模型;
- 落地更多产品如原本只有在桌面上的NVIDIA DLSS(Deep Learning Super Sampling),Ray Tracing Denoising (光追降噪)等,希望可以通过ShaderNN在移动端落地;
- 探索移动端GPU、DSP、NPU的互补。
文档中不少内容还是Coming soon,希望ShaderNN能走出和其它框架不一样的一条路。
参考
- Deep Neural Network Algorithms on Graphics Processors for Embedded Systems
https://www.scss.tcd.ie/publications/theses/diss/2018/TCD-SCSS-DISSERTATION-2018-007.pdf - 2022 OPPO开发者大会 https://odc22.oppomobile.com/
- ODC22 ColorOS技术能力分论坛 https://tech.china.com/article/20220901/092022_1134802.html
- 2020 OPPO 开发者大会召开,全新 AIUnit 与 FusionUnit 开放引擎亮相 http://vr.sina.com.cn/news/hz/2020-09-26/doc-iivhuipp6622309.shtml
- 面向AI图形的轻量深度学习推理引擎 ShaderNN https://blog.csdn.net/feelabclihu/article/details/127581768
作者:开心的派大星
文章来源:NeuralTalk
推荐阅读
- Google MediaPipe:设备端机器学习【完整解决方案】背后的技术实现
- 超轻目标检测 | 超越 NanoDet-Plus、YOLOv4-Tiny实时性、高精度都是你想要的!
- MediaPipe模型解读 | MoveNet-SinglePose:自底向上做单人姿态估计
更多嵌入式AI干货请关注 嵌入式AI 专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。