FlagGems 中的性能基准测试#
我们建议开发者基于下面的过程来为新的算子添加测试用例。 这些步骤既适用于 Python 实现的算子,也适用于 C++ 封装的算子。
选择合适的测试用例文件
基于要测试的算子类型,在
benchmark/目录下选择对应的文件:- 对于 reduction(规约) 算子,可以将测试用例添加到
test_reduction_perf.py。 - 对于 Tensor(张量)构造算子,可以将测试用例添加到
test_tensor_constructor_perf.py文件中。 - 如果算子无法归类到以上类别,可以将测试用例添加到
test_special_perf.py中, 或者为新的算子类型添加一个新文件。
- 对于 reduction(规约) 算子,可以将测试用例添加到
查阅现有的基准测试类
一旦你确定了合适的测试文件,可以先查阅现有的、从
Benchmark结构派生而来的测试类, 了解现有的测试类是否能够满足你的算子的测试需要。主要考察点包括:- 是否其中实现的指标搜集(metric collection)动作符合需要;
- 是否其中的输入生成函数(
input_generator或input_fn)的实现满足需要。
添加测试用例
取决于具体的测试场景,按以下方法之一来添加测试用例:
使用现有的指标和输入生成逻辑
如果现有的指标采集和输入生成函数满足你的算子的需求,你可以直接添加一行
pytest.mark.parametrize,保持文件中的代码组织不变。 你可以在test_binary_pointwise_perf.py文件中查阅此类实现的例子。
定制输入生成机制
如果指标采集逻辑合适,但输入生成函数不满足算子的需求,你可以实现一个定制的
input_generator。 你可以参照test_special_perf.py文件中的topk_input_fn实现, 了解如何为topk算子添加一个自定义的输入参数生成函数。
自定义指标采集和输入生成函数
如果现有的指标采集机制和输入生成函数都无法满足算子的需求, 你可以创建一个新的测试类。新的测试类要为算子定义特定的指标采集逻辑, 以及一个自定义的输入参数生成函数。 你可以参照
benchmark/目录下不同的Benchmark子类,了解这类定制的机制。