TensorFlow 2.11 新功能?
2022 年 11 月 21 日

TensorFlow 和 Keras 团队发布

TensorFlow 2.11 已发布!此版本的主要亮点包括 DTensor 的增强功能、Keras 优化器迁移的完成、实验性 StructuredTensor 的引入、用于 Keras 的新的 warmstart 嵌入实用程序、新的组归一化 Keras 层、TensorFlow Decision Forest 模型的原生 TF Serving 支持等等。让我们来看看这些新功能。

TensorFlow 核心

DTensor

DTensor 是一个 TensorFlow 分布式处理 API,它允许模型无缝地从数据并行迁移到基于单程序多数据 (SPMD) 的模型并行,包括空间分区。它为您提供了轻松训练模型的工具,这些模型的模型权重或输入非常大,无法容纳在单个设备上。我们在 TensorFlow v2.11 中做了几个更新。

DTensor 支持 tf.train.Checkpoint
现在您可以使用 tf.train.Checkpoint 对 DTensor 模型进行检查点。保存和恢复分片 DVariable 将执行高效的分片保存和恢复。所有 DVariable 必须具有相同的主机网格,并且 DVariable 和常规变量不能一起保存。旧的基于 DCheckpoint 的检查点 API 将在下一个版本中删除。您可以在此 教程 中了解有关检查点的更多信息。

新的统一加速器初始化 API
我们引入了一个新的统一加速器初始化 API tf.experimental.dtensor.initialize_accelerator_system,该 API 应在所有三种受支持的加速器类型(CPU、GPU 和 TPU)以及所有受支持的部署模式(多客户端和本地)中调用。旧的初始化 API 具有专门的函数,用于 CPU/GPU 多客户端TPU,将在下一个版本中删除。

默认情况下启用所有缩减优化
DTensor 默认情况下为 GPU 和 CPU 启用所有缩减优化传递,以将所有独立的所有缩减合并为一个。预计优化将减少小型所有缩减操作的开销,我们的实验表明 BERT 的训练步长时间有了显着提高。可以通过将环境变量 ‘DTENSOR_ENABLE_COMBINE_ALL_REDUCES_OPTIMIZATION’ 设置为 0 来禁用优化。

用于分布式 tf.data.Dataset 的新包装器
我们为分布式 tf.data.Dataset 引入了一个包装器,tf.experimental.dtensor.DTensorDatasetDTensorDataset API 可用于通过将输入数据正确打包到相应的设备上来有效地处理直接将输入数据加载为 DTensor。它可用于数据和模型并行训练设置。有关更多示例,请参阅上面链接的 API 文档。

Keras

新的 Keras 优化器 API 已准备就绪

TensorFlow 2.9 中,我们发布了新的 Keras 优化器 API 的实验版本, tf.keras.optimizers.experimental,以提供更统一和扩展的内置优化器目录,这些优化器可以更容易地定制和扩展。在 TensorFlow 2.11 中,我们很高兴地分享优化器迁移已完成,新的优化器默认情况下已启用。

旧的 Keras 优化器在 tf.keras.optimizers.legacy 下可用。这些永远不会被删除,但它们不会看到任何新的功能添加。新的优化器将仅基于 tf.keras.optimizers.Optimizer (新的基类)实现。

大多数用户不会受到此更改的影响,但如果您发现工作流程失败,请查看 发行说明 以了解可能存在的问题,以及 API 文档 以查看工作流程中使用的任何 API 是否已更改。

新的 GroupNormalization 层

TensorFlow 2.11 添加了一个新的组归一化层,keras.layers.GroupNormalization。组归一化将通道分成组,并在每组内计算均值和方差以进行归一化。根据经验,如果学习率随批大小线性调整,则其准确性在各种较小的批大小范围内比批次归一化更稳定。有关更多详细信息,请参阅 API 文档,并试用!

显示归一化技术之间差异的图表。

Warmstart 嵌入实用程序

TensorFlow 2.11 包含一个新的实用程序函数:keras.utils.warmstart_embedding_matrix。它允许您从另一组嵌入向量(通常在之前的运行中训练)初始化新词汇表的嵌入向量。

new_embedding = layers.Embedding(vocab_size, embedding_depth)
new_embedding.build(input_shape=[None])
new_embedding.embeddings.assign(
    tf.keras.utils.warmstart_embedding_matrix(
        base_vocabulary=base_vectorization.get_vocabulary(),
        new_vocabulary=new_vectorization.get_vocabulary(),
        base_embeddings=base_embedding.embeddings,
        new_embeddings_initializer="uniform")

有关完整演练,请参阅 Warmstart 嵌入教程

TensorFlow Decision Forests

随着 TensorFlow 2.11 的发布,TensorFlow Serving 添加了对 TensorFlow Decision Forests 模型的原生支持。这极大地简化了在 Google Cloud 和其他生产系统中提供 TF-DF 模型。查看新的 TensorFlow Decision Forests 和 TensorFlow Serving 教程,以及新的 进行预测 教程,以了解更多信息。

您是否知道 TF-DF 预先安装在 Kaggle 笔记本中?只需使用 import tensorflow_decision_forests as tfdf 导入 TF-DF 并开始建模。

TensorFlow Lite

TensorFlow Lite 现在支持新的操作,包括 tf.unsorted_segment_min, tf.atan2 和 tf.sign. 我们还更新了 tfl.mul 以支持 complex32 输入。

结构化张量

添加了 tf.experimental.StructuredTensor 类。此类提供了一种灵活且原生 TensorFlow 的方式来对结构化数据(如协议缓冲区或 pandas 数据帧)进行编码。StructuredTensor 允许您编写可读的代码,这些代码可用于 tf.function、Keras 和 tf.data。以下是一个简短的示例。

documents = tf.constant([
    "Hello world",
    "StructuredTensor is cool"])

@tf.function
def parse_document(documents):
tokens = tf.strings.split(documents)
token_lengths = tf.strings.length(tokens)

ext_tokens = tf.experimental.StructuredTensor.from_fields_and_rank(
    {"tokens":tokens,
      "length":token_lengths}, rank=documents.shape.rank + 1)

return tf.experimental.StructuredTensor.from_fields_and_rank({
    "document":documents,
    "tokens":ext_tokens}, rank=documents.shape.rank)

st = parse_document(documents)


StructuredTensor 可以通过索引或字段名进行访问。

>>> st[0].to_pyval()
{'document': b'Hello world',
'tokens': [{'length': 5, 'token': b'Hello'},
  {'length': 5, 'token': b'world'}]}


在幕后,字段被编码为张量和不规则张量。

>>> st.field_value(("tokens", "length"))

<tf.RaggedTensor [[5, 5], [16, 2, 4]]>

您可以在上面链接的 API 文档中了解更多信息。

即将推出

弃用 Estimator 和 Feature Column

从 TensorFlow 2.12 版本开始,TensorFlow 1 的 Estimator 和 Feature Column API 将被视为完全弃用,取而代之的是 Keras 中健壮且完整的等效 API。作为运行 v1.Session 样式代码的模块,Estimator 和 Feature Column 难以正确编写,尤其容易出现意外行为,特别是与 TensorFlow 2 中的代码结合使用时。

作为 TensorFlow 1 中大多数模型开发的主要入口,我们已尽力确保其替代品具有功能奇偶性和积极支持。从现在开始,使用 Estimator API 构建的模型应迁移到 Keras API,通过 Feature Column 进行特征预处理,具体来说是 迁移到 Keras 的预处理层 - 无论是直接还是通过 TF 2.12 的一站式实用程序 tf.keras.utils.FeatureSpace(构建在其之上)。

弃用将在整个 TensorFlow 文档中反映出来,并在运行时发出警告,详细说明如何避免弃用行为并采用其替代方法。

在 TF 2.11 之后弃用 Python 3.7 支持

TensorFlow 2.11 将是最后一个支持 Python 3.7 的 TF 版本。由于 TensorFlow 依赖于 NumPy,我们旨在遵循 numpy 的 Python 版本支持策略,这将有利于我们的内部和外部用户,并确保我们的软件安全。此外,最近报告的几个漏洞要求我们提升 numpy 版本,但事实证明与 Python 3.7 不兼容,进一步支持了弃用 Python 3.7 支持的决定。

下一步

查看 发行说明以获取更多信息。要保持最新,您可以阅读 TensorFlow 博客,关注 twitter.com/tensorflow,或订阅 youtube.com/tensorflow。如果您构建了一些想分享的内容,请将其提交到我们的社区亮点 goo.gle/TFCS。如有反馈,请在 GitHub 上提交问题或发布到 TensorFlow 论坛。谢谢!

下一篇文章
What’s new in TensorFlow 2.11?

发布者:TensorFlow 和 Keras 团队 TensorFlow 2.11 已发布!此版本亮点包括对 DTensor 的增强,Keras 优化器迁移的完成,实验性 StructuredTensor 的引入,Keras 的新的预热嵌入实用程序,新的分组规范化 Keras 层,对 TensorFlow Decision Forest 模型的原生 TF Serving 支持等等。…