前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【开源公告】腾讯 AI Lab 正式开源PocketFlow,让深度学习放入手机!

【开源公告】腾讯 AI Lab 正式开源PocketFlow,让深度学习放入手机!

作者头像
腾讯开源
修改于 2018-11-15 06:55:50
修改于 2018-11-15 06:55:50
9620
举报

11月1日,腾讯AI Lab在南京举办的腾讯全球合作伙伴论坛上宣布正式开源“PocketFlow”项目, 该项目是一个自动化深度学习模型压缩与加速框架,整合多种模型压缩与加速算法并利用强化学习自动搜索合适压缩参数,解决传统深度学习模型由于模型体积太大,计算资源消耗高而难以在移动设备上部署的痛点,同时极大程度的降低了模型压缩的技术门槛,赋能移动端AI应用开发。

这是一款适用于各个专业能力层面开发者的模型压缩框架,基于Tensorflow开发,集成了当前主流与AI Lab自研的多个模型压缩与训练算法,并采用超参数优化组件实现了全程自动化托管式的模型压缩。开发者无需了解具体模型压缩算法细节,即可快速地将AI技术部署到移动端产品上,实现用户数据的本地高效处理。

目前该框架在腾讯内部已对多个移动端AI应用模型进行压缩和加速,并取得了令人满意的效果, 对应用整体的上线效果起到了非常重要的作用。

随着移动互联网的普及和AI算法的愈加成熟,移动端AI的需求和应用场景也愈加丰富,如智能美颜,瘦身,手势识别,场景识别,游戏AI,视频检测,车载语音交互,智能家居,实时翻译等。将模型部署在移动端代替服务器端可以实现实时交互,在无网络环境的情况下也可正常运行,并且保护了数据的隐私和安全性,降低运维成本。而在移动端AI模型部署方面,小而快变成了模型推理最渴望的要求之一,因为小的模型可以使得整个应用的存储空间减小;而提高模型的推理速度则可以使得整个模型应用场景的反应速度加快,同时也可以在低配设备上取得很好的效果。因此,模型的推理速度逐渐已经成为了各大AI应用市场竞争力上最重要的评测指标之一。然而往往训练出来的模型推理速度或者尺寸大小不能满足需求,大部分开发者对极致的模型压缩和加速方法又感到困惑。

PocketFlow的出现就是为了解决这个令众多AI应用开发者头痛的问题。

框架开源内容

PocketFlow框架本次开源内容主要由两部分组件构成,分别是模型压缩/加速算法部分和超参数优化部分,具体结构如下图所示:

模型压缩/加速算法部分包括多种深度学习模型压缩和加速算法:

  • 通道剪枝(channel pruning): 在CNN网络中,通过对特征图中的通道维度进行剪枝,可以同时降低模型大小和计算复杂度,并且压缩后的模型可以直接基于现有的深度学习框架进行部署。PocketFlow还支持通道剪枝的分组finetune/retrain功能,通过实验我们发现此方法可以使原本压缩后的模型精度有明显的提升。
  • 权重稀疏化(weight sparsification):通过对网络权重引入稀疏性约束,可以大幅度降低网络权重中的非零元素个数;压缩后模型的网络权重可以以稀疏矩阵的形式进行存储和传输,从而实现模型压缩。
  • 权重量化(weight quantization):通过对网络权重引入量化约束,可以降低用于表示每个网络权重所需的比特数;我们同时提供了对于均匀和非均匀两大类量化算法的支持,可以充分利用ARM和FPGA等设备的硬件优化,以提升移动端的计算效率,并为未来的神经网络芯片设计提供软件支持。
  • 网络蒸馏(network distillation):对于上述各种模型压缩组件,通过将未压缩的原始模型的输出作为额外的监督信息,指导压缩后模型的训练,在压缩/加速倍数不变的前提下均可以获得0.5%-2.0%不等的精度提升。
  • 多GPU训练(multi-GPU training):深度学习模型训练过程对计算资源要求较高,单个GPU难以在短时间内完成模型训练,因此我们提供了对于多机多卡分布式训练的全面支持,以加快使用者的开发流程。无论是基于ImageNet数据的Resnet-50图像分类模型还是基于WMT14数据的Transformer机器翻译模型,均可以在一个小时内训练完毕。

超参数优化(hyper-parameter optimization)部分可以通过强化学习或者AutoML,在整体压缩率一定的情况下,搜索出每一层最合适的压缩比例使得整体的精度最高。多数开发者对模型压缩算法往往了解较少,调节压缩算法参数需要长期的学习和实验才能有所经验,但超参数取值对最终结果往往有着巨大的影。PocketFlow的超参数优化部分正是帮助开发者解决了这一大痛点,并且通过实验我们发现,其优化结果也要好于专业的模型压缩工程师手工调参的结果。其结构如下图:

PocketFlow性能

通过引入超参数优化组件,不仅避免了高门槛、繁琐的人工调参工作,同时也使得PocketFlow在各个压缩算法上全面超过了人工调参的效果。以图像分类任务为例,在CIFAR-10和ImageNet等数据集上,PocketFlow对ResNet和MobileNet等多种CNN网络结构进行有效的模型压缩与加速。

在CIFAR-10数据集上,PocketFlow以ResNet-56作为基准模型进行通道剪枝,并加入了超参数优化和网络蒸馏等训练策略,实现了2.5倍加速下分类精度损失0.4%,3.3倍加速下精度损失0.7%,且显著优于未压缩的ResNet-44模型; 在ImageNet数据集上,PocketFlow可以对原本已经十分精简的MobileNet模型继续进行权重稀疏化,以更小的模型尺寸取得相似的分类精度;与Inception-V1、ResNet-18等模型相比,模型大小仅为后者的约20~40%,但分类精度基本一致(甚至更高)。

相比于费时费力的人工调参,PocketFlow框架中的AutoML自动超参数优化组件仅需10余次迭代就能达到与人工调参类似的性能,在经过100次迭代后搜索得到的超参数组合可以降低约0.6%的精度损失;通过使用超参数优化组件自动地确定网络中各层权重的量化比特数,PocketFlow在对用于ImageNet图像分类任务的MobileNet-v1模型进行压缩时,取得了一致性的性能提升;用PocketFlow平均量化比特数为8时,准确率不降反升,从量化前的70.89%提升到量化后的71.29%。

PocketFlow落地助力内部移动应用AI落地

在腾讯公司内部,PocketFlow框架正在为多项移动端业务提供模型压缩与加速的技术支持。例如,在手机拍照APP中,人脸关键点定位模型是一个常用的预处理模块,通过对脸部的百余个特征点(如眼角、鼻尖等)进行识别与定位,可以为后续的人脸识别、智能美颜等多个应用提供必要的特征数据。我们基于PocketFlow框架,对人脸关键点定位模型进行压缩,在保持定位精度不变的同时,大幅度地降低了计算开销,在本身已经十分精简的网络上取得了1.3 ~ 2倍不等的加速效果,压缩后的模型已经在实际产品中得到部署。

在人体体态识别项目中,PocketFlow更是在满足上线精度的要求下,使得模型推理速度有3倍以上的加速, 为项目的移动端落地起到了决定性的作用。

PocketFlow开源后展望

此次开源后,腾讯公司将继续致力于开发更多的模型压缩算法以及自动调参策略,支持更多的AI算法与应用场景,非常欢迎更多的外部开发者贡献代码,一起完善模型压缩与加速的生态!

Github开源地址:

https://github.com/Tencent/PocketFlow

(点击文末阅读原文直接访问)

请给 PocketFlow 一个 Star !  欢迎提出你的 issue 和 PR

 PocketFlow 国内镜像地址:

https://git.code.tencent.com/Tencent_Open_Source/PocketFlow

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯开源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Spring Boot项目打包部署,打Jar包和War包有什么区别?
部署 Spring Boot 项目可以采用多种方式,下面是常用的几种部署方式,同学们可以简单做一个了解。
Designer 小郑
2024/01/25
3K0
Spring Boot项目打包部署,打Jar包和War包有什么区别?
SpringBoot入门系列(三十)Spring Boot项目打包、发布与部署
Spring Boot使用了内嵌容器,因此它的部署方式也变得非常简单灵活,一方面可以将Spring Boot项目打包成独立的jar或者war包来运行,也可以单独打包成war包部署到Tomcat容器中运行,如果涉及到大规模的部署Jinkins成为最佳选择之一。
章为忠学架构
2021/08/18
28.6K0
Docker 部署spring web项目
关键命令:docker run --name tomcat2 -d -p 8083:8080 tomcat:latest
菲宇
2019/06/12
1.5K0
Docker 部署spring web项目
Spring Boot---(9)SpringBoot项目发布到docker的tomcat容器
SpringBoot项目发布到服务器,是一件很简单的事情,但是发布到服务器上docker启动的tomcat容器中,有一些坑,需要注意。
IT云清
2019/01/22
8100
Spring Boot 项目部署实战:WAR 包部署与 Tomcat 安装
Spring Boot 是一个非常流行的 Java 框架,它简化了基于 Spring 的应用程序的创建和部署过程。虽然 Spring Boot 默认支持将应用程序打包成可执行的 JAR 文件,但在某些情况下,我们可能需要将其打包成 WAR 文件以便部署到传统的 Java 应用服务器(如 Tomcat)。本文将详细介绍如何将 Spring Boot 项目打包成 WAR 文件,并在 Tomcat 上进行部署。
Front_Yue
2024/08/10
2.5K0
Spring Boot 项目部署实战:WAR 包部署与 Tomcat 安装
SpringBoot-项目部署
SpringBoot项目部署可以通过将项目打成可执行的jar包或war包来实现,也可以使用容器化技术如Docker将项目部署到云平台中。在部署时需要注意配置文件的位置和启动参数的设置,同时确保目标环境中的Java版本与项目所需的Java版本一致。部署完成后,可以通过访问项目的URL或监控端点来进行访问和管理。
Damon小智
2024/02/03
3430
SpringBoot-项目部署
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十六):容器部署项目
首先需要有一个linux环境,并且安装 java 和 maven 以及 docker 环境,这个教程多如牛毛,不再赘述。
朝雨忆轻尘
2019/06/19
6320
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十六):容器部署项目
Docker---(5)Docker 部署SpringBoot web项目
SpringBoot项目发布到服务器,是一件很简单的事情,但是发布到服务器上docker启动的tomcat容器中,有一些坑,需要注意。
IT云清
2019/01/22
6540
Spring boot(4)-应用打包部署
Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat、weblogic等等),当然在此之前你要对程序入口做简单调整。
黄规速
2022/04/14
1.5K0
Spring boot(4)-应用打包部署
Spring Boot + Spring Cloud 实现权限管理系统 后端篇
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。
朝雨忆轻尘
2019/06/18
8650
springboot使用war包的形式进行应用的发布部署
在使用springboot这项技术时,我们创建的项目都是以jar的形式进行的,最近偶尔想到了如何换下启动方式,所以这篇文章就出来了。
码农王同学
2019/11/26
7930
SpringBoot 项目打包方式 jar 和 war
1. jar包方式启动 ---- 1. 添加依赖 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 2. 生成jar包 Eclipse:pom.xml,选择 ru
山海散人
2021/03/03
5870
【玩转腾讯云】本地JavaWeb项目部署到腾讯云轻量服务器,实现公网访问
本次教程,Tomcat项目打包成war包到服务器上发布,Springboot项目打包为jar或war包到服务器上发布:
Mintimate
2021/04/06
13.9K0
【玩转腾讯云】本地JavaWeb项目部署到腾讯云轻量服务器,实现公网访问
Springboot的项目如何打成war包
1、在SpringBoot中默认支持Tomcat容器,所以当一个SpringBoot项目打包生成*.jar文件,并且直接执行的时候就会自动启动内部的Tomcat容器。除了此种模式之外,也可以将Web项目打包为*.war文件,采用部署的形式通过Tomcat进行发布处理,这种方式和传统模式比较类似,打成war包丢到tomcat里面进行运行。
别先生
2020/10/30
2.4K0
Springboot的项目如何打成war包
利用IDEA将SpringBoot的项目打包成war文件
步骤一:修改pox.xml文件 1.首先将 <packaging>jar</packaging>修改为 <packaging>war</packaging> 2.在dependencies里面添加以下代码: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-legacy</artifactId> </depende
似水的流年
2018/06/13
1K0
ubuntu 18.04 server下tomcat部署sprongboot项目
如果要将最终的打包形式改为war的话,还需要对pom.xml文件进行修改,因为spring-boot-starter-web中包含内嵌的tomcat容器,所以直接部署在外部容器会冲突报错。这里有两种方法可以解决,如下
吟风者
2019/07/24
1.2K0
利用IDEA将SpringBoot的项目打包成war文件
摘要总结:本文介绍了如何利用IDEA将SpringBoot的项目打包成war文件,包括修改pom.xml文件、修改SpringBoot中的启动文件以及最重要的打包步骤。注意要将spring-boot-starter-tomcat中的scope改为provided,否则会报错。
林老师带你学编程
2018/01/04
1.5K0
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十二):链路追踪(Sleuth、Zipkin)
在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致的,这时就需要解决一个问题,如何快速定位服务故障点,于是,分布式系统调用链追踪技术就此诞生了。
朝雨忆轻尘
2019/06/19
7380
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十二):链路追踪(Sleuth、Zipkin)
SpringBoot打包部署最佳实践
Spring Boot目前流行的java web应用开发框架,相比传统的spring开发,spring boot极大简化了配置,并且遵守约定优于配置的原则即使0配置也能正常运行,这在spring中是难以想象的。spring boot应用程序可以独立运行,框架内嵌web容器,使得web应用程序可以像本地程序一样启动和调试,十分的方便,这种设计方式也使得spring boot应用程序非常适合容器化进行大规模部署。生态方面,spring boot提供了非常丰富的组件,目前流行的java web框架基本都有spring boot版本,生态十分庞大,是目前java web开发最好的方案。
Bug开发工程师
2020/04/22
3.7K0
SpringBoot打包部署最佳实践
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十三):配置中心(Config、Bus)
如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多。此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启,运维也是苦不堪言,而且还很容易出错。于是,配置中心便由此应运而生了。
朝雨忆轻尘
2019/06/19
8280
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十三):配置中心(Config、Bus)
推荐阅读
相关推荐
Spring Boot项目打包部署,打Jar包和War包有什么区别?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档