用例生成
简介
TTK使用表格文件(CSV 或 Excel .xlsx)批量定义测试用例。第一行为表头(列名),后续每行代表一个测试用例。不同测试模式使用不同的列定义。
模式自动识别逻辑(基于CSV表头 + 子命令):
- 表头包含
api_name:第一个非空api_name值不以aclnn开头 → E2E模式;以aclnn开头或全部为空 → ACLNN模式 - 表头不包含
api_name:由子命令决定 —ttk geir→ GEIR模式,ttk kernel→ Kernel模式
各模式的执行命令见 任务执行。
输入文件格式(CSV / Excel)
TTK 支持两种等价的输入文件格式,表头与字段定义完全相同:
| 格式 | 后缀 | 多工作表 | 说明 |
|---|---|---|---|
| CSV | .csv |
— | 文本表格,逗号分隔;含特殊字符(括号、逗号、引号)的字段须用双引号包裹。 |
| Excel | .xlsx |
支持 | 工作簿,每个工作表(Sheet)是一张表。 |
Excel(.xlsx)用法
- 默认读取第一个工作表;用
--sheet指定工作表名,不存在时报错并列出可用工作表:python3 -m ttk kernel -i cases.xlsx # 首个工作表 python3 -m ttk kernel -i cases.xlsx --sheet T2 # 指定工作表 - 单元格一律按文本处理:读取时每个单元格被转为字符串并去除首尾空白,与 CSV 单元格行为完全一致,后续字段解析逻辑(
input_shapes、attributes等的eval)原样复用。因此 xlsx 与 csv 的用例可互换,模式自动识别、字段回退、TensorList 嵌套等规则完全相同。 - 数值列建议设为文本格式:Excel 会自动推断数字类型(如把
01存为1、1e-8存为浮点)。为保证与 CSV 完全一致,建议把input_shapes/input_dtypes/attributes/input_data_ranges/output_shapes等列的单元格格式预设为「文本」。 - 空行处理:整行空白的行会被跳过(与 CSV 空行一致)。
- 结果文件仍为 CSV:无论输入是 csv 还是 xlsx,结果输出始终是 CSV,便于 diff 与版本管理。默认命名:csv 为
{stem}_result.csv;xlsx 为{stem}_{sheet}_result.csv(sheet为实际读取的工作表名,默认首页时也带上首页名,如cases_T1_result.csv),同一文件多 sheet 跑测互不覆盖。
CSV 中「含特殊字符的字段须双引号包裹」的规则不适用于 xlsx——Excel 单元格天然支持逗号、引号等字符,无需转义。
公共字段(所有模式通用)
以下9个字段为Kernel、GEIR、ACLNN、E2E四种模式共有。
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
testcase_name |
STRING | 是 | 自动生成 | 用例唯一名称。缺失时自动生成为 auto_testcase_name_N。 |
network_name |
STRING | 否 | None |
网络/模型名称标签(如 llama3_70b_train)。 |
input_data_ranges |
FLOAT_RANGE_NESTED | 否 | ((None, None),) |
每个输入张量的随机数据范围。每个元素为 [min, max](闭区间,min 和 max 为边界值),None 时 min=-2、max=2。第 3 个及以上的值为必现值,会混入随机数据中保证出现(每个必现值按 tensor 规模混入,小 tensor 约 25% 比例、大 tensor 每值封顶 2048 次,避免边界值淹没正常分布)。min==max 时生成固定值。支持TensorList嵌套。如 "((-1, 1), (0, 10))" 或 "((-1, 1, 0), (0, 10))" |
precision_tolerances |
FLOAT_RANGE_NESTED | 否 | None |
每个输出的精度容差对 (rtol, ptol)。如 "((0.001, 0.001),)"。legacy 字段,仅 --compare close/cosine 读取;默认 mix_tolerance 的容差在 TestSpec tolerance 中调整 |
absolute_precision |
FLOAT_OR_NESTED | 否 | 1e-8 |
默认绝对精度容差。可以是单个浮点数或嵌套容器实现逐输出控制。legacy 字段,仅 --compare close 读取 |
is_enabled |
BOOL | 否 | True |
设为 False 跳过此用例。 |
remark |
STRING | 否 | None |
自由备注信息。 |
soc_series |
STRING_TUPLE | 否 | None |
SoC过滤。前缀 - 表示排除。如 ('Ascend910A', '-Ascend310P') |
priority |
INT | 否 | 0 |
优先级,用于选择性执行。 |
各模式特殊字段
三种模式在公共字段基础上各有专属字段。
| 模式 | 子命令 | 专属字段数 | 核心标识字段 | 详见 |
|---|---|---|---|---|
| Kernel | ttk kernel |
17 | op_name、input_shapes、output_shapes、attributes |
Kernel用例编写 |
| GEIR | ttk geir |
18 | op_name、input_shapes、dyn_input_shapes |
GEIR用例编写 |
| ACLNN | ttk aclnn |
18 | api_name、tensor_view_shapes、output_tensor_indexes、scalar_dtypes |
ACLNN用例编写 |
| E2E | ttk e2e |
14 | api_name、tensor_view_shapes、golden_api |
E2E用例编写 |
GEIR 继承 Kernel 的字段,额外多
dyn_input_shapes用于控制图编译时的动态 shape 描述。
数据类型字符串
| 数据类型 | 字符串表示 |
|---|---|
| 16位浮点 | float16, fp16 |
| 32位浮点 | float32, fp32 |
| 64位浮点 | float64, fp64 |
| BFloat16 | bfloat16, bf16 |
| 8位有符号整数 | int8 |
| 16位有符号整数 | int16 |
| 32位有符号整数 | int32 |
| 64位有符号整数 | int64 |
| 8位无符号整数 | uint8 |
| 16位无符号整数 | uint16 |
| 32位无符号整数 | uint32 |
| 64位无符号整数 | uint64 |
| 布尔型 | bool |
| 32位复数 | complex32, c32 |
| 64位复数 | complex64, c64 |
| 128位复数 | complex128, c128 |
CSV字段值格式参考
| 类型 | 格式 | 示例 |
|---|---|---|
| shape元组 | 双引号包裹的嵌套元组 | "((128, 1024), (1, 1024))" |
| dtype元组 | 双引号包裹的字符串元组 | "('float32', 'float32')" |
| 嵌套shape(TensorList) | 双引号包裹的三层嵌套元组 | "(((3,3),(3,2)),(3,5))" |
| 字典 | 直接写Python字典 | {'dim': -1} |
| 数值 | 直接写数值 | 1e-8, 0, True |
| 空值 | 留空 | 两个连续逗号 ,, |
| None输入 | None 关键字 |
None |
注意:包含特殊字符(括号、逗号、引号)的字段必须用双引号包裹。
回退链
部分字段在未显式设置时自动回退到其他字段:
| 字段 | 回退到 |
|---|---|
input_ori_shapes |
input_shapes |
output_ori_shapes |
output_shapes |
input_ori_formats |
input_formats |
output_ori_formats |
output_formats |
input_formats |
(无回退,默认 ('ND',)) |
output_formats |
output_ori_formats |