

Pull Request已成功合入, 合并人@CANN-robot
(感谢 chengyutao3 的贡献)变更摘要
本次 PR 为 host 侧输入张量新增「值符号化(value symbolization)」能力:当输入 tensor 的具体数值参与符号推导(如 Reshape 的 shape 输入)时,不再需要把输入搬到 device,而是优先从真实 host 数据生成逐元素符号,无真实数据时回退到新增的 graph 级 option ge.inputHintValue 配置值,从而提升 JIT 执行与符号推导的准确性和性能。
主要改动
-
新增
ge.inputHintValueoption 与解析逻辑重构: 在option_utils.cc中将ge.inputHintShape的解析逻辑抽象为通用模板ParseIndexedListOption,并基于其新增ParseHintInputValue,支持input_index:[v0,v1,...]形式;同时在option_supportion_checker.cc中登记该 option 为受支持项,并在execution_order.cc中将其加入首个执行点(first EP)的选项集合。 -
值符号化实现(
symbolic_shape_symbolizer.cc): 新增SymbolizeInputValue,优先使用真实 host 数据(支持 INT32/INT64/UINT32/UINT64,元素数上限kMaxSymbolizeValueElemNum = 200)生成逐元素符号,无真实数据时回退到 hint value;新增InputValueElementSource,生成运行时读取GetGraphInputTensor(idx)对应元素数值的 source 串。 -
值依赖输入识别(
symbolic_infer_util.cc): 新增IsValueDependentDataNode与GetValueDependentInputIdxs,通过下游算子的IsInputDataDependency与op_infer_depends判定图输入是否"值依赖",并将结果缓存到图 attr_ge_value_dependent_idxs避免重复计算。 -
JIT 执行路径适配(
jit_executor.cc):CopyHostInputsToDevice新增keep_on_host_idxs参数,值依赖的 host 输入不再拷贝到 device;BuildCompileInputs对已位于 host 的输入跳过重复拷贝;MarkHostTensorOnDataNodes改为直接基于ComputeGraph处理。 -
测试补充与适配: 新增 UT
symbolic_value_inference_unittest.cc(compile_path_reshape_with_hint_value、execute_path_reshape_with_real_data)及 STtest_symbolize_value_and_infer.cc的 hint value/真实数据用例;JIT 相关用例将 shape 输入由 INT32 调整为 INT64 并置为 host placement,user_graph_manager_unittest.cc按"值符号化后 reshape 不再切分执行点、host 输入不被重复拷贝"的预期更新。


代码审查
Closing Summary
本次审查覆盖全部 14 个变更文件,共报告 6 个问题(P0×3、P2×1、P3×2)。
按文件逐一说明:
- api/session/jit_execution/exe_points/execution_order.cc — 将
INPUT_HINT_VALUE加入kFirstEPOptions,与INPUT_HINT_SHAPE处理一致,无问题。 - api/session/jit_execution/jit_executor.cc — 3 个 P0 语法错误(第 46 行缺函数体
{;第 168 行GE_ASSERT_SUCCESS(...)缺闭合);;第 175 行continu截断,应为continue;),均经 read_file/grep 双重确认,会导致编译失败;另有 P2:CopyHostInputsToDevice重建 host 保留 tensor 时未拷贝 Placement,可能使 host 输入被误判为 device(置信度 0.4)。 - base/common/option_supportion_checker/option_supportion_checker.cc — 新增
"ge.inputHintValue"支持项,与已有"ge.inputHintShape"一致,无问题。 - compiler/api/aclgrph/option_utils.cc —
ParseIndexedListOption模板化重构与原ParseHintInputShape行为一致(顺带修复了旧代码日志缺参问题),ParseHintInputValue/ConstructValueListFromStr逻辑正确,无问题。 - compiler/api/aclgrph/option_utils.h — 新增声明,无问题。
- compiler/graph/optimize/symbolic/infer_symbolic_shape/symbolic_infer_util.cc —
IsValueDependentDataNode与既有symbolic_shape_inference.cc的判定逻辑一致(含 space registry 覆盖),图 attr 缓存无并发风险,无问题。 - compiler/graph/optimize/symbolic/infer_symbolic_shape/symbolic_infer_util.h — 新增声明,无问题。
- compiler/graph/optimize/symbolic/infer_symbolic_shape/symbolic_shape_symbolizer.cc — P3×2:第 214 行 GELOGI 格式串与实参不匹配(
%zu消费 char*,size 被丢弃);hint value 回退路径缺少元素数/类型校验,可能生成越界读或非法GetData<>()源码(低置信度)。 - compiler/graph/optimize/symbolic/infer_symbolic_shape/symbolic_shape_symbolizer.h — 新增
InputValueElementSource声明,无问题。 - tests/ge/st/testcase/autofuse/test_symbolize_value_and_infer.cc — 新增用例与实现一致,无问题。
- tests/ge/ut/ge/graph/optimize/symbolic/symbolic_value_inference_unittest.cc(新增)— 用例结构合理,无问题。
- tests/ge/ut/ge/jit_execution/jit_executor_unittest.cc — shape 输入改 INT64 + host placement,与数据一致,无问题。
- tests/ge/ut/ge/jit_execution/jit_share_graph.cc — 新增
SetDataNodeDtype辅助函数,无问题。 - tests/ge/ut/ge/jit_execution/user_graph_manager_unittest.cc — 按“值符号化后不切分”更新预期,逻辑自洽,无问题。
总体风险判断: 本 PR 的 jit_executor.cc 存在 3 处会导致编译失败的语法错误(P0),在修复前该文件所在的 jit_execution 库无法构建,属于阻断性缺陷;此外 host tensor 保留路径的 placement 处理存在中低置信度的正确性隐患,符号化日志与 hint 校验存在两个低危问题。整体变更需先修复 P0 编译错误后方可合入。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 3 |
| 🟡 建议 | 0 |
⛔ 需要修改


/check-pr


The following label is not ready.
approved: Please wait for committers to review the code.

