vllm [RFC]:内联黄金(预期)测试

bvjxkvbb  于 6个月前  发布在  其他
关注(0)|答案(4)|浏览(158)

动机

vllm中的一些测试既不充分也不易于阅读,例如:
vllm/tests/core/test_scheduler.py
8344f77的第293行到第297行
| | seq_group_meta, out=schedule_and_update_computed_tokens(scheduler) |
| | assertlen(out.scheduled_seq_groups) ==2 |
| | assertout.num_batched_tokens==2 |
| | assertout.blocks_to_swap_out!= {} |
| | assertout.blocks_to_swap_in== {} |
测试assert out.blocks_to_swap_out != {}不充分,这些行仅测试输出的某些属性。

建议更改

我们可以使用来自https://github.com/ezyang/expecttest的内联黄金测试(也称为预期测试):https://github.com/pytorch/pytorch/blob/8b4d62009ddbc24a69dfcdbebc2cc84e4b2ee8f5/test/test_python_dispatch.py#L645-L654

回复期限

  • 无响应*

抄送列表

  • 无响应*

其他事项

  • 无响应*
disho6za

disho6za1#

工作流程:
我们只需编写 assert_expected_inline(str(obj), """""") ,然后使用 EXPECTTEST_ACCEPT=1 运行。"""""" 将自动更新。
一个最小可行示例:

from expecttest import assert_expected_inline

def test_split():
    s = 'hello world'
    assert_expected_inline(str(s.split()), """""")
7bsow1i6

7bsow1i62#

如果我们重构调度器或其他待测试组件,我们如何知道测试失败是由于未定义行为的变化还是真正的故障?

lo8azlld

lo8azlld3#

当我们更新代码,如调度器或其他待测组件时,更改的作者需要使用 EXPECTTEST_ACCEPT=1 运行以自动更新测试,并确保更新后的测试是有意义的。工作流程是相同的,只是我们有更好的方法来Assert obj 的形式与我们想要的完全相同,而不仅仅是测试一些属性。好处是,更新测试与运行测试相同。我们不需要像我在 #4659 中所做的那样手动更新每个测试。

6l7fqoea

6l7fqoea4#

这是一个关于测试的妥协,因为人们通常会在没有仔细检查更改的情况下批准它们。我们实际上应该投资于一个更可测试的调度器,这样测试就能帮助更容易地进行修改(而不是拖慢进度)。话虽如此,这作为短期的权宜之计是可以接受的。

相关问题