SGLang 与 Transformers 后端集成

发布于 2025 年 6 月 23 日
在 GitHub 上更新

Hugging Face transformers 库是使用最先进模型的标准工具——从试验前沿研究到在自定义数据上进行微调。其简单性、灵活性和庞大的模型库使其成为快速开发的强大工具。

但是,当您准备从 Notebooks 转向生产环境时,推理性能就变得至关重要。这时 SGLang 就派上用场了。

SGLang 专为高吞吐量、低延迟的推理而设计,现在它与 transformers 实现了无缝集成,可将其作为后端。这意味着您可以将 transformers 的灵活性与 SGLang 的原始性能结合起来。

让我们深入了解此集成所实现的功能以及如何使用它。

TL;DR (太长不看)

SGLang 现在支持将 Hugging Face transformers 作为后端,让您可以开箱即用地运行任何与 transformers 兼容的模型,并实现高性能推理。

import sglang as sgl

llm = sgl.Engine("meta-llama/Llama-3.2-1B-Instruct", impl="transformers")
print(llm.generate(["The capital of France is"], {"max_new_tokens": 20})[0])

无需原生支持——SGLang 在需要时会自动回退到 Transformers,或者您可以显式地设置 impl="transformers"

Transformers 和 SGLang

让我们用一个简单的文本生成示例,使用 meta-llama/Llama-3.2-1B-Instruct 来比较这两种方法。

Transformers

transformers 库非常适合实验、小规模任务和训练,但它并未针对高并发或低延迟场景进行优化。

from transformers import pipeline

pipe = pipeline("text-generation", model="meta-llama/Llama-3.2-1B-Instruct")
generate_kwargs = {
    "top_p": 0.95,
    "top_k": 20,
    "temperature": 0.8,
    "max_new_tokens": 256
}
result = pipe("The future of AI is", **generate_kwargs)
print(result[0]["generated_text"])

SGLang

SGLang 采用了不同的路线,通过 RadixAttention (一种内存高效的注意力机制) 等特性来优先考虑效率。使用 SGLang 进行推理的速度明显更快,资源效率更高,尤其是在高负载下。以下是在 SGLang 中使用离线引擎完成相同任务的代码:

import sglang as sgl

if __name__ == '__main__':
    llm = sgl.Engine(model_path="meta-llama/Llama-3.2-1B-Instruct")
    prompts = ["The future of AI is"]
    sampling_params =  {
        "top_p": 0.95,
        "top_k": 20,
        "temperature": 0.8,
        "max_new_tokens": 256
    }
    outputs = llm.generate(prompts, sampling_params)
    print(outputs[0])

或者,您也可以启动一个服务器并发送请求

python3 -m sglang.launch_server \
  --model-path meta-llama/Llama-3.2-1B-Instruct \
  --host 0.0.0.0 \
  --port 30000
response = requests.post(
    "https://:30000/generate",
    json={
        "text": "The future of AI is",
        "sampling_params": {
            "top_p": 0.95,
            "top_k": 20,
            "temperature": 0.8,
            "max_new_tokens": 256
        },
    },
)
print(response.json())

请注意,SGLang 还提供与 OpenAI 兼容的 API,使其成为外部服务的直接替代品。

SGLang 中的 Transformers 后端

借助新的 transformers 后端集成,SGLang 现在可以自动回退到使用其原生不支持的 transformers 模型。这在实践中意味着:

  • 可以立即访问添加到 transformers 的新模型
  • 支持来自 Hugging Face Hub 的自定义模型
  • 更少的工程开销

这在不牺牲 transformers 生态系统的简单性和多功能性的情况下,解锁了更快的推理和优化的部署 (例如启用 RadixAttention)。

用法

llm = sgl.Engine(model_path="meta-llama/Llama-3.2-1B-Instruct", impl="transformers")

请注意,指定 impl 参数是可选的。如果模型不是 SGLang 原生支持的,它会自动切换到 transformers 实现。

任何在 Hugging Face Hub 上使用 trust_remote_code=True 且能与 transformers 正常工作并正确实现注意力机制的模型,都与 SGLang 兼容。您可以在官方文档中找到具体要求。如果您的自定义模型满足这些标准,您只需在加载时设置 trust_remote_code=True 即可。

llm = sgl.Engine(model_path="new-custom-transformers-model", impl="transformers", trust_remote_code=True)

示例

Kyutai 团队的 Helium 模型尚未得到 SGLang 的原生支持。这正是 transformers 后端的优势所在,它可以在无需等待原生支持的情况下实现优化的推理。

python3 -m sglang.launch_server \
  --model-path kyutai/helium-1-preview-2b \
  --impl transformers \
  --host 0.0.0.0 \
  --port 30000
response = requests.post(
    "https://:30000/generate",
    json={
        "text": "The capital of France is",
        "sampling_params": {
            "top_p": 0.95,
            "top_k": 20,
            "temperature": 0.8,
            "max_new_tokens": 256
        },
    },
)
print(response.json())

下一步计划

我们正在积极致力于以下几个关键领域以增强此集成:

  1. 性能改进:目前 transformer 模型的性能落后于原生集成。我们的主要目标是优化并缩小这一差距。

  2. LoRA 支持

  3. VLM 集成:我们还在努力增加对视觉语言模型 (VLM) 的支持,以扩大功能范围和用例。

社区

注册登录 以发表评论