SGLang

SGLang 是一个用于大型语言模型和视觉语言模型的快速推理框架。

要了解更多关于 SGLang 的信息,请参阅官方文档

环境配置

默认情况下,你可以通过 pip 在新环境中安装 sglang

pip install "sglang[all]>=0.4.6.post1"

如果在安装过程中遇到问题,请随时查阅官方安装文档(链接

API 服务

借助 SGLang ,构建一个与OpenAI API兼容的API服务十分简便,该服务可以作为实现OpenAI API协议的服务器进行部署。默认情况下,它将在 http://localhost:30000 启动服务器。您可以通过 --host--port 参数来自定义地址。请按照以下所示运行命令:

python -m sglang.launch_server --model-path Qwen/Qwen3-8B

默认情况下,如果模型未指向有效的本地目录,它将从 Hugging Face Hub 下载模型文件。要从 ModelScope 下载模型,请在运行上述命令之前设置以下内容:

export SGLANG_USE_MODELSCOPE=true

对于使用张量并行的分布式推理,操作非常简单:

python -m sglang.launch_server --model-path Qwen/Qwen3-8B --tensor-parallel-size 4

上述命令将在 4 块 GPU 上使用张量并行。您应根据需求调整 GPU 的数量。

基本用法

然后,您可以利用 create chat interface 来与Qwen进行对话:

curl http://localhost:30000/v1/chat/completions -H "Content-Type: application/json" -d '{
  "model": "Qwen/Qwen3-8B",
  "messages": [
    {"role": "user", "content": "Give me a short introduction to large language models."}
  ],
  "temperature": 0.6,
  "top_p": 0.95,
  "top_k": 20,
  "max_tokens": 32768
}'

或者您可以如下面所示使用 openai Python SDK中的 API 客户端:

from openai import OpenAI
# Set OpenAI's API key and API base to use SGLang's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:30000/v1"

client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

chat_response = client.chat.completions.create(
    model="Qwen/Qwen3-8B",
    messages=[
        {"role": "user", "content": "Give me a short introduction to large language models."},
    ],
    max_tokens=32768,
    temperature=0.6,
    top_p=0.95,
    extra_body={
        "top_k": 20,
    }, 
)
print("Chat response:", chat_response)

小技巧

虽然默认的采样参数在大多数情况下适用于思考模式,但建议根据您的应用调整采样参数,并始终将采样参数传递给 API。

思考与非思考模式

Qwen3 模型会在回复前进行思考。这种行为可以通过硬开关(完全禁用思考)或软开关(模型遵循用户关于是否应该思考的指令)来控制。

硬开关在 SGLang 中可以通过以下 API 调用配置使用。要禁用思考,请使用

curl http://localhost:30000/v1/chat/completions -H "Content-Type: application/json" -d '{
  "model": "Qwen/Qwen3-8B",
  "messages": [
    {"role": "user", "content": "Give me a short introduction to large language models."}
  ],
  "temperature": 0.7,
  "top_p": 0.8,
  "top_k": 20,
  "max_tokens": 8192,
  "presence_penalty": 1.5,
  "chat_template_kwargs": {"enable_thinking": false}
}'

或者您可以如下面所示使用 openai Python SDK中的 API 客户端:

from openai import OpenAI
# Set OpenAI's API key and API base to use SGLang's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:30000/v1"

client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

chat_response = client.chat.completions.create(
    model="Qwen/Qwen3-8B",
    messages=[
        {"role": "user", "content": "Give me a short introduction to large language models."},
    ],
    max_tokens=8192,
    temperature=0.7,
    top_p=0.8,
    presence_penalty=1.5,
    extra_body={
        "top_k": 20,
        "chat_template_kwargs": {"enable_thinking": True},
    },
)
print("Chat response:", chat_response)

备注

请注意,enable_thinking并非OpenAI API定义的参数,具体传入方式可能因推理框架不同而不同。

小技巧

要完全禁用思考,您可以在启动模型时使用自定义聊天模板

python -m sglang.launch_server --model-path Qwen/Qwen3-8B --chat-template ./qwen3_nonthinking.jinja

该聊天模板会阻止模型生成思考内容,即使用户通过 /think 指示模型这样做。

小技巧

建议为思考模式和非思考模式分别设置不同的采样参数。

解析思考内容

SGLang 支持将模型生成的思考内容解析为结构化消息:

python -m sglang.launch_server --model-path Qwen/Qwen3-8B --reasoning-parser qwen3

响应消息除了包含 content 字段外,还会有一个名为 reasoning_content 的字段,其中包含模型生成的思考内容。

备注

请注意,此功能与 OpenAI API 规范不一致。

重要

enable_thinking=False 可能与思考内容解析不兼容。如果需要向 API 传递 enable_thinking=False,请考虑禁用该功能。

解析工具调用

SGLang 支持将模型生成的工具调用内容解析为结构化消息:

python -m sglang.launch_server --model-path Qwen/Qwen3-8B --tool-call-parser qwen25

详细信息,请参阅函数调用的指南

结构化/JSON输出

SGLang 支持结构化/JSON 输出。请参阅SGLan文档。此外,还建议在系统消息或您的提示中指示模型生成特定格式。

部署量化模型

Qwen3 提供了两种类型的预量化模型:FP8 和 AWQ。

部署这些模型的命令与原始模型相同,只是名称有所更改:

# For FP8 quantized model
python -m sglang.launch_server --model-path Qwen/Qwen3-8B-FP8

# For AWQ quantized model
python -m sglang.launch_server --model-path Qwen/Qwen3-8B-AWQ

上下文长度

Qwen3 模型在预训练中的上下文长度最长为 32,768 个 token。为了处理显著超过 32,768 个 token 的上下文长度,应应用 RoPE 缩放技术。我们已经验证了 YaRN 的性能,这是一种增强模型长度外推的技术,可确保在长文本上的最佳性能。

SGLang 支持 YaRN,可以配置为

python -m sglang.launch_server --model-path Qwen/Qwen3-8B --json-model-override-args '{"rope_scaling":{"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768}}' --context-length 131072

备注

SGLang 实现了静态 YaRN,这意味着无论输入长度如何,缩放因子都保持不变,这可能会对较短文本的性能产生影响。 我们建议仅在需要处理长上下文时添加 rope_scaling 配置。还建议根据需要调整 factor。例如,如果您的应用程序的典型上下文长度为 65,536 个 token,则最好将 factor 设置为 2.0。

备注

config.json 中的默认 max_position_embeddings 被设置为 40,960,SGLang 将使用该值。此分配包括为输出保留 32,768 个 token,为典型提示保留 8,192 个 token,这足以应对大多数涉及短文本处理的场景,并为模型思考留出充足空间。如果平均上下文长度不超过 32,768 个 token,我们不建议在此场景中启用 YaRN,因为这可能会降低模型性能。