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

TensorFlow2.9上线:oneDNN提升CPU性能优化,WSL2开箱即用

时间:2023-03-14 18:41:19 科技观察

昨天,TensorFlow官方宣布:TensorFlow2.9来了!距上次2.8更新仅三个月。新版本的亮点包括:oneDNN的性能改进;发布DTensor,这是一种用于从数据并行无缝迁移到模型并行的新API;核心库改进,包括Eigen、tf.function统一,以及对WindowsWSL2新支持的支持;还为tf.function回溯和Keras优化器发布了新的实验性API。下面我们来看看TensorFlow2.9中的具体改进。TensorFlow2.9新特性提升CPU性能:oneDNNTensorFlow与英特尔合作,将oneDNN性能库与TensorFlow集成,以在英特尔CPU上实现最高性能。从TensorFlow2.5开始,TensorFlow对oneDNN进行了实验性支持,可以提供高达4倍的性能提升。在TensorFlow2.9中,oneDNN优化在Linuxx86软件包和具有神经网络硬件功能的CPU(例如AVX512_VNNI、AVX512_BF16、AMX等)上默认启用,这些在IntelCascadeLake和更新的CPU上可以找到。英特尔表示:我们很高兴与GoogleAI合作,让oneDNN库成为TensorFlow2.9中默认的后端CPU优化!TensorFlow用户现在将看到由我们的开放软件优化驱动的AI性能加速,无需更改代码!运行启用了oneDNN优化的TensorFlow的用户可能会观察到与关闭优化时略有不同的数值结果,这是由于浮点舍入方法和顺序的差异,这可能会引入轻微的错误。如果以上给您带来麻烦,请在运行TensorFlow程序之前通过设置TF_ENABLE_ONEDNN_OPTS=0关闭优化。如果您想重新启用它们,请在运行TensorFlow程序之前设置TF_ENABLE_ONEDNN_OPTS=1。要验证优化是否已启用,请在程序日志中查找以oneDNNcustomoperationsareon开头的消息。DTensorDTensor是一种用于分布式模型处理的新TensorFlowAPI,它允许模型从数据并行无缝迁移到基于单程序多数据(SPMD)的模型并行。DTensor的核心设计原则如下:Device-independentAPI:这允许在CPU、GPU或TPU上使用相同的模型代码,包括跨设备类型划分的模型;多客户端执行:移除协调器,让每个任务驱动其本地连接的设备,允许模型在不影响启动时间的情况下进行缩放;globalperspectiveVSper-replica:传统上使用TensorFlow,分布式模型代码是围绕replicas编写的,但是使用DTensor,模型代码是从全局角度编写的,每个replica代码都是由DTensorruntime生成和运行的。TensorFlow官方已经开发了多篇关于DTensor的入门教程。参考资料如下:DTensorConcept:https://www.tensorflow.org/guide/dtensor_overviewDistributedMLwithDTensors:https://www.tensorflow.org/tutorials/distribute/dtensor_ml_tutorialCombineDTensorsandKeras:https://www.tensorflow.org/tutorials/distribute/dtensor_keras_tutorialtf.function新版本的TraceType改进了tf.function回溯(retraces)方法,使其更简单、更容易预测和配置。tf.function的所有参数都分配了一个tf.types.experimental.TraceType。自定义用户类可以使用跟踪协议(tf.types.experimental.SupportsTracingProtocol)声明TraceType。TraceType系统使追溯规则易于理解。对WSL2WSL2的支持允许开发人员直接在Windows上运行Linux环境,而无需传统的虚拟机或双启动设置。TensorFlow现在支持开箱即用的WSL2,包括GPU加速。确定性行为APItf.config.experimental.enable_op_determinism使TensorFlow的操作具有确定性。确定性意味着如果用户使用相同的输入多次运行一个op,则该op每次都返回完全相同的输出,这对于调试模型很有用。通常,许多操作是非确定性的,因为操作中使用了线程,并且这些线程可以以非确定性顺序添加浮点数。TensorFlow2.8引入了一个API来使操作具有确定性,而TensorFlow2.9在某些情况下提高了确定性性能。如果您希望TensorFlow模型确定性地运行,只需将以下内容添加到程序的开头:tf.keras.utils.set_random_seed(1)tf.config.experimental.enable_op_determinism()第一行为Python、NumPy和TensorFlow设置随机种子,这是确定性所必需的。第二行使每个TensorFlow操作具有确定性。请注意,确定性通常以性能为代价,因此当启用操作确定性时,您的模型可能运行得更慢。使用Keras优化训练TensorFlow2.9中添加了KerasOptimizerAPI的新实验版本tf.keras.optimizers.experimental。API提供了一个更加统一和扩展的内置优化器目录,用户可以更轻松地对其进行定制和扩展。在未来的版本中,tf.keras.optimizers.experimental.Optimizer(和子类)将取代tf.keras.optimizers.Optimizer(和子类),这意味着使用旧版本Keras优化器的工作流将自动切换到新的优化器.以下是新优化器类的一些亮点:一些模型的训练速度越来越快;编写自定义优化器更容易;内置支持模型权重的移动平均值(Polyak平均)。