TensorFlow 技术框架解析 | 图文理解深度学习技术实现
最近项目需要,客户想上tensorflow,想把项目做的高大上一点,向我咨询tensorflow的相关问题和部署方案,我要假装自己很懂TF,之前一直在跟进tensorflow的技术进展,最近又做了很多功课,整理出以下内容,用这个ppt给客户讲解并加上TF的demo和tensorboard的可视化演示,客户十分满意,说这就是他们想看到的。
先来认识一下TF的价值:
- TensorFlow,是Google在15年年底发布的机器学习平台,发布以后由于其速度快,扩展性好,推广速度也很快。
- Google的大战略:Android占领了移动端;TF占领神经网络提供AI服务。未来的趋势恰好是语音图像以及AI的时代。
- TF的特点之一就是可以支持很多种设备,大到GPU、CPU,小到手机平板,五花八门的设备都可以跑起来TF。不得不说这一点很有前瞻性,可以预见的是,mobile-end的用户将会享受到越来越多的AI服务。
系统概述
整个系统从底层到上层可分为七层:
- 最底层是硬件计算资源,支持CPU、GPU;
- 支持两种通信协议;
- 数值计算层提供最基础的计算,有线性计算、卷积计算;
- 数据的计算都是以数组的形式参与计算;
- 计算图层用来设计神经网络的结构;
- 工作流层提供轻量级的框架调用
- 最后构造的深度学习网络可以通过TensorBoard服务端可视化
技术架构
整体技术栈分为两部分:
- 前端系统:提供编程模型,负责构造计算图;
- 后端系统:提供运行时环境,负责执行计算图。
组件交互
master节点给两种类型的节点分发任务:
- /job:ps/task:0: 负责模型参数的存储和更新
- /job:worker/task:0: 负责模型的训练或推理
会话(Session)
- 客户端使用会话来和TF系统交互,一般的模式是,建立会话,此时会生成一张空图;在会话中添加节点和边,形成一张图,然后执行。
实现(Implementation)
- TF中最重要的Tensor被支持的非常全面,8bit到64bit, signed和unsigned,IEEE float/double,complex number等等。使用引用计数来保存tensor,当计数到0时,tensor被回收。
- 客户端,用户会使用;与master和一些worker process交流
- master,用来与客户端交互,同时调度任务;
- worker process,工作节点,每个worker process可以访问一到多个device。
- device,TF的计算核心,通过将device的类型、job名称、在worker process中的索引将device命名。可以通过注册机制来添加新的device实现,每个device实现需要负责内存分配和管理调度TF系统所下达的核运算需求。
跨设备通信
- 当两个需要通信的op在不同的机器上时,就需要跨设备通信,当它们需要通信时,TF会在它们之间的联系中添加Send和Recv节点,通过Send和Recv之间进行通信来达到op之间通信的效果。如上所示。
梯度计算( Gradient Computation )
- 连接式的机器学习算法往往需要使用梯度下降法来求取参数,TF通过扩展图的方式实现了自动求导,TF做法如下:
对于每张计算图,得到从输入I到输出C的路径,并从C到I回溯,回溯过程中对于路径上的每个节点A,添加另一个节点来计算A’来计算偏导,在计算偏导的过程中,A’不仅仅将上一层传下来的反向导数作为输入,还可能将A的输入和输出也作为其输入。
数据并行计算( Data Parallel Training)
- 通过数据并行的方式来提升模型的效率,比如,假如每次模型的mini-batch是1000个样本,那么,切成10份,每份100个,然后将模型复制10份,每份都将梯度传到参数服务器上。
数据切分也分为同步和异步两种方式,同步的切分是等待每个独立的model传上来的梯度都到齐后再进行更新,这样和一个大的batch没有区别。异步的切分则是不用等待,每个独立的模型的参数更新直接更新。
模型并行训练( Model Parallel Training)
- 还可以对模型进行切分,让模型的不同部分执行在不同的设备上,这样可以一个迭代的样本可以在不同的设备上同时执行。如上图所示的LSTM模型
最近项目需要,客户想上tensorflow,想把项目做的高大上一点,向我咨询tensorflow的相关问题和部署方案,我要假装自己很懂TF,之前一直在跟进tensorflow的技术进展,最近又做了很多功课,整理出以下内容,用这个ppt给客户讲解并加上TF的demo和tensorboard的可视化演示,客户十分满意,说这就是他们想看到的。
先来认识一下TF的价值:
- TensorFlow,是Google在15年年底发布的机器学习平台,发布以后由于其速度快,扩展性好,推广速度也很快。
- Google的大战略:Android占领了移动端;TF占领神经网络提供AI服务。未来的趋势恰好是语音图像以及AI的时代。
- TF的特点之一就是可以支持很多种设备,大到GPU、CPU,小到手机平板,五花八门的设备都可以跑起来TF。不得不说这一点很有前瞻性,可以预见的是,mobile-end的用户将会享受到越来越多的AI服务。
系统概述
整个系统从底层到上层可分为七层:
- 最底层是硬件计算资源,支持CPU、GPU;
- 支持两种通信协议;
- 数值计算层提供最基础的计算,有线性计算、卷积计算;
- 数据的计算都是以数组的形式参与计算;
- 计算图层用来设计神经网络的结构;
- 工作流层提供轻量级的框架调用
- 最后构造的深度学习网络可以通过TensorBoard服务端可视化
技术架构
整体技术栈分为两部分:
- 前端系统:提供编程模型,负责构造计算图;
- 后端系统:提供运行时环境,负责执行计算图。
组件交互
master节点给两种类型的节点分发任务:
- /job:ps/task:0: 负责模型参数的存储和更新
- /job:worker/task:0: 负责模型的训练或推理
会话(Session)
- 客户端使用会话来和TF系统交互,一般的模式是,建立会话,此时会生成一张空图;在会话中添加节点和边,形成一张图,然后执行。
实现(Implementation)
- TF中最重要的Tensor被支持的非常全面,8bit到64bit, signed和unsigned,IEEE float/double,complex number等等。使用引用计数来保存tensor,当计数到0时,tensor被回收。
- 客户端,用户会使用;与master和一些worker process交流
- master,用来与客户端交互,同时调度任务;
- worker process,工作节点,每个worker process可以访问一到多个device。
- device,TF的计算核心,通过将device的类型、job名称、在worker process中的索引将device命名。可以通过注册机制来添加新的device实现,每个device实现需要负责内存分配和管理调度TF系统所下达的核运算需求。
跨设备通信
- 当两个需要通信的op在不同的机器上时,就需要跨设备通信,当它们需要通信时,TF会在它们之间的联系中添加Send和Recv节点,通过Send和Recv之间进行通信来达到op之间通信的效果。如上所示。
梯度计算( Gradient Computation )
- 连接式的机器学习算法往往需要使用梯度下降法来求取参数,TF通过扩展图的方式实现了自动求导,TF做法如下:
对于每张计算图,得到从输入I到输出C的路径,并从C到I回溯,回溯过程中对于路径上的每个节点A,添加另一个节点来计算A’来计算偏导,在计算偏导的过程中,A’不仅仅将上一层传下来的反向导数作为输入,还可能将A的输入和输出也作为其输入。
数据并行计算( Data Parallel Training)
- 通过数据并行的方式来提升模型的效率,比如,假如每次模型的mini-batch是1000个样本,那么,切成10份,每份100个,然后将模型复制10份,每份都将梯度传到参数服务器上。
数据切分也分为同步和异步两种方式,同步的切分是等待每个独立的model传上来的梯度都到齐后再进行更新,这样和一个大的batch没有区别。异步的切分则是不用等待,每个独立的模型的参数更新直接更新。
模型并行训练( Model Parallel Training)
- 还可以对模型进行切分,让模型的不同部分执行在不同的设备上,这样可以一个迭代的样本可以在不同的设备上同时执行。如上图所示的LSTM模型