如何在 SGLang 中支持新模型#
在 SGLang 中支持新模型,你只需要在 SGLang 模型目录 下添加一个文件。你可以参考现有模型的实现,为新模型创建新的文件。对于大多数模型,你应该能够找到一个类似的模型作为起点(例如,从 Llama 开始)。
测试正确性#
交互式调试#
对于交互式调试,你可以比较 huggingface/transformers 和 SGLang 的输出。以下两个命令应该给出相同的文本输出和非常相似的预填充 logits。
通过
python3 scripts/playground/reference_hf.py --model [新模型]
获取参考输出通过
python3 -m sglang.bench_latency --correct --model [新模型]
获取 SGLang 输出
将模型添加到测试套件#
为了确保新模型在未来得到良好的维护,最好将其添加到测试套件中。你可以将其添加到 test_generation_models.py 中的 ALL_OTHER_MODELS
列表中,并运行以下命令进行测试。
例如,如果模型是 Qwen/Qwen2-1.5B
ONLY_RUN=Qwen/Qwen2-1.5B python3 -m unittest test_generation_models.TestGenerationModels.test_others
将模型从 vLLM 移植到 SGLang#
另一个有价值的资源是 vLLM 模型目录。vLLM 涵盖了大量的模型,SGLang 重用了 vLLM 的接口和一些层来实现这些模型。这种相似性使得将许多模型从 vLLM 移植到 SGLang 变得容易。
要将模型从 vLLM 移植到 SGLang,你可以比较这两个文件:SGLang Llama 实现 和 vLLM Llama 实现。这个比较将帮助你理解如何将模型实现从 vLLM 转换为 SGLang。主要区别是将 Attention 替换为 RadixAttention。其他部分几乎相同。具体来说,
用 SGLang 的
RadixAttention
替换 vllm 的Attention
。请注意,你需要将layer_id
传递给RadixAttention
。用 SGLang 的
LogitsProcessor
替换 vllm 的LogitsProcessor
。用 SGLang 层替换其他 vLLM 层(例如,
RMSNorm
、SiluAndMul
)。删除
Sample
。更改
forward()
函数,并添加input_metadata
。在最后添加
EntryClass
。