编写单元测试#

此页面解释了如何编写单元测试来验证您的模型实现。

必需的测试#

这些测试是使您的 PR 合并到 vLLM 库中必不可少的。没有它们,您的 PR 的 CI 将会失败。

模型加载#

tests/models/registry.py 中为您的模型包含一个 HuggingFace 仓库示例。这启用了一个单元测试,该测试加载虚拟权重以确保模型可以在 vLLM 中初始化。

重要提示

每个部分中的模型列表应按字母顺序维护。

提示

如果您的模型需要 HF Transformers 的开发版本,您可以设置 min_transformers_version 以在 CI 中跳过测试,直到模型发布。

可选测试#

这些测试对于将您的 PR 合并到 vLLM 库中是可选的。通过这些测试可以更确信您的实现是正确的,并有助于避免未来的回归。

模型正确性#

这些测试将 vLLM 的模型输出与 HF Transformers 进行比较。您可以在 tests/models 的子目录下添加新测试。

生成模型#

对于 生成模型,存在两个级别的正确性测试,如 tests/models/utils.py 中定义的那样

  • 精确正确性 (check_outputs_equal):vLLM 输出的文本应与 HF 输出的文本完全匹配。

  • 对数概率相似性 (check_logprobs_close):vLLM 输出的对数概率应位于 HF 输出的 top-k 对数概率中,反之亦然。

池化模型#

对于 池化模型,我们仅检查余弦相似度,如 tests/models/embedding/utils.py 中定义的那样。

多模态处理#

通用测试#

将您的模型添加到 tests/models/multimodal/processing/test_common.py 验证了以下输入组合是否产生相同的输出

  • 文本 + 多模态数据

  • 令牌 + 多模态数据

  • 文本 + 缓存的多模态数据

  • 令牌 + 缓存的多模态数据

模型特定测试#

您可以在 tests/models/multimodal/processing 下添加一个新文件,以运行仅适用于您的模型的测试。

例如,如果模型的 HF 处理器接受用户指定的关键字参数,您可以验证关键字参数是否被正确应用,例如在 tests/models/multimodal/processing/test_phi3v.py 中。