单元测试¶
本页面介绍了如何编写单元测试以验证您的模型实现。
必要测试¶
这些测试是您的 PR 合并到 vLLM 库所必需的。缺少这些测试,您的 PR CI 将会失败。
模型加载¶
请在 tests/models/registry.py 中包含一个您的模型对应的 HuggingFace 仓库示例。这会启用单元测试,通过加载虚拟权重来确保模型可以在 vLLM 中正确初始化。
重要
各部分中的模型列表应按字母顺序维护。
提示
如果您的模型需要开发版本的 HF Transformers,您可以设置 min_transformers_version,以便在模型发布前跳过 CI 中的该项测试。
可选测试¶
这些测试并非 PR 合并所必需,但通过这些测试可以更确信您的实现是正确的,并有助于防止未来的回归问题。
模型正确性¶
这些测试将 vLLM 的模型输出与 HF Transformers 进行比较。您可以在 tests/models 的子目录下添加新的测试。
生成式模型¶
对于 生成式模型,根据 tests/models/utils.py 中的定义,有两种级别的正确性测试:
- 精确正确性 (
check_outputs_equal):vLLM 输出的文本应与 HF 输出的文本完全匹配。 - Logprobs 相似度 (
check_logprobs_close):vLLM 输出的 logprobs 应处于 HF 输出的 top-k logprobs 范围内,反之亦然。
池化(Pooling)模型¶
对于 池化模型,我们只需检查余弦相似度,具体定义请参考 tests/models/utils.py。
多模态处理¶
通用测试¶
将您的模型添加到 tests/models/multimodal/processing/test_common.py 可以验证以下输入组合是否产生相同的输出:
- 文本 + 多模态数据
- Token + 多模态数据
- 文本 + 缓存的多模态数据
- Token + 缓存的多模态数据
模型专用测试¶
您可以在 tests/models/multimodal/processing 下添加新文件,以运行仅适用于您模型的测试。
例如,如果您的模型所使用的 HF 处理器接受用户指定的关键字参数,您可以验证这些关键字参数是否被正确应用,具体可参考 tests/models/multimodal/processing/test_phi3v.py。