喜庆祖国70华诞。TensorFlow2.0正式发布。本文主要介绍TensorFlow2.0的新特性。TensorFlow1.15已经正式宣布这个版本是1.X的最后一个版本。主要功能和改进TensorFlow2.0专注于简单性和易用性,并进行了以下更新:使用KerasEagerExecution模式轻松构建模型在任何平台上的生产中部署稳健的模型通过减少重复和删除已标记为已弃用的端点来简化API的强大研究实验有关2.0最佳实践的详细信息,请参阅Effective2.0指南,其中我强调了eagerexecution模式。TensorFlow2.0提倡的eagerexecution模式采用了与解释执行图完全不同的深度学习计算方式。与PyTorch的做法类似,正向计算过程将对基本计算单元(算子)的调用记录在一个内存数据结构磁带中,然后反向计算过程(梯度的计算)可以追溯到这个磁带调用对应的算子梯度算子。本磁带提供了一个操作,供用户获取每个参数的梯度。HighlightsTF2.0提供Keras作为用于构建和训练模型的中央高级API。Keras提供了多个模型构建API,例如顺序、函数和子类化以及即时执行(用于立即迭代和直观调试)和tf.data(用于构建可扩展的输入管道)。分发策略:TF2.0用户将能够使用tf.distribute.StrategyAPI以最少的代码更改分发训练,从而获得出色的开箱即用性能。它支持Kerasmodel.fit以及自定义训练循环的分布式训练。提供多GPU支持,以及对多工作器和云TPU功能而不是会话的实验性支持。构建图形并通过tf.Session执行它的传统声明式编程模型不鼓励,而是编写常规的Python函数。使用tf.function装饰器,这些函数可以转换为图形,可以远程执行、序列化和优化性能。tf.train.Optimizers和tf.keras.Optimizers的统一。为TF2.0使用tf.keras.Optimizers。移除compute_gradients作为公共API,使用GradientTape计算梯度。AutoGraph将Python控制流转换为TensorFlow表达式,允许用户在用tf.function修饰的函数中编写常规Python。AutoGraph还适用于与tf.data、tf.distribute和tf.kerasAPI一起使用的函数。交换格式与SavedModel统一。所有TensorFlow生态系统项目(TensorFlowLite、TensorFlowJS、TensorFlowServing、TensorFlowHub)都接受SavedModel。模型状态应保存到SavedModels或从中恢复。API更改:许多API符号已重命名或删除,并且参数名称已更改。其中许多更改是为了保持一致性和清晰度。1.xAPI在compat.v1模块中仍然可用。添加环境变量TF_CUDNN_DETERMINISTIC。设置为TRUE或“1”将强制选择确定性cuDNN卷积和最大池化算法。启用此功能后,算法选择过程本身也是确定性的。TensorFlow2.0和kubernetes这两个各自领域最流行的框架的结合,在业界已经有很多尝试,包括谷歌的kubeflow。DistributedTensorFlow虽然提供了分布式的能力,可以利用服务器集群来加速训练,但是它还是有很多缺点:训练时TensorFlowTask资源不能隔离,可能会因为资源抢占导致任务相互干扰。缺乏调度能力,需要用户为任务手动配置和管理计算资源。当集群规模较大时,训练任务的管理非常麻烦。要跟踪和管理每个任务的状态,需要在上层进行大量开发。要查看每个任务的训练日志,用户需要找到对应的服务器并ssh到它,非常不方便。TensorFlow原生支持的后端文件系统只支持:标准的Posix文件系统(如NFS)、HDFS、GCS、memory-mapped-file。大多数企业的数据都存在于大数据平台上,HDFS是其中的中流砥柱。但是HDFS的Read性能不是很好。而这些也正是Kubernetes擅长的地方。当你尝试创建一个大规模的TensorFlow集群时,你会发现这并不容易;特别是蚂蚁金服开源的ElasticDL,是基于TensorFlow2.0的Kubernetes原生弹性分布式深度学习系统。
