TensorFlow 开源生态系统是什么?有哪些最新进展?别急,我们为你整理了TensorFlow 中国研发团队负责人李双峰在CSDN 主办的第三届 AI 开发者大会 7 月 3 日的主论坛上进行《TensorFlow 的最新进展》的主题演讲,带你解读一系列更新发布内容。
原文发布在 CSDN 公众号上,以下内容为演讲实录,由 CSDN(ID:CSDNnews)整理。
要点概览:
TensorFlow 开源生态系统提供了丰富的工具链,满足前沿研究 — 生产环境使用 — 全场景部署等多样化的需求,在帮助构建负责任的 AI 应用的同时,也受益于庞大社区的贡献。目前,TensorFlow 下载量已经超过 1 亿次,提交次数 89,000+,代码改动请求 14,600+,贡献者超过 2600 位。
TensorFlow 推动了很多前沿研究,比如 16-17 年 Google 提出了 Transformer 模型,是最近几年深度学习最有影响力的成果之一;2018年提出了 BERT 模型,带来了 NLP 领域的突破,并很快在工业界得到广泛使用,比如提升搜索质量。
TensorFlow 支撑了社区中很多应用,包括环境保护、农业检测、文化艺术研究和医疗健康。在科学计算领域,Summit 是全球领先的超算系统,它利用 TensorFlow 来做极端天气的预测。在工业界,网易严选用 TensorFlow 做销售数据预测,腾讯医疗用 TensorFlow 做医疗影像处理,英语流利说用TensorFlow 帮助用户学习英语。大家常见的推荐和搜索系统,背后很多都用到了 TensorFlow。
TensorFlow 2 的整体架构分为「训练」和「部署」两个部分,训练部分包括了数据设计、模型设计、训练及分析等功能:训练时可以用 Keras 这样的高阶 API 来构建模型,也可以用 tf.data 来做高性能数据处理,在不同硬件做大规模训练时需要用到 Distribution Strategy。训练之后产生的模型以 SavedModel 格式存起来,它可以在不同平台部署,也可以发布到 TensorFlow Hub 上,便于共享。部署部分,包括用于浏览器和 Node.js 上部署的 TensorFlow.js,在移动和嵌入式平台部署的 TensorFlow Lite,和服务器端部署的 TensorFlow Serving。
可扩展性和高性能
使用 distribute.Strategy,一行代码就可以从单机多 CPU(使用 MirroredStrategy)扩展到多机多CPU(使用 MultiWorkerMirroredStrategy)。比如最近 TF 2.2,通过多种优化(NCCL 优化,FP16 梯度计算,梯度计算和反向传播并行化),在进行 BERT SQuAD 训练时,吞吐量相对于 TF 2.0 有 2.5 倍的提升。TF 2.2 中还在 TensorBoard 中提供了 TF Profiler 工具集,可以统计和追踪性能的瓶颈。数据处理是深度学习训练的瓶颈之一,tf.data 可以加速数据处理,在即将发布的 TF 2.3 中,增加了两个功能:tf.data snapshot 可以复用已经计算过的数据,而 tf.data service 可以扩展多个 worker 加速数据预处理并容错。
丰富的多平台部署能力
支持灵活的多平台部署,包括服务器、移动和嵌入式设备,和浏览器端。
TensorFlow Extended (TFX),是一个端到端的机器学习平台,它可以创建和管理大规模生产环境中的复杂机器学习工作流,在 Google 被大规模使用。TFX 提供了丰富的组件,比如对数据流做统计验证并查看异常,数据清理和转换,持续训练模型,并将对模型进行评估和验证,最后将合格的模型部署到生产环境中。
在服务器端部署中,TensorFlow Serving 是一个高性能的 TensorFlow 模型部署系统,允许多版本模型同时部署,实时上线,并支持 RPC 和 RESTful API。
TensorFlow.js 是为 Javascript 而定制的机器学习平台,可以利用现有的 JS 模型包,对现有模型做迁移学习,或者用 JS 从头训练模型。我们已经提供了多种多样的模型,最近发布了手势识别模型和基于 MobileBERT 的问题回答模型。它可以支持各种浏览器,也支持各种框架比如 React Native,还可以在服务器端使用 Node.js。特别值得一提的是,TF.js 提供了微信小程序插件,可以直接在小程序里运行 TF.js 程序,比如 ModiFace 虚拟试妆小程序使用了 TF.js,总共大小是 1.8M(980KB JS + 830KB model),速度达到 25 FPS。
TensorFlow Lite 可以部署在移动和嵌入式设备端,甚至 MCU 上。
TensorFlow Lite (TFLite)是一个轻量、快速、跨平台的专门针对移动和 IoT 应用场景而优化的框架,它支持 Android、iOS、嵌入式设备(如树莓派)、硬件加速器(比如 EdgeTPU)甚至非常小的 MCU 平台等。人们用 TensorFlow Lite 做包括语音、视频、图像、自然语言处理等多种功能。全球有超过 40 亿设备部署了 TensorFlow Lite,比如 Google 的许多应用像 Google Assistant,国外应用像 Uber、Airbnb,国内应用像网易[1]&[2]、爱奇艺、WPS、腾讯的全民K歌等。
性能是我们持续不断提升的一个领域,TensorFlow Lite 性能强大,同时支持多种硬件加速器,比如 GPU、NNAPI、DSP 和 CoreML。以 MobileNetV1 为例子,Pixel4 上单线程 CPU 上浮点模型只需要 37ms,量化提升 2.8 倍达到 13ms,在 GPU 上使用 OpenCL 则只要 6ms。GPU 上最近增加了对 OpenCL 的支持,在多个视觉模型上的测试表明,基于 OpenCL 的 GPU 性能提升为 CPU 上的 4-6 倍, 是 OpenGL 的 2 倍。另一个即将到来的新突破,是全新的高度优化后的浮点卷积核库 XNNPACK。在多个关键浮点卷积模型上的测试表明,在多种硬件平台上,使用 XNNPACK 后,单线程 CPU 性能提升达 20%~200% 。比如在 X86 Windows 平台上,有两倍的提升。
我们也提供 TensorFlow Lite for Micro 功能,支持在 MCU 上运行超级小的模型:语音识别的模型只要 20KB,人物探测 250KB,手机姿态检测也只需要 20KB,这样的模型可以真正让机器学习无处不在 。
TensorFlow 模型优化工具包,支持量化、剪枝等多种模型压缩技巧,使用简单,进一步压缩了模型。
1. 预训练前沿模型和完整参考示例
Tensorflow Lite 官网提供了丰富等预训练模型库和完整应用代码(包括模型前处理和后处理),包括多种案例,比如对象追踪、风格迁移和问题回答,也包括不同平台的例子(比如 Android、iOS、树莓派及 MCU)。比如,在手机上实现问题问答是一个很有挑战的问题,我们发布了基于 MobileBERT 的参考应用。另外,社区 GitHub 项目 “Awesome TFLite”,也收集了很多有意思的示例。
我们推出了一些前沿的预训练模型,比如:
2. TFLite Model Maker
初学者如果希望定制自己模型,但是不懂机器学习、也不懂构建模型?没关系,用 TFLite Model Maker,它提供了一个Python的库,你不需懂 ML,只需要 4、5 行 Python 代码,就可以根据你的数据来定制一个模型。
3. TFLite 代码生成和 Android Studio ML model Binding 工具
TFLite Model Maker 生成的模型会自动加上 TFLite Metadata,我们提供了一个代码生成工具 TFLite codegen,把带有TFLite Metadata 的模型直接转换成安卓代码,让安卓的开发者不怎么需要太懂这个模型,就能够像用API一样去写代码。生成的代码还可以做一些前处理和后处理工作。
更进一步,我们也将此功能集成到 Android Studio 的 ML model binding 工具中,只需要把模型导入到 Android Studio 中就可以生成代码,目前已在 Android Studio 4.1 中提供试用版。
如果不希望从头训练这个模型,希望利用迁移学习,则可以使用 TensorFlow Hub,它是开箱即用的预训练模型库,提供了多种模型(比如图像 、文本、视频、音频等),也支持多种部署的格式(如 TF、TFLite、TF.js)。其中有不少社区贡献的模型,比如 NVIDIA。
如果你只是关注前沿研究,不关注部署的问题,可以去尝试一个非常新的高性能、轻量级框架 JAX ,它是为了研究者构建的。JAX 结合了自动微分和 XLA 的功能,使用纯粹的Python作为 API,非常易用而轻量级,同时可以利用 XLA 编译到 GPU 或者 TPU 上,从而保持高性能。
我们也开源了新的编译器框架 MLIR 来加速机器学习。MLIR 提供了最新的 ML 编译器技术,支持多层次 IR,模块化,可定制。它由 LLVM 项目管理,立场中立,最大的一些硬件厂商都表示支持,一起推动 MLIR 的发展。MLIR 正在帮助构建更好的 TensorFlow,通过编译加速,简化硬件支持,也用在了TensorFlow 到 TFLite 的转化。
TensorFlow 生态系统提供了非常丰富的扩展库,这些库针对当前机器学习领域的最前沿研究提供了很多工具,已经有超过 80 个不同的 TensorFlow 库供研究人员使用。比如对贝叶斯模型感兴趣,可以使用 TF Probablility 库;如果想要 NLP 模型处理,提供了 TF Text 库;对于深度学习和 Graph 结合,可以研究 TF Neural Structured Learning;想探索强化学习,利用 TF Agents。最新发布的一个库 TensorFlow Quantum,把 TensorFlow 和量子计算结合起来。
TensorFlow 开源了很多工具来推动 Responsible AI(负责任的 AI),这些工具关注如下几个方面:
学习资源
官方网站 tensorflow.google.cn:有非常丰富的TensorFlow 2 教程和最佳实践。
TensorFlow 微信公众号:包含 TensorFlow 最新进展和技巧,大量社区和公司分享的工业界案例和经验,还有很多前沿研究翻译成中文,是非常好的学习资源。
TensorFlow 教程:Coursera 和 Udacity 上有多门很好的 TensorFlow 实战的课程,很多都是免费的。Google 也提供了《Machine Learning Crash Course》 TF 2.x 版,便于没有 ML 基础的快速入门。
中文社区教程:比如 tf.wiki 上的《简单粗暴 TensorFlow 2》,d2l.ai 上的《动手学深度学习》(TensorFlow 2 版),黑胡桃实验室的《TensorFlow Crash Course》 , 腾讯课堂上的《TensorFlow.js 遇到小程序》等。
实战
社区
文档翻译、创建中文教程和视频:目前 TensorFlow 官网中文文档很大部分都是社区贡献和维护的,只要有热情,每个人都可以参与。
分享案例:欢迎给 TensorFlow 微信公众号投稿,分享案例和经验,也可以在 CSDN 等社区分享经验。
-投稿
TensorFlow 微信公众号【菜单栏】→【近期活动】→【投稿戳我】
参与社区 TFUG(TensorFlow User Group):可以参与 TFUG 活动,也可以申请成为所在城市的组织者,甚至申请新的 TFUG。目前大陆地区已有 19 个城市有 TFUG。
贡献代码和模型:TensorFlow 有多个 SIG 小组,也有不少中文社区的开发者领导这些 SIG 小组,比如 SIG Networking、SIG IO、SIG AddOns 等,欢迎大家参与 TF SIG 小组,贡献代码,也可以贡献模型。
成为谷歌开发者专家 (Google Developer Expert,GDE):目前大陆地区已有不少 ML GDE。
最后,如果大家希望了解更多,可以在微信搜索关注 ”TensorFlow (tensorflow_official)” 官方公众号和访问官方网站:tensorflow.google.cn。
谢谢大家!