当前位置: 首页 > 科技观察

继续前行:TensorFlow2.4中的新功能列表!

时间:2023-03-22 14:24:06 科技观察

TensorFlow2.4正式发布!凭借对分布式训练和混合精度的更多支持、新的Numpy前端以及用于监视和诊断性能瓶颈的工具,此版本突出了新功能、性能和扩展增强功能。tf.distribute的新功能参数服务器策略在2.4版本中,实验性地引入了对tf.distribute模块的支持,可以通过ParameterServerStrategy和自定义训练循环来异步训练Keras模型。与MultiWorkerMirroredStrategy一样,ParameterServerStrategy是一个多worker数据并行策略;然而,它的梯度更新方法是异步执行的。ParameterServerStrategyhttps://tensorflow.google.cn/api_docs/python/tf/distribute/experimental/ParameterServerStrategy参数服务器训练集群包括工作节点和参数服务器。变量在参数服务器上创建,然后在每一步由工作节点读取和更新。变量在每个工作节点上独立读取和更新,无需任何同步。由于worker节点不相互依赖,这种策略具有worker容错的优势,并且在使用可抢占服务器时会有所帮助。要开始使用此策略,请查看参数服务器培训教程。本教程介绍如何设置ParameterServerStrategy并说明如何使用ClusterCoordinator类创建资源、调度函数和处理任务失败。参数服务器训练教程https://tensorflow.google.cn/tutorials/distribute/parameter_server_training工作节点镜像策略已经过了实验阶段,现在是稳定API的一部分。与单个工作者副本MirroredStrategy一样,MultiWorkerMirroredStrategy通过同步数据并行性实现分布式训练。但是使用MultiWorkerMirroredStrategy,您可以在多台机器上进行训练,每台机器都有多个GPU。MultiWorkerMirroredStrategyhttps://tensorflow.google.cn/api_docs/python/tf/distribute/MultiWorkerMirroredStrategyMirroredStrategyhttps://tensorflow.google.cn/api_docs/python/tf/distribute/MirroredStrategy同步训练时,每个worker节点将数量在输入数据的不同切片上计算前向和反向传递的次数,并在每个步骤结束时对梯度求和。对于这个称为AllReduce的聚合,MultiWorkerMirroredStrategy使用集合操作来保持变量同步。集成运算是TensorFlow图中的单个运算符,它会根据硬件、网络拓扑和张量大小自动选择TensorFlow运行时中的AllReduce算法。集合操作还实现了其他集合操作,例如Broadcast和AllGather。集体操作https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/collective_ops.py要开始使用MultiWorkerMirroredStrategy,请查看MultiWorkerMirroredStrategywithKeras教程,该教程已更新有关数据集分片的详细信息,保存/加载使用分布策略训练的模型,以及使用BackupAndRestore回调进行故障恢复。使用Keras进行多人训练https://tensorflow.google.cn/tutorials/distribute/multi_worker_with_kerasBackupAndRestorehttps://tensorflow.google.cn/api_docs/python/tf/keras/callbacks/experimental/BackupAndRestore如果你不熟悉分布式训练并想知道如何开始,或者有兴趣在谷歌云平台(GCP)上进行分布式训练,请参阅这篇博文了解关键概念和步骤的介绍。Keras相关更新混合精度在TensorFlow2.4中,Keras混合精度API已经通过了实验阶段,现在是一个稳定的API。大多数TensorFlow模型使用float32dtype;但也有使用较少内存的低精度类型(如float16)。混合精度是指在同一模型中使用16位和32位浮点类型来加速训练。该API使模型在GPU上的执行速度提高了3倍,在TPU上的速度提高了60%。Keras混合精度APIhttps://tensorflow.google.cn/api_docs/python/tf/keras/mixed_precision要使用混合精度API,必须使用Keras层和优化工具,但不需要使用其他Keras类,例如模型或损失。如果您对如何使用此API实现性能优化感兴趣,请查看混合精度教程。混合精度教程https://tensorflow.google.cn/guide/mixed_precision优化工具该版本支持重构tf.keras.optimizers.Optimizer类,使model.fit或自定义训练循环的用户可以编写任何合适的优化工具训练代码。所有内置的tf.keras.optimizer.Optimizer子类现在都支持gradient_transformers和gradient_aggregator参数,这使您可以轻松定义自定义梯度变换。tf.keras.optimizers.Optimizerhttps://tensorflow.google.cn/api_docs/python/tf/keras/optimizers/Optimizer通过重构,您现在可以在编写自定义训练循环时将损失张量直接传递给Optimizer.minimize:tape=tf.GradientTape()withtape:y_pred=model(x,training=True)loss=loss_fn(y_pred,y_true)#如下图,在使用损失“张量”时,可以使用“tf.GradientTape”交付。optimizer.minimize(loss,model.trainable_variables,tapetape=tape)此类更改旨在将Model.fit和自定义训练循环从优化器的细节中解放出来,允许您编写任何工具的训练代码。函数式API模型构建的内部改进最后,在Keras中,TensorFlow2.4支持对KerasFunctionalAPI的主要内部结构进行重构,从而减少内存消耗并简化函数模型构建的触发逻辑。进行此重构还可以确保TensorFlowOpLayers的行为可预测并与CompositeTensor类型签名一起使用。引入tf.experimental.numpyTensorFlow2.4实验性地以tf.experimental.numpy的形式引入了对NumPyAPI子集的支持。您可以使用此模块运行由TensorFlow加速的NumPy代码。由于此API构建在TensorFlow之上,因此它提供对所有TensorFlowAPI的访问,与TensorFlow无缝互操作,并通过编译和自动矢量化进行优化。例如,TensorFlowND数组可以与NumPy函数交互,同样,TensorFlowNumPy函数可以接受不同类型的输入,包括tf.Tensor和np.ndarray。importtensorflow.experimental.numpyastnp```#在输入管道dataset中使用NumPy代码=tf.data.Dataset.from_tensor_slices(tnp.random.randn(1000,1024)).map(lambdaz:z.clip(-1,1)).batch(100)#通过NumPy代码计算梯度defgrad(x,wt):withtf.GradientTape()astape:tape.watch(wt)output=tnp.dot(x,wt)output=tf.sigmoid(output)returntape.gradient(tnp.sum(output),wt)tf.experimental.numpyhttps://tensorflow.google.cn/api_docs/python/tf/experimental/numpyNumPyAPI实验支持https://github.com/tensorflow/community/blob/master/governance/api-reviews.md#experimental-apis您可以参考TensorFlow指南上的NumPyAPI,了解有关使用此API的更多信息。TensorFlow上的NumPyAPI指南https://tensorflow.google.cn/guide/tf_numpy新的性能分析器工具TensorFlowProfiler中的Multi-worker支持TensorFlowProfiler是一套用于评估TensorFlow模型训练性能和资源消耗的工具。TensorFlowProfiler可帮助您了解模型中运算符的硬件资源消耗、诊断瓶颈并最终加快训练速度。TensorFlowProfilerhttps://tensorflow.google.cn/guide/profiler之前版本的TensorFlowProfiler支持监控多GPU、单机训练作业。现在在2.4版本中,您可以分析MultiWorkerMirroredStrategy训练作业的性能。例如,您可以使用采样模型API执行按需分析,并连接到MultiWorkerMirroredStrategy工作节点上正在使用的同一服务器端口:#Starttheperformanceanalyzerserverbeforethemodelruns.tf.profiler.experimental.server.start(6009)#Insertmodelcodehere...#比如你的workerIP地址是10.0.0.2,10.0.0.3,10.0.0.4,你想执行2秒时钟性能分析。#性能分析数据将保存到GoogleCloudStorage路径“your_tb_logdir”。tf.profiler.experimental.client.trace('grpc://10.0.0.2:6009,grpc://10.0.0.3:6009,grpc://10.0.0.4:6009','gs://your_tb_logdir',2000)采样模型https://tensorflow.google.cn/guide/profiler#sampling_mode或者,您可以通过向捕获配置文件工具提供工作节点地址来使用TensorBoardProfiler插件。分析完成后,您可以使用新的PodViewer工具选择训练步骤并查看所有工作节点的分步时间类细分。PodViewer工具https://tensorflow.google.cn/guide/profiler#pod_viewer有关如何使用TensorFlowProfiler的更多信息,请查看新发布的GPU性能指南。本指南描述了您在分析模型训练作业时可能遇到的常见情况,并提供了调试工作流来帮助您优化性能,无论您是使用单个GPU、多个GPU还是多台机器进行训练,都可以从中受益。GPU性能指南https://tensorflow.google.cn/guide/gpu_performance_analysisTFLiteProfiler在2.4版本中,您还可以在Android中启用TFLite内部结构的跟踪。现在您可以使用适用于Android的TFLiteProfiler来识别性能瓶颈。TFLite性能评估指南介绍了如何使用AndroidStudioCPUProfiler和SystemTrace应用添加跟踪事件、启用TFLite跟踪和捕获跟踪。使用Android系统TraceApp进行跟踪的TFLite性能测量示例指南https://tensorflow.google.cn/lite/performance/measurement#trace_tensorflow_lite_internals_in_android提供GPU支持新的TensorFlow2.4可以与CUDA11和cuDNN8一起运行以支持最新的NVIDIAAmpereGPU架构推向市场。有关CUDA11功能的更多信息,请查看此NVIDIA开发者博客。NVIDIA开发者博客https://developer.nvidia.com/blog/cuda-11-features-revealed/此外,我们还将在具有Ampere的GPU上默认启用对TensorFloat-32的支持。TensorFloat-32(简称“TF32”)是NVIDIAAmpereGPU的一种数学模式,它使某些float32运算(例如矩阵乘法和卷积)在AmpereGPU上运行得更快,但精度会降低。有关详细信息,请参阅tf.config.experimental.enable_tensor_float_32_execution文档。tf.config.experimental.enable_tensor_float_32_executionhttps://tensorflow.google.cn/api_docs/python/tf/config/experimental/enable_tensor_float_32_execution