喜大普奔,在祖国70岁生日的这一天,TensorFlow2.0正式Release,本文主要介绍一下TensorFlow2.0的新特性。TensorFlow 1.15 官方已经宣布该版本是1.X的最后一个版本了。

主要特点和改进

TensorFlow 2.0专注于简单性和易用性,具有以下更新:

  • 使用Keras轻松构建模型,渴望执行模式
  • 在任何平台上进行生产中的稳健模型部署
  • 强大的研究实验
  • 通过减少重复并删除已经标记不再使用的端点来简化API

有关2.0最佳实践的详细信息,参照the Effective 2.0 guide

这里我强调一下渴望执行模式。TensorFlow 2.0 主推的 eager execution mode 采用和解释执行图完全不同的深度学习计算方式。 类似 PyTorch 的做法,前向计算过程把对基本计算单元(operator)的调用记 录在一个内存数据结构 tape 里,随后,反向计算过程(计算 gradients 的) 可以回溯这个 tape,以此调用 operator 对应的 gradient operator。这个 tape 提供一个操作让用户可以获取每个参数的 gradient。

Highlights

  • TF 2.0提供Keras作为用于构建和训练模型的中央高级API。 Keras提供了一些模型构建API,例如顺序,功能和子类化以及急切的执行(用于立即迭代和直观调试)以及tf.data(用于构建可扩展的输入管道)。
  • 分发策略:TF 2.0用户将能够使用tf.distribute.Strategy API通过最少的代码更改来分发培训,从而获得出色的现成性能。它支持Keras model.fit以及自定义训练循环的分布式训练。提供多GPU支持,以及对多工作人员和Cloud TPU的实验性支持
  • 功能,而不是会话。不鼓励使用传统的声明式编程模型来构建图形并通过tf.Session执行它,并通过编写常规的Python函数来代替。使用tf.function装饰器,这些函数可以转换为图形,可以远程执行,序列化并针对性能进行优化。
  • tf.train.Optimizers和tf.keras.Optimizers的统一。对TF2.0使用tf.keras.Optimizers。作为公共API删除了compute_gradients,使用GradientTape计算梯度。
  • AutoGraph将Python控制流转换为TensorFlow表达式,允许用户在装饰有tf.function的函数中编写常规Python。 AutoGraph也适用于与tf.data,tf.distribute和tf.keras API一起使用的函数。
  • 交换格式与SavedModel的统一。所有TensorFlow生态系统项目(TensorFlow Lite,TensorFlow JS,TensorFlow Serving,TensorFlow Hub)都接受SavedModels。模型状态应保存到SavedModels或从SavedModels恢复。
  • API更改:许多API符号已重命名或删除,参数名称也已更改。这些变化中的许多变化都是出于一致性和清晰性。 1.x API在compat.v1模块中仍然可用。
  • 添加环境变量TF_CUDNN_DETERMINISTIC。设置为TRUE或“ 1”将强制选择确定性cuDNN卷积和最大池算法。启用此功能后,算法选择过程本身也是确定性的。

TensorFlow 2.0与kubernetes

这两个在各自领域最火的框架,结合的工作其实业界已经有很多尝试了,包括谷歌的kubeflow。Distributed TensorFlow虽然提供了分布式能力,可以利用服务器集群加快训练,但是还有许多缺点:

  • 训练时TensorFlow各个Task资源无法隔离,很有可能会导致任务间因资源抢占互相影响。
  • 缺乏调度能力,需要用户手动配置和管理任务的计算资源。
  • 集群规模大时,训练任务的管理很麻烦,要跟踪和管理每个任务的状态,需要在上层做大量开发。
  • 用户要查看各个Task的训练日志需要找出对应的服务器,并ssh过去,非常不方便。
  • TensorFlow原生支持的后端文件系统只支持:标准Posix文件系统(比如NFS)、HDFS、GCS、memory-mapped-file。大多数企业中数据都是存在大数据平台,因此以HDFS为主。然而,HDFS的Read性能并不是很好。

而这些正是Kubernetes所擅长的地方。
当你试着去创建一个大规模TensorFlow集群时,发现并不轻松;

尤其是蚂蚁金服开源的ElasticDL,该项目是基于TensorFlow 2.0的Kubernetes-native 弹性分布式深度学习系统。


iyacontrol
1.4k 声望2.7k 粉丝

专注kubernetes,devops,aiops,service mesh。