博客

技术分享

Tensor Flow 2.18发行说明

2025.01.01 43分钟阅读

图片

01
TensorFlow 2.18 变更

TensorFlow 2.18 已经发布!此版本(和 2.17 版本)的亮点包括 NumPy 2.0、LiteRT 存储库、CUDA 更新、封闭式 CUDA 等。有关完整的发布说明,请访问 https://github.com/tensorflow/tensorflow/blob/r2.18/RELEASE.md 的TensorFlow 2.18 Github。

NumPy 2.0

已发布的 TensorFlow 2.18 版本将包括对 NumPy 2.0 的支持。虽然大多数 TensorFlow API 将与 NumPy 2.0 无缝协作,但这可能会打破一些边缘使用情况,例如边界外转换错误和 NumPy 标量表示错误。您可以参考 https://github.com/tensorflow/tensorflow/pull/73730 内的常见解决方案。

NumPy 的类型升级规则已更改(详见 NEP 50 https://numpy.org/neps/nep-0050-scalar-promotion.html#nep50)。这可能会改变计算的精度,导致类型错误或结果的数值变化。请参阅 NumPy 2 https://numpy.org/devdocs/numpy_2_0_migration_guide.html#numpy-2-migration-guide 迁移指南。

TensorFlow 更新了一些 TensorFlow 张量 API,以保持与 NumPy 2.0 的兼容性,同时保留 NumPy 1.x 中的边界外转换行为。

LiteRT 存储库

TensorFlow 正在对 LiteRT(以前称为 TFLite)的开发方式进行更改。在接下来的几个月里,他们将逐步将 TFLite 的代码库过渡到 LiteRT。迁移完成后,将开始直接通过 LiteRT 存储库接受贡献。将不再有任何二进制 TFLite 版本,开发人员需要切换到 LiteRT 以获取最新更新。

封闭式 CUDA

如果你从源代码构建 TensorFlow,Bazel 现在将下载 CUDA、CUDNN 和 NCCL 发行版的特定版本,然后将这些工具用作各种 Bazel 目标中的依赖项。这为 Google ML 项目和支持的 CUDA 版本提供了更多可重复的建构,因为建构不再依赖于本地安装的版本。此处 https://github.com/openxla/xla/blob/main/docs/hermetic_cuda.md#environment-variables-controlling-the-hermetic-cudacudnn-versions 提供了更多详细信息。

CUDA 更新

TensorFlow 二进制分布现在附带了专用的 CUDA 内核,用于计算能力为 8.9 的 GPU。这提高了流行的 Ada Generation GPU 的性能。

为了控制 Python 轮的大小,他们决定不再为计算能力 5.0 提供 CUDA 内核。这意味着预编译的 Python 包支持的最古老的 NVIDIA GPU 代现在是 Pascal 代(计算能力 6.0)。对于 Maxwell 的支持,他们要么建议继续使用 TensorFlow 2.16 版本,要么从源代码编译 TensorFlow。只要使用的 CUDA 版本仍然支持 Maxwell GPU,后者就有可能实现。

 

02
TensorFlow 2.18 其他更改和错误修复

突破性变化

  • tf.lite

  • Interpreter:

  • tf.lite.Interpreter 发出未来删除的警告,并将重定向通知发送到ai_edge_litert.interpreter 的新位置。有关详细信息,请参阅迁移指南。

  • C API:

  • 添加了一个可选的第四个参数 TfLiteOperatorCreate,这是朝着更清洁的TfLiteOperator API迈进的一步。函数 TfLiteOperatorCreate 最近在 2024 年 7 月 11 日发布的 TensorFlow Lite 2.17.0 版本中添加,我们预计不会有太多代码使用此函数。通过将 nullptr 作为新的第四个参数传递,可以很容易地解决任何代码损坏问题。
  • 为了改善代码健康状况,CUDA 版本中禁用了 TensorRT 支持。

  • 添加了封闭式 CUDA 支持。

修复 Bug 和其他更改

  • tf.data

  • 在 map 中添加可选的 synchronous 参数,以指定 map 应同步运行,而不是在 options.experimental_optimization.map_parallelization=True 时可并行运行。与设置 num_parallel_calls=1 相比,这节省了内存。

  • 在 map 中添加可选的 use_unbounded_threadpool 参数,以指定 map 应使用无界线程池,而不是基于计算机上内核数量的默认池。这可以提高执行 IO 或以其他方式释放 CPU 的映射函数的吞吐量。

  • 添加 tf.data.experimental.get_model_proto,允许用户查看数据集迭代器内的分析模型。

     

  • tf.lite

  • Dequantize 操作支持 TensorType_INT4。

  • 此更改包括每个通道的去量化。

  • 添加对 stablehlo.composite 的支持。

  • EmbeddingLookup 操作支持每通道量化和 TensorType_INT4 值。

  • FullyConnected 操作支持 TensorType_INT16 激活和每通道 TensorType_Int4 权重量化。

     

  • tf.tensor_scatter_updatetf.tensor_scatter_add 和其他 reduce 类型。

  • 支持 bad_indices_policy。

 

03
Keras 3.6 变更

亮点

  • 新的文件编辑器实用程序:keras.saving.KerasFileEditor。使用它可以检查、比较、修改和重新保存 Keras 权重文件。此处 https://colab.research.google.com/drive/1b1Rxf8xbOkMyvjpdJDrGzSnisyXatJsW?usp=sharing 查看基本工作流程。

  • 新的 keras.utils.Config。用于管理实验配置参数的配置类。

     

突破性变化

  • 当使用 keras.utils.get_file,且 extract=True 或 untar=True 时,返回值将是提取目录的路径,而不是存档的路径。

     

其他更改和添加

  • 现在 fit()evaluate()predict() 中的日志记录是异步的。这使得在加速器上可以 100% 紧凑地堆叠 train_step 调用(例如,在 TPU 上运行小型模型时)。

  • 如果您使用的是依赖于 on_batch_end 的自定义回调,这将禁用异步日志记录。您可以通过在回调中添加 self.async_safe = True 来强制恢复。请注意,默认情况下,TensorBoard 回调不被认为是异步安全的。像进度条这样的默认回调是异步安全的。

     

  • 添加了 keras.saving.KerasFileEditor 实用程序,用于检查、比较、修改和重新保存 Keras 权重文件。

  • 添加了keras.utils.Config  类。它的行为就像一本字典,有一些很好的功能:

  • 除了字典样式外,所有条目都可以作为属性访问和设置(例如 config.foo = 2 或 config["foo"] 都是有效的)

  • 您可以通过 config.to_json() 轻松地将其序列化为 JSON。

  • 您可以通过 config.freeze() 轻松冻结它,防止将来发生更改。

  • 添加了按位 numpy 操作:

  • bitwise_and

  • bitwise_invert

  • bitwise_left_shift

  • bitwise_not

  • bitwise_or

  • bitwise_right_shift

  • bitwise_xor

  • 添加了numpy op keras.ops.trunc。
  • 添加了keras.ops.dot_product_attention。
  • 允许无限的 PyDataset 实例使用多线程。
  • 在 keras.saving 中添加了 verbose 参数。ExportArchive.write_out() 方法用于导出 TF SavedModel。
  • 在 keras.ops.normalize 中添加了 epsilon 参数。
  • 添加了 Model.get_state_tree() 方法,用于检索将变量路径映射到变量值的嵌套字典(可以是 numpy 数组或后端张量(默认))。这对于推出自定义 JAX 训练循环非常有用。
  • 添加了图像增强/预处理层 keras.layers.AutoContrastkeras.layers.Solarization.。
  • 添加了数学操作 keras.ops.logdet。
  • 添加了 keras.layers.Pipeline 类,将一系列层应用于输入。此类对于构建预处理管道非常有用。与 Sequential 模型相比,Pipeline 有几个重要区别:
  • 它不是模型,只是一个普通层。

  • 当管道中的层与 tf.data 兼容时,管道也将保持 tf.data 兼容性,与您使用的后端无关。

相关贴子

敬请登记。

登记
本网站受 reCAPTCHA 保护,适用 Google隐私政策和服务条款。