支持的模型#
生成模型#
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
-
python3 -m sglang.launch_server --model-path lmms-lab/llava-onevision-qwen2-7b-ov --port=30000 --chat-template=chatml-llavapython3 -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_3python -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)