- 原文地址:Getting started with TensorFlow —— IBM
- 原文做者:Vinay Rao
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:JohnJiangLA
- 校对者:CACppuccino & atuooo
在机器学习的世界中, tensor 是指数学模型中用来描述神经网络的多维数组。换句话说,一个 tensor 一般是一个广义上的高维矩阵或者向量。html
经过使用矩阵的秩来显示维数的简单方法,tensor 可以将复杂的 n 维向量和超形状表示成 n 维数组。Tensor 有两个属性:数据类型和形状。前端
TensorFlow 是一个开源的深度学习框架,它基于 Apache 2.0 许可发布于 2015年末。从那时起,它就成为世界上最普遍采用的深度学习框架之一(由 Github 上基于它的项目数量得出)。java
TensorFlow 源自 Google DistBelief,它是由 Google Brain 项目组开发并全部的深度学习系统。Google 从零开始设计它,用于分布式处理,并在 Google 产品数据中心中以最佳模式运行在定制的应用专用集成电路(ASIC)上,这种集成电路一般也被叫作 Tensor Processing Unit(TPU)。这种设计可以开发出有效的深度学习应用。python
这个框架可以运行在 CPU、 GPU 或者 TPU 上,能够在服务器、台式机或者移动设备上使用。开发者能够在不一样的操做系统和平台上部署 TensorFlow,并且不管是在本地环境仍是云上。许多开发者会认为,相比相似的深度学习框架(好比 Torch 和 Theano,它们也支持硬件加速技术并被学术界普遍使用),TensorFlow 可以更好地支持分布式处理,而且在商业应用中拥有更高灵活性和性能表现。react
深度学习神经网络一般是由多个层组成。它们使用多维数组在层之间传递数据或执行操做。一个 tensor 在神经网络的各层之间“流动”(Flow)。所以,命名为 TensorFlow。linux
TensorFlow 使用的主要编程语言是 Python。为 C
++、 Java® 语言和 Go 提供了可用但不保证稳定性的的应用程序接口(API),一样也有不少为 C
#,Haskell, Julia,Rust,Ruby,Scala,R 甚至是 PHP 设计的第三方的绑定。Google 近来发布了一个为移动设备优化的 TensorFlow-Lite 库,以使 TensorFlow 应用程序能在 Android 上运行。android
这个教程提供了 TensorFlow 系统的概述,包括框架的优势,支持的平台,安装的注意事项以及支持的语言和绑定。ios
TensorFlow 为开发者提供了不少的好处:git
本节将介绍 TensorFlow 擅长的应用程序。显然,因为 Google 使用其专有版本的 TensorFlow 开发文本和语音搜索,语言翻译,和图像搜索的应用程序,所以 TensorFlow 的的主要优点在于分类和推测。例如,Google 在 TensorFlow 中应用 RankBrain(Google 的搜索结果排名引擎)。github
TensorFlow 可用于优化语音识别和语音合成,好比区分多重声音或者在高噪背景下过滤噪声提取语音,在文本生成语音过程当中模拟语音模式以得到更天然的语音。另外,它可以处理不一样语言中的句型结构以生成更好的翻译效果。它也一样能被用于图像和视频识别以及对象、地标、人物、情绪、或活动的分类。这带来了图像和视频搜索的重大改进。
由于其灵活,可扩展和模块化的设计,TensorFlow 不会限制开发人员使用特定的模型或者应用。开发者使用 TensorFlow 不只实现了机器学习和深度学习算法,还实现了统计和通用计算模型。有关应用程序和社区模型的更多信息请查看使用 TensorFlow。
各类只要支持 Python 开发环境的平台就能支持 TensorFlow。可是,要接入一个受支持的 GPU,TensorFlow 须要依赖其余的软件,好比 NVIDIA CUDA 工具包和 cuDNN。为 TensorFlow(1.3 版本)预构建的 Python 二进制文件(当前发布)可用于下表中列出的操做系统。
注意: 在 Ubuntu 或 Windows 上得到 GPU 加速支持须要 CUDA 工具包 8.0 和 cuDNN 6 或更高版本,以及一块可以兼容这个版本的工具包和 CUDA Computer Capability 3.0 或更高版本的 GPU 卡。macOS 上 1.2 版本以上的 TensorFlow 再也不支持 GPU 加速。
详情请参考安装 TensorFlow。
官方使用 Bazel 在 Ubuntu 和 macOS 构建 TensorFlow。在 Windows 系统下使用 Windows 版本 Bazel 或者 Windows 版 CMake 构建如今还在试验过程当中,查看 从源代码构建 TensorFlow 。
IBM 在 S822LC 高性能计算系统上使用 NVIDIA NVLink 链接线链接两块 POWER8 处理器和四块 NVIDIA Tesla P100 GPU 以使 PowerAI 适合进行深度学习。开发者可以在运行 OpenPOWER Linux 的 IBM Power System 上构建 TensorFlow。要了解更多信息能够查看深度学习在 OpenPOWER 上: 在 OpenPOWER Linux 系统上构建 TensorFlow 。
不少社区或供应商支持的构建程序也可用。
为了支持在更普遍的处理器和非处理器架构上使用 TensorFlow,Google 为供应商提供了一个新的抽象接口,实现用于加速线性代数(XLA)的新硬件后端,XLA 是一个专为线性代数计算的特定领域编译器,它能够用于优化 TensorFlow 计算过程。
当前,因为 XLA 仍是实验性的,TensorFlow 仍是在 X64 和 ARM64 CPU 架构上受支持,被测试和构建。在 CPU 架构上,TensorFlow 经过使用矢量处理扩展来实现加速线性代数计算。
以 Intel CPU 为中心的 HPC 体系结构(如 Intel Xeon 和 Xeon Phi 系列)经过使用 Intel 数学核心函数库来实现深度神经网络基元,从而得到加速线性代数计算。Intel 也提供了拥有优化线性代数库的预构建的 Python 优化发行版。
其余供应商,例如 Synopsys 和 CEVA,使用映射和分析器程序转换 TensorFlow 流图和生成优化代码在他们的平台上运行。开发者在使用这种途径时须要移植,分析并调整结果代码。
TensorFlow 支持特定的 NVIDIA GPU ,这些 GPU 可以兼容相关版本的 CUDA 工具包并符合相关的性能标准。尽管一些社区努力在 OpenCL 1.2 兼容的 GPU (好比 AMD 的)上运行 TensorFlow,OpenCL 支持还是一个正在计划建设的项目,
据 Google 称,基于 TPU 的流图比 CPU 或 GPU 上执行性能好 15-30 倍,而且很是节能。Google 将 TPU 设计成一个外部加速器,能够插入串行 ATA 硬盘插槽,并经过 PCI Express Gen3 x16 接口链接主机,从而实现高带宽吞吐。
Google TPU 是矩阵处理器而不是矢量处理器,而且神经网络不须要高精度的数学运算,而是使用大规模并行的低精度整数运算。绝不奇怪,矩阵处理器(MXU)结构具备 65,536 8-bit 乘法器,并经过脉动阵列结构波动推进数据,就像经过心脏的血液同样。
这种设计是一种复杂的指令集计算(CISC)结构,虽然是单线程的,但容许单个高级指令触发 MXU 上的多个低级操做,每次循环可能会执行 128,000 条指令,而不用访问内存。
所以,与 GPU 阵列或者多指令集、多数据 CPU HPC 集群相比,TPU 能够得到巨大的性能提高和能效比率。经过评估每一个周期中 TensorFlow 流图中每一个预备执行节点,TPU 相比其余架构,大大减小了深度学习神经网络训练时间,
通常来讲,TensorFlow 能够在任何支持 64 位 Python 开发环境的平台上运行。这个环境足以训练和测试大多数简单的例子和教程。然而,大多数专家认为,对于研究或专业开发,强烈推荐使用 HPC 平台。
因为深度学习计算量很是大,所以具备向量扩展的高速多核 CPU 以及一个或多个具备高端 CUDA 支持的 GPU 是深度学习的普通标准。大多数专家还建议要注意 CPU 和 GPU 缓存,由于内存传输操做的能源消耗大,对性能不利。
深度学习的性能表现有两种模式须要考虑:
用于深度学习的虚拟机(VMS)如今最适用于 CPU 为中心多核心可用的硬件体系。由于主机操做系统控制了 CPU, GPU 这些物理设备,因此在虚拟机上实现加速很复杂。有两种已知方法:
在 Docker 容器或者 Kubernetes 容器集群系统上运行 TensorFlow 有不少优点。TensorFlow 能够将流图做为执行任务分发给 TensorFlow 服务器集群,而这些服务集群实际上是映射到容器集群的。使用 Docker 的附加优点是 TensorFlow 服务器能够访问物理 GPU 核心(设备)并为其分配特定的任务。
开发者还能够经过安装社区构建的 Docker 镜像,在 PowerAI OpenPOWER 服务器上的 Kubernetes 容器集群系统中部署 TensorFlow,如“在 OpenPOWER 服务器上使用 PowerAI 的 Kubernetes 系统进行 TensorFlow 训练 ”。
TensorFlow 云安装有几种选项:
尽管 Google 在 C
++ 中实现了 TensorFlow 核心代码,可是它的主要编程语言是 Python,并且这个 API 是最完整的,最强大的,最易用的。更多有关信息,请参阅 Python API 文档。Python API 还具备最普遍的文档和可扩展性选项以及普遍的社区支持。
除了 Python 以外,TensorFlow还支持如下语言的 API,但不保证稳定性:
C
++。TensorFlow C
++ API 是下一个最强大的 API,可用于构建和执行数据流图以及 TensorFlow 服务。更多有关 C
++ API 的信息,请参阅C++ API。有关 C
++ 服务 API 的更多信息,请参阅 TensorFlow 服务 API 参考。Google 已经定义了一个外部函数接口(FFI)来支持其余语言绑定。该接口使用 C
API 暴露了 TensorFlow C
++ 核心函数。FFI 是新的,可能不会被现有的第三方绑定使用。
一项对 GitHub 的调查显示,有如下语言的社区或供应商开发的第三方 TensorFlow 绑定 C
#,Haskell, Julia,Node.js,PHP,R,Ruby,Rust 和 Scala。
如今有一个通过优化的新 TensorFlow-Lite Android 库来运行 TensorFlow 应用程序。更多有关信息,请参考 What's New in Android: O Developer Preview 2 & More。
Keras 的层和模型彻底兼容纯粹的 TensorFlow tensor。所以,Keras 为 TensorFlow 提供了一个很好的模型定义插件。开发者甚至能够将 Keras 与 其余 TensorFlow 库一块儿使用。有关详细信息,请参考 使用 Keras 做为 TensorFlow 的简要接口: 教程。
TensorFlow 只是许多用于机器学习的开源软件库之一。可是,根据它的 GitHub 项目数量,它已经成为被最普遍采用的深度学习框架之一。在本教程中,您了解了 TensorFlow 的概述,了解了哪些平台支持它,并查看了安装注意事项。
若是你准备使用 TensorFlow 查看一些示例,请查看 机器学习算法加快训练过程 和 使用 PowerAI notebooks 进行图像识别训练中的开发者代码模式。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、React、前端、后端、产品、设计 等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。