Kernel 模式任务流程【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills任务 1生成 ttk_extract_case_info.py从S5_mapped_cases_low.json的每个 case 中直接提取字段无需 torch 依赖。初步验证python ttk_extract_case_info.py S5_mapped_cases_low.json打印 case[0] 的完整信息对比S5_mapped_cases_low.json中的第一个 case 确认字段映射正确。任务 2校验 ttk_extract_case_info.py强制不可跳过目的S7 mapper 本身可能有映射错误直接取值会继承这些错误。必须通过对比算子注册和约束检查的权威源进行二次校验。权威源按优先级排序*_def.cpp— 输入/输出名称、顺序、dtype 注册定义*_tiling_check.cpp或*_tiling*.cpp— 约束检查逻辑*_infershape.cpp— 输出 shape 推导逻辑校验维度维度权威源校验内容输入名称/顺序_def.cppInput 注册所有输入的名称和注册顺序与_def.cpp完全一致输出名称/顺序_def.cppOutput 注册所有输出的名称和注册顺序与_def.cpp完全一致属性名称/类型_def.cppAttr 注册属性名称、AttrType、默认值与attributes中的 key-value 一致dtype 推导_def.cppDataTypeFormat 配置每种输入 dtype 组合下的 dtype 与对应列一致shape 约束_tiling_check.cpp所有 if/OP_CHECK_IF 条件在脚本中正确反映输出 shape_infershape.cpp输出 shape 计算与 infershape 逻辑一致TensorList 结构_def.cppInput/Output 注册的.ParamType()S5 JSON 中为list[dict]DYNAMIC的 input/output在_def.cpp中必须注册为.ParamType(DYNAMIC)为dictREQUIRED的必须为.ParamType(REQUIRED)或缺省output_inplace_indexesdocs/aclnn*.md参数表「输入/输出」列标记为「输入/输出」的输入参数索引与 CSV 中output_inplace_indexes的值一致发现 bug 时的处理记录每个 bug → 修复 → 重新运行 → 重新校验。任务 3生成 CSV 文件需要生成两个 CSV 文件3alow 档位python ttk_extract_case_info.py S5_mapped_cases_low.json --csv ttk_{op_name}_cases_low.csv3bfull 档位python ttk_extract_case_info.py S5_mapped_cases_high.json --csv ttk_{op_name}_cases_full.csv确认任务 1 已完成遍历S5_mapped_cases*.json[cases]对每个 case 调用extract_case_info(case, index)获取扁平 dict按 CSV 列顺序映射字段写入 CSV 文件UTF-8逗号分隔双引号包裹含特殊字符的字段抽查第 0 条和最后一条 case任务 4CSV 格式校验python scripts/ttk_validate_csv.py ttk_{op_name}_cases_low.csv校验项9 项序号校验项说明1编码UTF-8不带 BOM2表头26 个列名与规格严格一致顺序不得打乱3行数CSV 数据行数 04testcase_name唯一、支持带 data_range 后缀的 ID 格式(case|network)\d_\w5op_name非空、小写字母下划线格式6必填项testcase_name、op_name、input_shapes、input_dtypes、output_dtypes、output_shapes非空7precision_tolerances为空或((a,b))格式8tuple 长度一致性input_dtypes、output_dtypes等字段长度与input_shapes一致9模式识别表头不含api_name→ Kernel 模式结果处理全部 PASS → 完成存在 FAIL → 修复后重新生成并校验。任务 5生成golden_plugin.py前置条件任务 4 校验全部 PASS。目的为 TTK kernel 模式提供自定义 golden 函数通过--plugin参数加载。TTK Plugin 加载机制TTK 的PluginScanner通过 AST 解析扫描--plugin指定的.py文件查找模块级变量__golden__ast.Dict类型按{level: {op_name: func_name}}格式匹配 golden 函数。不执行脚本仅静态解析运行时通过importlib动态加载。优先级自定义 plugin 内置 registrygolden_funcsdict。输出文件golden_plugin.py— 固定文件名存放在tests/whitebox/目录仅自生成时创建已有tests/assets/golden.py时不生成函数签名规范自定义 golden 函数通过__call_custom_golden_func调用def __golden_{op_name}(*input_arrays, **kwargs): # input_arrays: 按 input_shapes 顺序展开的 numpy 数组位置参数 # kwargs: context.attributes 框架额外信息 return [output_0, output_1, ...] # list, 元素顺序与 output_dtypes 一致DYNAMIC 示例1 个 TensorList 输入1 个 TensorList 输出def __golden_{op_name}(x_list, **kwargs): # x_list: list[np.ndarray]TensorList 输入TTK 通过 input_apply_as_list 折叠后传入 return [reference_fn(t) for t in x_list] # list[np.ndarray]每个子 tensor 1 个输出参数说明参数来源说明*input_arrayscontext.input_arrays解包按 CSVinput_shapes顺序每个为 numpy 数组。REQUIRED 输入 → 单个np.ndarrayDYNAMIC 输入 →list[np.ndarray]TTK 通过input_apply_as_list折叠为嵌套结构后解包传入**kwargscontext.attributes 额外信息属性名如epsilon、input_dtypes、output_dtypes、full_soc_version等返回值规范类型建议listtuple也可被__golden_flatten正确处理元素numpy 数组顺序与 CSVoutput_dtypes严格一致形状和 dtype 必须与 CSV 中output_shapes和output_dtypes匹配已有 Golden 复用优先生成golden_plugin.py前检查算子目录下是否已有 TTK golden 实现{算子路径}/tests/assets/golden.py检查规则文件存在包含模块级__golden__变量ast.Dict类型含kernelkey__golden__[kernel]中存在与当前op_name匹配的条目三条全部满足→--plugin直接指向{算子路径}/tests/assets/golden.py不生成golden_plugin.py。理由已有 golden 经 TTK 验证实现通常更完善含芯片分支、bfloat16 特殊处理等。任一不满足→ 走下方「编写依据」自生成{whitebox_dir}/golden_plugin.py。后续所有 TTK 命令中的--plugin参数统一使用变量{plugin_path}已有 golden 时{plugin_path}{算子路径}/tests/assets/golden.py自生成时{plugin_path}{whitebox_dir}/golden_plugin.py编写依据算子docs/aclnn*.md文档中的「计算公式」节只读该节与 S6 reference 实现同源。注意事项实测踩坑总结#注意事项说明1numpy reduce 函数的axis参数不接受list必须用int或tuplenp.mean、np.sum、np.sqrt等函数的axislist(range(...))会抛TypeError必须用tuple(range(...))2返回值建议使用listtuple也可被正确处理TTK 的__golden_flatten对任意Sequence执行deep_flattenlist为惯例写法3中间计算用float32最终输出按output_dtypes转回FP16 输入时 numpy 不会自动提升精度需显式.astype(np.float32)4属性值从kwargs获取必须设默认值如kwargs.get(epsilon, 1e-6)防止 CSV 中attributes为空时 KeyError5输出-公式映射必须明确多输出算子必须确认每个输出对应公式的哪个表达式避免语义错位参考references/pytest-gen/03-pitfalls.md「输出-公式映射表」6多输出时返回的 list 长度必须与output_dtypes长度一致否则 TTKdeep_flatten后与输出张量数量不匹配7const input 不需要__input__插件TTK 自动检测 const input通过_def.cpp中的.ValueDepend()标记从attributes中解析值传给算子。__input__插件仅用于非 const 的特殊输入8DYNAMIC 输入golden 函数接收 TensorList 为单个位置参数list[np.ndarray]TTK 通过input_apply_as_list将扁平数组折叠为嵌套结构。1 个 TensorList 输入 → 1 个位置参数list of arrays非 N 个位置参数9DYNAMIC 输出golden 函数返回list[np.ndarray]1 个 per 子 tensorTTKdeep_flatten自动展平嵌套返回值。返回[reference_fn(t) for t in x_list]即可无需手动嵌套__golden__声明格式__golden__ { kernel: { {op_name}: __golden_{op_name} } }变量名必须是__golden__keykernel对应 kernel 模式value 中的 key 是 CSV 中的op_namevalue 中的 value 是同文件中的函数名字符串初步验证python3 -c import sys; sys.path.insert(0, {ops_test_kit_path}) from ttk.core_modules.plugin_loader import get_plugin_function func, source get_plugin_function({op_name}, golden, kernel, {plugin_path}) assert func is not None, golden not found import numpy as np np.random.seed(42) # 按算子实际输入构造测试数据并调用 func验证返回 list 长度和 dtype print(PASS) 【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考