TNN 移动端推理框架

开源网站开源项目 24-05-14 10:17:37

TNN是一个移动端高性能、轻量级推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN框架在原有Rapidnet、ncnn框架的基础上进一步加强了移动端设备的支持以及性能优化,同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。目前TNN已经在手Q、微视、P图等应用中落地,欢迎大家参与协同共建,促进TNN推理框架进一步完善。

快速开始

使用 TNN 非常简单,如果你有一个已经训练好的模型, 那么一般而言通过以下三个步骤就能完成模型在目标平台上的部署。

第一步是把训练好的模型转换成TNN的模型,为此我们提供了丰富的工具来帮助你完成这一步,无论你使用的是 TensorFlow、PyTorch、或者 Caffe,都可以轻松完成转换。

当你完成了模型的转换,第二步就是编译目标平台的 TNN 引擎了,你可以根据自己的目标平台的硬件支持情况,选择 CPU/ARM/OpenCL/Metal 等加速方案。 对于这些平台,TNN 都提供了一键编译的脚本,使用非常方便。

最后一步就是使用编译好的 TNN 引擎进行推理,你可以在自己的应用程序中嵌入对 TNN 的调用,这方面我们提供了丰富而详实的 demo 来帮助你完成。

从0开始跑通一个iOS Demo

从0开始跑通一个Android Demo

技术方案

目前TNN已经在手Q、微视、P图等应用中落地:

计算优化

针对不同架构在硬件指令发射、吞吐、延迟、缓存带宽、缓存延迟、寄存器数量等特点,深度优化底层算子,极致利用硬件算力

主流硬件平台(CPU: ARMv7, ARMv8, GPU: Mali, Adreno, Apple) 深度调优

CNN 核心卷积运算通过 Winograd,Tile-GEMM, Direct Conv 等多种算法实现,保证不同参数、计算尺度下高效计算

Op 融合:离线分析网络计算图,多个小 Op(计算量小、功能较简单)融合运算,减少反复内存读取、kernel 启动等开销

低精度优化

支持 INT8, FP16 低精度计算,减少模型大小、内存消耗,同时利用硬件低精度计算指令加速计算

支持 INT8 Winograd 算法,(输入6bit), 在精度满足要求的情况下,进一步降低模型计算复杂度

支持单模型多种精度混合计算,加速计算同时保证模型精度

内存优化

高效”内存池”实现:通过 DAG 网络计算图分析,实现无计算依赖的节点间复用内存,降低 90% 内存资源消耗

跨模型内存复用:支持外部实时指定用于网络内存,实现“多个模型,单份内存”。

主流模型实测性能:v0.1 2020.05.29

麒麟970:

model cpu time(单线程,ms) gpu time(ms)

Mobilenet_v18812Mobilenet_v1_int855Mobilenet_v25811Mobilenet_v2_int841squeezenet_v1.012720squeezenet_v1.0_int882

骁龙835:

model cpu time(单线程,ms) gpu time(ms)

Mobilenet_v19416Mobilenet_v1_int862Mobilenet_v26114Mobilenet_v2_int847squeezenet_v1.012228squeezenet_v1.0_int893

骁龙845:

model cpu time(单线程,ms) gpu time(ms)

Mobilenet_v16010Mobilenet_v1_int837Mobilenet_v2398Mobilenet_v2_int828squeezenet_v1.07414squeezenet_v1.0_int856

TNN架构图:

通过 ONNX 支持 TensorFlow, PyTorch, MXNet, Caffe 等多种训练框架,充分利用和融入不断完善的 ONNX 开源生态。当前支持 ONNX 算子55个,近期会完善到约80个,覆盖主流CNN网络

支持主流安卓、iOS、Embedded Linux 操作系统,支持 ARM CPU, GPU 硬件平台(近期还会加入达芬奇 NPU 支持)

模块化设计,将模型解析、计算图构建、优化、底层硬件适配、高性能 kernel 实现各部分抽象隔离,通过 Factory Mode 注册、构建设备,方便接入更多的底层硬件、加速方案。

Runtime 无任何第三方库依赖,CPU 动态库尺寸仅约 400KB,并提供基础图像变换操作,调用简单便捷。跨平台模型统一、调用接口统一,通过单个配置参数快速切换。

[TNN 移动端推理框架]相关推荐

Apache Pivot RIA 应用开发平台

Apache Pivot 是一个开放源代码平台,用于构建可安装的Internet应用程序(IIA)。它结合了现代用户界面工……...

Prudence Java的Web框架

Prudence 是一个开源的容器和框架,主要用于可伸缩的web前端和网络服务。Prudence 使用动态脚本语言和基……...

Neo4j 高性能的 NoSQL 图形数据库

Neo4j 高性能的 NoSQL 图形数据库

Neo是一个网络——面向网络的数据库——也就是说,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java……...

NuPack 开源.NET包管理器

NuPack 开源.NET包管理器

微软发布一个初始版的NuPack,这是一个开源的包管理器,可用于微软的.NET软件开发平台。 微软的NuPack技……...

JPress 类似 WordPress 的产品

JPress 类似 WordPress 的产品

一个类似 WordPress 的产品,使用Java开发。 特点模板 模板安装 模板卸载 在线编辑 完善的开发文档 极致……...

今日开源
  1. Dubbox Dubbo 扩展

    Dubbox Dubbo 扩展

    Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架。作为一个重要的技术研究课题,在当当网我们根据自身的需求,为Dubbo实现了一些新的功能,……

    开源软件 2024-07-04

  2. OCP 开放计算项目

    Facebook两年前推出了一个名为“开放计算项目”的计划,旨在打造“开源”数据中心硬件。这意味着,惠普,戴尔和思科等硬件厂商将不能再控制产品设计,转而由Facebook和高盛等客户来控制。它被……

    开源软件 2024-07-04

  3. Colly 简单快速的 Web 爬虫框架

    Colly 是一个采用 Go 语言编写的 Web 爬虫框架,旨在提供一个能够写任何爬虫/采集器/蜘蛛的简洁模板。通过 Colly ,你可以轻松从网站中提取结构化的数据,然后进行数据挖掘、处理或归档。 项目特性 清晰明了的 API……

    开源软件 2024-07-04

返回顶部小火箭