ascendc-operator-testcase-gen
AscendC Operator Testcase Gen Skill
根据算子设计文档(design.md)生成验证用例和标杆,供后续UT代码生成、精度验证以及性能验证skill使用。
使用场景
在 ascendc-operator-design 创建design.md之后、ascendc-operator-ut-gen/ascendc-operator-precision-eval/ascendc-operator-performance-eval调用之前调用。
调用接口
必需参数
调用此技能时,必须明确提供以下参数:
参数1:设计文档
- 根据用户提供的
design.md设计用例 - 必须包含算子逻辑、输入输出、约束条件、所支持数据类型
- 如果未指定,默认项目路径下的design.md
设计流程
1. 算子设计文档解析
- 读取设计文档中[算子接口]、[计算逻辑]、[参考实现]章节
- 根据算子实际计算逻辑以及pyTorch已有实现、参考文档等,生成算子标杆,了解算子各个输入输出之间shape的相互约束。
- 基于约束,生成模型场景使用该算子时的常见shape典型用例、以及根据边界条件生成的泛化用例。
2. 测试用例生成
MANDATORY: 在生成测试用例之前,必须读取以下参考文档:
- 必读:
templates/test-cases-template.md— 测试用例格式参考design.md— 用户提供的算子设计文档
2.1 设计原则
- 全 dtype 覆盖:每个 shape / 每个边界值都遍历算子支持的全部dtype,
SUPPORTED_DTYPES必须包含design.md中[参数说明]支持的所有数据类型 - shape 由算子决定:根据算子支持的维度选择合适的 shape,不要写固定维度
- shape 不要过大:单个用例元素数控制在合理范围,避免不必要的大 tensor
- 用例总数 = (len(TEST_SHAPES) + len(GENERAL_SHAPES)) × len(SUPPORTED_DTYPES) ≥ 30
Part A: 常规 Shape 测试(TEST_SHAPES)
根据算子支持的维度以及算子类型,从以下维度池中选取适合的 shape,组成 TEST_SHAPES 列表。
MUST 根据算子实际支持的维度来选,不支持的维度不要选。
shape 选择参考池
| 维度 | 推荐 shape | 适用算子类型 |
|---|---|---|
| 1D | (128,), (1024,), (4096,), (8192,) | elementwise, reduction |
| 2D | (32, 512), (64, 768), (128, 1024) | elementwise, matmul, linear |
| 3D | (8, 16, 64), (4, 128, 256) | elementwise, attention, conv1d |
| 4D | (4, 8, 32, 16), (2, 64, 32, 32) | conv2d, elementwise |
| 5D | (2, 3, 4, 5, 6) | conv3d, elementwise |
shape 不要过大:推荐单个 shape 元素数 ≤ 200K。
TEST_SHAPES 格式
TEST_SHAPES = [
("category_name", "description", (dim0, dim1, ...)),
# ...
]
Category 名称自定义,建议按维度或场景命名。示例:
# elementwise 算子(支持任意维度)
TEST_SHAPES = [
("1D", "128 elements", (128,)),
("1D", "1024 elements", (1024,)),
("1D", "4096 elements", (4096,)),
("1D", "8192 elements", (8192,)),
("2D", "32x512", (32, 512)),
("3D", "8x16x64", (8, 16, 64)),
("3D", "4x128x256", (4, 128, 256)),
("4D", "4x8x32x16", (4, 8, 32, 16)),
]
Part B: 泛化Shape 测试(GENERAL_SHAPES)
根据算子支持的维度以及算子类型,从以下维度池中选取适合的 shape,组成 GENERAL_SHAPES 列表。
MUST 根据算子实际支持的维度来选,不支持的维度不要选。
shape 选择参考池
小Shape场景(边界测试、极小值、非对齐测试)
| 维度 | 小 shape | 测试目的 |
|---|---|---|
| 1D | (1,), (2,), (4,), (8,) | 极小元素、边界值 |
| 1D | (3,), (5,), (7,) | 非对齐长度 |
| 2D | (1, 1), (2, 2), (4, 4) | 极小2D tensor |
| 2D | (1, 128), (2, 256) | 单行/单列场景 |
| 3D | (1, 1, 1), (2, 2, 2) | 极小3D tensor |
| 3D | (1, 8, 64), (2, 16, 128) | 单batch场景 |
大Shape场景(生产环境、压力测试、模型典型场景)
| 维度 | 大 shape | 适用模型 | 元素数 |
|---|---|---|---|
| 1D | (3072,), (4096,) | BERT FFN中间层 | 3K-4K |
| 1D | (5120,), (6400,) | GPT-2 FFN中间层 | 5K-6K |
| 2D | (512, 768) | BERT-base full sequence | 393K |
| 2D | (512, 1024) | BERT-large full sequence | 524K |
| 2D | (1024, 768) | GPT-2 sequence | 786K |
| 2D | (1024, 1024) | GPT-2 medium sequence | 1M |
| 2D | (1024, 1600) | GPT-2 XL sequence | 1.6M |
| 3D | (8, 512, 768) | BERT-base batch | 3.1M |
| 3D | (8, 197, 768) | ViT-base batch | 1.2M |
| 3D | (16, 1024, 1024) | GPT-2 large batch | 16.7M |
注意事项:
- 生产环境、模型典型场景推荐shape应视每个算子具体应用场景而变化
- 小shape用于边界测试,确保算子在极小输入下正确工作
- 大shape用于性能测试和验证大规模数据的正确性
- 元素数超过200K的shape仅用于泛化测试,不在常规测试中使用
GENERAL_SHAPES 格式
GENERAL_SHAPES = [
("Small", "description", (dim0, dim1, ...)),
("Large", "description", (dim0, dim1, ...)),
# ...
]
Category 建议使用 "Small" 和 "Large" 区分场景。示例:
# elementwise 算子(支持任意维度)
GENERAL_SHAPES = [
# 小Shape场景
("Small", "single element", (1,)),
("Small", "tiny vector 2", (2,)),
("Small", "tiny vector 4", (4,)),
("Small", "unaligned length 3", (3,)),
("Small", "unaligned length 5", (5,)),
("Small", "2x2 matrix", (2, 2)),
("Small", "1x128 single row", (1, 128)),
("Small", "1x1x1 scalar", (1, 1, 1)),
("Small", "1x8x64 single batch", (1, 8, 64)),
# 大Shape场景(生产环境)
("Large", "BERT-base FFN 3072", (3072,)),
("Large", "BERT-large FFN 4096", (4096,)),
("Large", "BERT-base 512x768", (512, 768)),
("Large", "BERT-large 512x1024", (512, 1024)),
("Large", "GPT-2 1024x768", (1024, 768)),
("Large", "GPT-2 1024x1024", (1024, 1024)),
("Large", "ViT-base 8x197x768", (8, 197, 768)),
]
2.2 设计用例输出
基于收集的信息,读取 templates/test-cases-template.md 模板,填充所有章节,输出到 csrc/ops/[op-name]/test/[op-name]-test-cases.md。
输出位置: ascend-kernel/csrc/ops/[op-name]/test/[op-name]-test-cases.md
注意事项
- 严格遵循模板章节:只输出模板中定义的章节(算子标杆、典型用例、泛化用例、使用说明)
- 禁止输出无关内容:
- ❌ 精度验证标准(由
ascendc-operator-precision-eval负责) - ❌ 性能验证标准(由
ascendc-operator-performance-eval负责) - ❌ UT测试代码(由其他skill负责)
- ❌ 任何超出模板章节定义的内容
- ❌ 精度验证标准(由
- 输出文件位置:
ascend-kernel/csrc/ops/[op-name]/test/[op-name]-test-cases.md
More from ascend/agent-skills
ascendc-operator-dev
AscendC算子端到端开发编排器。当用户需要开发新算子、实现自定义算子、或完成从需求到测试的完整流程时使用。关键词:算子开发、operator development、端到端、完整流程、工作流编排、新建算子。
56ascendc-operator-doc-gen
为AscendC算子生成PyTorch风格的接口文档(README.md)。触发场景:编译调试通过后需要生成接口文档,或用户提到"生成算子文档"、"创建README"、"文档化算子"、"帮我写文档"(算子上下文)、"算子文档"时使用。
55ascendc-operator-design
完成AscendC算子设计 - 帮助用户完成算子的架构设计、接口定义和性能规划。当用户提到算子设计、算子开发、tiling策略、内存规划、AscendC kernel设计、两级tiling、核间切分、核内切分时,使用此skill。
55ascendc-operator-precision-eval
AscendC算子精度评估。对已编译安装的算子生成全面的精度测试用例集(≥30例),运行并生成精度验证报告。关键词:精度测试、precision evaluation、精度报告、accuracy、误差分析。执行完成后 MUST 在当前对话中展示总览、失败摘要与关键发现,不得仅附报告路径。
54ascendc-operator-project-init
初始化 AscendC 算子工程并创建可编译的算子骨架。触发场景:(1) 用户要求创建新算子;(2) 关键词:ascendc算子、新建算子、算子目录、算子初始化;(3) 需要基于 ascend-kernel 模板快速落地。本 skill 不只建目录,还输出“可继续开发”的标准文件与检查清单。
54ascendc-operator-precision-debug
AscendC 算子精度问题调试与根因定位。当算子精度测试失败(allclose 不通过、结果偏差、输出全零/NaN 等)时使用。流程:误差分布分析 → 代码易错点审查 → 实验隔离 → printf/DumpTensor 插桩 → 修复验证。关键词:精度调试、精度问题、结果不一致、误差定位、allclose 失败、输出偏差、NaN、全零、precision debug。
53