菜单

测试与CI/CD

相关源文件

本页面介绍了 Keras 3 的测试基础设施和持续集成/持续部署 (CI/CD) 流程。它涵盖了测试的组织方式、CI 系统的工作原理以及如何在开发过程中本地运行测试。

测试基础设施概述

Keras 使用全面的测试基础设施,以确保所有支持的后端(TensorFlow、JAX、PyTorch、NumPy 和 OpenVINO)的代码质量。测试系统包括单元测试和集成测试,并为 CPU 和 GPU 测试提供了专门的工作流程。

来源:CONTRIBUTING.md172-197 .github/workflows/actions.yml1-108

CI/CD 流水线

Keras 使用 GitHub Actions 作为主要的 CI 系统,并为 GPU 测试提供了额外的基础设施。CI 系统在所有支持的后端上运行测试,以确保兼容性。

来源:.github/workflows/actions.yml1-108 .github/workflows/nightly.yml1-123 .kokoro/github/ubuntu/gpu/build.sh1-80

测试组织

Keras 中的测试旨在验证所有支持的后端在单元和集成层面的功能。

单元测试

单元测试位于实现文件旁边,并遵循命名模式 *_test.py。这些测试验证单个组件的功能,并为每个后端运行。

来源:CONTRIBUTING.md172-197 keras/src/optimizers/muon_test.py1-84

集成测试

集成测试位于 integration_tests/ 目录中,用于验证端到端功能,例如模型构建、训练以及与不同后端的互操作性。

来源:integration_tests/import_test.py1-130 integration_tests/basic_full_flow.py1-55

CI 配置

CI 系统使用 GitHub Actions 工作流进行配置,这些工作流定义了测试矩阵和执行环境。

GitHub Actions 工作流

主要工作流定义在 .github/workflows/actions.yml 中,并在所有后端上运行测试。

- tensorflow
- jax
- torch
- numpy
- openvino

对于每个后端,工作流会

  1. 设置 Python 环境
  2. 从相应的 requirements 文件安装依赖项
  3. 运行特定于该后端的集成测试
  4. 使用 pytest 运行所有单元测试
  5. 向 Codecov 报告代码覆盖率

来源:.github/workflows/actions.yml1-108

每日构建版

每夜构建每天运行,执行更全面的测试套件,然后构建并将软件包发布到 PyPI。

来源:.github/workflows/nightly.yml1-123

测试执行

测试执行环境设置为独立运行每个后端的测试。

后端配置

对于每个后端,环境都配置了相应的依赖项和 KERAS_BACKEND 环境变量。

后端需求文件环境变量
TensorFlowrequirements.txt 或 requirements-tensorflow-cuda.txtKERAS_BACKEND=tensorflow
JAXrequirements.txt 或 requirements-jax-cuda.txtKERAS_BACKEND=jax
PyTorchrequirements.txt 或 requirements-torch-cuda.txtKERAS_BACKEND=torch
NumPyrequirements.txtKERAS_BACKEND=numpy
OpenVINOrequirements-openvino.txtKERAS_BACKEND=openvino

来源:requirements.txt1-24 requirements-tensorflow-cuda.txt1-13 requirements-jax-cuda.txt1-15 requirements-torch-cuda.txt1-16

测试覆盖

代码覆盖率使用 pytest-cov 进行跟踪并报告给 Codecov。覆盖率报告是为核心库和应用程序分别生成的。

来源:.github/workflows/actions.yml58-70 .github/workflows/actions.yml98-108

在本地运行测试

对于为 Keras 贡献代码的开发者,测试系统提供了在本地运行测试的命令。

设置测试环境

在运行测试之前,您需要安装所需的依赖项。

pip install -r requirements.txt
python -m pip install -e .

接下来,通过设置 KERAS_BACKEND 环境变量来配置您想要测试的后端。

来源:CONTRIBUTING.md82-108 CONTRIBUTING.md172-222

运行特定测试

您可以以不同的粒度级别运行测试。

# Run a test file
pytest keras/src/losses/losses_test.py

# Run a specific test class
pytest keras/src/losses/losses_test.py::MeanSquaredErrorTest

# Run a single test method
pytest keras/src/losses/losses_test.py::MeanSquaredErrorTest::test_sample_weighted

要运行特定后端的全部测试

KERAS_BACKEND=jax pytest keras

您可以跳过应用程序测试以减少测试时间。

SKIP_APPLICATIONS_TESTS=True pytest keras

来源:CONTRIBUTING.md172-222

GPU 测试

GPU 测试通过一个独立的 Kokoro 流水线运行,该流水线提供对支持 CUDA 的硬件的访问。

来源:.kokoro/github/ubuntu/gpu/build.sh1-80 requirements-tensorflow-cuda.txt1-13 requirements-jax-cuda.txt1-15 requirements-torch-cuda.txt1-16

代码格式化与预提交钩子

为确保代码质量一致性,Keras 使用预提交钩子进行代码格式化和 Linting(代码检查)。

来源:CONTRIBUTING.md110-139 .pre-commit-config.yaml1-31 shell/api_gen.sh1-14

测试配置

Keras 使用多个配置文件来控制测试行为。

pyproject.toml

pyproject.toml 文件包含 pytest 的测试配置,包括:

  • 过滤警告
  • 测试详细度设置
  • 覆盖率配置

来源:pyproject.toml76-109

测试排除项

对于某些后端,可能会排除特定测试以适应后端特有的限制。

来源:.github/workflows/actions.yml93-96

结论

Keras 拥有强大的测试和 CI/CD 基础设施,旨在确保跨多个后端和执行环境的质量。该系统将单元测试和集成测试与自动化工作流相结合,以验证每个受支持后端的兼容性和功能。

有关不同后端之间的依赖管理信息,请参阅依赖管理