Pull Request已成功合入, 合并人@CANN-robot
(感谢 RuiWang_ 的贡献)变更摘要
此 PR 为 TTK 测试工具添加了 TensorFlow 框架的端到端(e2e)测试支持。核心思路是将现有基于 PyTorch 的测试流程泛化为框架无关的架构:通过新增 framework_detector、TfBackend 后端体系、tf_param_extractor 参数解析器以及 TF 特有的 dtype 系统,使得同一个 e2e 管线可以同时驱动 torch_npu 和 tf.raw_ops.* / tf.nn.* 等 API 的测试,包括 golden 数据生成、性能分析和设备后端选择。CLI 层额外增加了从 CSV 自动检测框架的能力。
主要改动
-
TF 后端体系 (
TfBackend/CpuTfBackend):新增TfBackend基类和CpuTfBackend子类,实现了 numpy ↔ tf.Tensor 互转(含 dtype 规范化)、tf.device设备移动、设备探测与计数等接口,并通过backends/__init__.py中新增的_probe_tf和扩展的get_backend(framework=...)完成 TF 后端自动选择与回退。 -
框架检测与路由:新增
framework_detector.detect_framework函数,根据api_name前缀(tf./tensorflow.)区分框架类型;CLI 层增加_detect_framework_from_csv从 CSV 的api_name列自动推断框架,并在run_with_switches中设置sw.framework,贯穿FrameworkApiInstance、profiling、golden_generation、input_generation等模块。 -
TF API 解析与参数提取:
api_resolver增加对tf.*API 的解析分支,委托给resolve_callable_str;新增tf_param_extractor.extract_tf_params,利用inspect.signature直接解析 TF op(包括tf.raw_ops.*的特殊 keyword-only 约定),输出与 PyTorch 兼容的APIParamInfo/OverloadInfo结构。 -
Golden 生成与性能分析框架化:
golden_generation.py、profiling.py、input_generation.py等核心流程全面适配双框架——引入_get_cpu_tf_backend、np_to_tf_inputs、is_tf_dtype_support等分支逻辑,TF 路径下禁用 graph 模式、使用WallClockProfiler、绕过不可用的 format_cast,确保 eager 模式下的正确执行与性能测量。 -
TF dtype 系统与配置扩展:
dtypes.py新增_TF_DTYPE_MAP映射表及str_to_tf_dtype/is_tf_native_dtype函数;default.yaml增加frameworks.tf.npu配置项;SWITCHES类新增framework属性,默认值为"torch",确保向后兼容。


代码审查
审查总结
本次 PR 新增了 TensorFlow e2e 测试支持,涉及 25 个文件的修改(新增约 640 行,删除约 83 行)。整体代码结构合理,TF 与 torch 的框架分离做得较好,但存在以下问题:
按优先级统计
- P2(3 个):
_call_plugin_with_plan未传递framework导致 TF 插件结果转换错误;generate_golden在 golden_api 路径使用错误 framework;_TF_NON_TENSOR_PARAM_NAMES集合不完整导致部分 TF op 标量参数误判为张量 - P3(2 个):
str_to_tf_dtype为死代码;_detect_framework_from_csv裸except吞没异常
各文件审查确认
| 文件 | 审查结果 |
|---|---|
examples/case_store/e2e/tf_ops.csv |
无问题 |
ttk/cli/bridge.py |
报告 1 个 P3 |
ttk/cli/e2e.py |
无问题 |
ttk/config/default.yaml |
无问题 |
ttk/core_modules/framework_api/api_resolver.py |
无问题 |
ttk/core_modules/framework_api/backends/__init__.py |
无问题 |
ttk/core_modules/framework_api/backends/base.py |
无问题 |
ttk/core_modules/framework_api/backends/cpu_tf_backend.py |
无问题 |
ttk/core_modules/framework_api/backends/tf_backend.py |
无问题 |
ttk/core_modules/framework_api/framework_api_info_keeper.py |
无问题 |
ttk/core_modules/framework_api/framework_detector.py |
无问题 |
ttk/core_modules/framework_api/golden_generation.py |
报告 2 个 P2 |
ttk/core_modules/framework_api/input_generation.py |
无问题 |
ttk/core_modules/framework_api/instance.py |
无问题 |
ttk/core_modules/framework_api/profiler.py |
无问题 |
ttk/core_modules/framework_api/profiling.py |
无问题 |
ttk/core_modules/framework_api/profiling_utils.py |
无问题 |
ttk/core_modules/npu/op/input_generation.py |
无问题 |
ttk/core_modules/testcase_manager/param_plan.py |
无问题 |
ttk/core_modules/testcase_manager/testcase_e2e.py |
无问题 |
ttk/core_modules/testcase_manager/testcase_tensor_api_base.py |
无问题 |
ttk/test_spec/examples/06_golden_multi_path.py |
无问题 |
ttk/utilities/classes.py |
无问题 |
ttk/utilities/dtypes.py |
报告 1 个 P3 |
ttk/utilities/tf_param_extractor.py |
报告 1 个 P2 |
整体风险判断
中等风险。P2 问题都集中在 golden_generation.py 和 tf_param_extractor.py,可能导致 TF golden 结果转换错误和参数解析错误,建议在合入前修复。P3 问题不影响核心功能,可随后续迭代处理。其余文件修改质量较好,TF/torch 框架分离清晰,惰性导入和条件分支处理得当。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 1 |
| 🟡 建议 | 5 |
⛔ 需要修改


当前PR是否有AI参与:
[ ] 否
[x] 是
__1. AI Agent 平台: opencode
__2. AI 模型: glm
__3. Prompt上下文 : e2e模式支持tensorflow框架
PR功能描述 / 为什么需要这个合入**:
该PR关联的issue
(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes # https://gitcode.com/cann/ops-test-kit/issues/99
希望检视人员了解:
测试
文档更新
类型标签