支持的模型#

生成模型#

  • Llama / Llama 2 / Llama 3 / Llama 3.1 / Llama 3.2

  • Mistral / Mixtral / Mistral NeMo

  • Gemma / Gemma 2

  • Qwen / Qwen 2 / Qwen 2 MoE / Qwen 2 VL

  • 深度搜索 / 深度搜索 2

  • OLMoE

  • LLaVA-OneVision

    • python3 -m sglang.launch_server --model-path lmms-lab/llava-onevision-qwen2-7b-ov --port=30000 --chat-template=chatml-llava

    • python3 -m sglang.launch_server --model-path lmms-lab/llava-onevision-qwen2-72b-ov --port=30000 --tp-size=8 --chat-template=chatml-llava

    • 使用OpenAI Vision API查询服务器。查看示例在test/srt/test_vision_openai_server.py

  • LLaVA 1.5 / 1.6 / NeXT

    • python -m sglang.launch_server --model-path lmms-lab/llama3-llava-next-8b --port=30000 --tp-size=1 --chat-template=llava_llama_3

    • python -m sglang.launch_server --model-path lmms-lab/llava-next-72b --port=30000 --tp-size=8 --chat-template=chatml-llava

    • 使用OpenAI Vision API查询服务器。查看示例在test/srt/test_vision_openai_server.py

  • Yi-VL

  • StableLM

  • Command-R

  • DBRX

  • Grok

  • ChatGLM

  • InternLM 2

  • Exaone 3

  • 百川2

  • MiniCPM / MiniCPM 3

  • XVERSE / XVERSE MoE

  • SmolLM

  • GLM-4

  • Phi-3-小型

  • IBM Granite 3

嵌入模型#

  • LlamaEmbeddingModel

  • Mistral嵌入模型

  • QWen嵌入模型

    • python -m sglang.launch_server --model-path Alibaba-NLP/gte-Qwen2-7B-instruct --is-embedding

奖励模型#

  • LlamaForSequenceClassification

    • python -m sglang.launch_server --model-path Skywork/Skywork-Reward-Llama-3.1-8B-v0.2 --is-embedding

  • Gemma2ForSequenceClassification

    • python -m sglang.launch_server --model-path Skywork/Skywork-Reward-Gemma-2-27B-v0.2 --is-embedding

  • InternLM2ForRewardModel

    • python -m sglang.launch_server --model-path internlm/internlm2-7b-reward --is-embedding --trust-remote-code

如何支持新模型#

为了在SGLang中支持一个新模型,您只需要在SGLang模型目录下添加一个文件。 您可以从现有的模型实现中学习,并为新模型创建新文件。 对于大多数模型,您应该能够找到一个类似的模型作为起点(例如,从Llama开始)。

测试正确性#

交互式调试#

为了进行交互式调试,您可以比较huggingface/transformers和SGLang的输出。 以下两个命令应该给出相同的文本输出和非常相似的预填充logits。

  • 通过python3 scripts/playground/reference_hf.py --model [new model]获取参考输出

  • 通过python3 -m sglang.bench_one_batch --correct --model [new 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。主要区别是用RadixAttention替换了Attention。其他部分几乎相同。具体来说,

  • 将vllm的Attention替换为RadixAttention。请注意,你需要将layer_id一直传递到RadixAttention

  • 将vllm的LogitsProcessor替换为SGLang的LogitsProcessor

  • 用SGLang层替换其他vLLM层(例如,RMSNorm, SiluAndMul)。

  • 移除 Sample

  • 更改 forward() 函数,并添加 forward_batch

  • 在末尾添加 EntryClass

注册外部模型实现#

除了上述方法外,您还可以在启动服务器之前使用ModelRegistry注册您的新模型。如果您希望在不修改源代码的情况下集成您的模型,这种方法非常有用。

以下是你可以如何做到这一点:

from sglang.srt.models.registry import ModelRegistry
from sglang.srt.server import launch_server

# for a single model, you can add it to the registry
ModelRegistry.models[model_name] = model_class

# for multiple models, you can imitate the import_model_classes() function in sglang/srt/models/registry.py
from functools import lru_cache

@lru_cache()
def import_new_model_classes():
    model_arch_name_to_cls = {}
    ...
    return model_arch_name_to_cls

ModelRegistry.models.update(import_new_model_classes())

launch_server(server_args)