Tensorflow
优质
小牛编辑
136浏览
2023-12-01
Tensorflow 是谷歌在 2015 年 11 月开源的机器学习框架,来源于 Google 内部的深度学习框架 DistBelief。由于其良好的架构、分布式架构支持以及简单易用,自开源以来得到广泛的关注。主要特点包括:
- 良好的架构,使用数据流图来进行数值计算
- 简单易用,并且社区还有很多的模型封装(比如 keras 和 skflow 等)
- 灵活高效,既可以使用 CPU,也可以使用 GPU
- 开放活跃的社区
Tensorflow 是一个使用数据流图 (data flow graphs) 技术来进行数值计算的开源软件库。
数据流图是是一个有向图,使用结点(一般用圆形或者方形描述,表示一个数学操作或者数据输入的起点和数据输出的终点)和线(表示数字、矩阵或者 Tensor 张量)来描述数学计算。数据流图可以方便的将各个节点分配到不同的计算设备上完成异步并行计算,非常适合大规模的机器学习应用。
Tensorflow 支持多种异构平台,包括 CPU、GPU、移动设备等。TensorFlow 内核采用 C/C++ 开发,并提供了 C++,Python,Java,Go 语言的 Client API。其架构灵活,能够支持各种网络模型,具有良好的通用性和可扩展性。
系统概述
Tensorflow 以 C API
为边界可以分为前端系统(提供编程模型,负责构造计算图)和后端系统(提供运行环境,负责执行计算图):
如上图所示,系统中主要组件包括
- 支持多语言的客户端,方便用户构造各种复杂的计算图,实现所需的模型设计。客户端以 Session 为桥梁连接后段的运行时,并启动计算图的执行过程
- 分布式 Master 负责将计算图拆分为多个子图,以便在不通的进程和设备上并行执行
- Worker Service 负责在硬件环境(如 CPU 或 GPU)上调用 OP 的 Kernel 实现完成图的计算,并从其他 Worker Service 接受计算结果或将计算结果发送给其他 Worker Services
- Kernel Implements 是 OP 在硬件设备上的特定实现,负责执行 OP 运算,如数值计算、多维数组操作、控制流、状态管理等(如下图所示)
组件交互
假设存在两个任务
/job:ps/task:0
: 负责模型参数的存储和更新/job:worker/task:0
: 负责模型的训练或推理
组件交互过程为
- 客户端通过 TensorFlow 的编程接口构造计算图
- 客户端建立 Session 会话,将 Protobuf 格式的图定义发送给 Distributed Master
- Distributed Master 根据
Session.run
的Fetching
参数,从计算图中反向遍历,找到所依赖的最小子图;然后将该子图再次分裂为多个字图片段,以便在不同进程和设备上运行 - Distributed Master 将这些子图片段分发给 Work Service,并负责任务集的协同
- 随后 Work Service 启动「本地子图」的执行过程,包括
- 处理来自 Master 的请求
- 调度 OP 的 Kernel 实现,执行子图运算
- 协同任务之间的数据通信
安装方法
最简单的方法使用 pip 来安装:
# Python 2.7
pip install --upgrade tensorflow
# Python 3.x
pip3 install --upgrade tensorflow
也可以使用 docker 镜像:
# CPU only
docker run -it -p 8888:8888 tensorflow/tensorflow
# GPU version
nvidia-docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu
在 Azure Notebooks 中安装:
!conda update pip six -y
!conda install tensorflow Theano keras -y
验证安装
$ python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>>