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,因为这可能会降低模型性能。