本文档解释了 Keras 3 的多后端架构,该架构使得代码无需修改即可在 TensorFlow、JAX、PyTorch、NumPy 和 OpenVINO 后端上运行。有关特定后端配置说明,请参阅后端配置。
Keras 3 采用多后端架构,抽象了流行深度学习框架之间的差异。这种设计允许开发者一次编写模型,然后无需更改代码即可在任何支持的后端上运行。该架构包括:
来源: README.md1-13 README.md73-92
Keras 3 架构围绕一个与后端无关的 API 层设计,该层将操作调度到相应的后端实现。
来源: README.md3-13 README.md73-96
后端选择发生在导入时,Keras 导入后不能更改。后端通过以下方式确定:
KERAS_BACKEND 环境变量~/.keras/keras.json 的配置文件后端配置影响所有操作的执行方式,但不会改变面向用户的 API。
来源: README.md73-92
操作调度系统是多后端架构的核心组件。它确保使用所选后端实现来执行操作。
Keras 中的操作有两种模式:
KerasTensor 对象Operation 类作为所有操作的基类,并处理调度逻辑。
来源: keras/__init__.py1-52 README.md73-92
多后端代码的组织方式明确区分了与后端无关的接口和后端特定的实现
关键组件
keras/api/:自动生成的、面向公众的 APIkeras/src/backend/common/:与后端无关的接口和工具keras/src/backend/{tensorflow,jax,torch,numpy,openvino}/:后端特定实现来源: keras/__init__.py1-56 api_gen.py1-202
公共 API 使用 api_gen.py 脚本自动生成。
API 生成过程:
@keras_export 装饰器keras/api/ 中生成公共 APIkeras/api/_tf_keras/ 中创建 TensorFlow 兼容层keras/__init__.py 以暴露公共 API该系统确保了实现细节与公共 API 之间的清晰分离。
来源: api_gen.py1-202 keras/api/__init__.py1-61 keras/api/_tf_keras/keras/__init__.py1-59
为了确保与 tf.keras 的向后兼容性,Keras 3 包含了 TensorFlow 兼容层。
兼容层:
tf.keras 的 API 兼容性这使得 Keras 3 可以作为 tf.keras 代码的直接替代品。
来源: api_gen.py36-135 keras/api/_tf_keras/keras/__init__.py1-59
虽然 Keras 3 旨在实现后端之间的完全兼容性,但仍有一些后端特定的考虑因素:
| 后端 | 显著特点 | 局限性 |
|---|---|---|
| TensorFlow | 完整功能支持,tf.data 集成 | - |
| JAX | 多数模型表现最佳,SPMD 分布 | 有状态操作需谨慎 |
| PyTorch | 支持 PyTorch DataLoader,无缝集成 PyTorch | 不支持 TPU |
| NumPy | 仅限 CPU 的参考实现 | 不支持 GPU,性能有限 |
| OpenVINO | 优化推理 | 仅限推理(不支持训练) |
来源: README.md8-13 README.md93-97
Keras 3 支持在不同后端之间使用数据和模型。
此架构实现了:
来源: README.md98-111
多后端架构提供了多项优势:
这些优势使 Keras 3 适用于从研究到生产的广泛用例。
来源: README.md112-123