后端:SGLang 运行时 (SRT)#

SGLang 运行时 (SRT) 是一款高效的服务引擎。

快速入门#

启动服务器

python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --port 30000

发送请求

curl http://localhost:30000/generate \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Once upon a time,",
    "sampling_params": {
      "max_new_tokens": 16,
      "temperature": 0
    }
  }'

了解更多关于参数格式的信息 此处

与 OpenAI 兼容的 API#

此外,服务器支持与 OpenAI 兼容的 API。

import openai
client = openai.Client(
    base_url="http://127.0.0.1:30000/v1", api_key="EMPTY")

# Text completion
response = client.completions.create(
	model="default",
	prompt="The capital of France is",
	temperature=0,
	max_tokens=32,
)
print(response)

# Chat completion
response = client.chat.completions.create(
    model="default",
    messages=[
        {"role": "system", "content": "You are a helpful AI assistant"},
        {"role": "user", "content": "List 3 countries and their capitals."},
    ],
    temperature=0,
    max_tokens=64,
)
print(response)

# Text embedding
response = client.embeddings.create(
    model="default",
    input="How are you today",
)
print(response)

它支持流式传输、视觉以及 OpenAI API 参考 中指定的 Chat/Completions/Models/Batch 端点的多数功能。

其他服务器参数#

  • 要启用多 GPU 张量并行,请添加 --tp 2。如果它报告错误“这些设备之间不支持对等访问”,请在服务器启动命令中添加 --enable-p2p-check

python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --tp 2
  • 要启用多 GPU 数据并行,请添加 --dp 2。如果内存充足,数据并行更适合吞吐量。它也可以与张量并行一起使用。以下命令总共使用 4 个 GPU。

python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --dp 2 --tp 2
  • 如果在服务期间看到内存不足错误,请尝试通过设置较小的 --mem-fraction-static 值来减少 KV 缓存池的内存使用量。默认值为 0.9

python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --mem-fraction-static 0.7
  • 有关调整超参数以获得更好性能的信息,请参阅 超参数调整

  • 如果在为长提示进行预填充时看到内存不足错误,请尝试设置较小的分块预填充大小。

python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --chunked-prefill-size 4096
  • 要启用 torch.compile 加速,请添加 --enable-torch-compile。它加速了小批量大小的小模型。

  • 要启用 fp8 权重量化,请在 fp16 检查点上添加 --quantization fp8 或直接加载 fp8 检查点,无需指定任何参数。

  • 要启用 fp8 kv 缓存量化,请添加 --kv-cache-dtype fp8_e5m2

  • 如果模型在 Hugging Face 分词器中没有聊天模板,你可以指定一个 自定义聊天模板

  • 在多个节点上运行张量并行,添加 --nnodes 2。如果你有两个节点,每个节点有两个 GPU,并且想要运行 TP=4,让 sgl-dev-0 成为第一个节点的主机名,50000 成为一个可用的端口。

# Node 0
python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --tp 4 --nccl-init sgl-dev-0:50000 --nnodes 2 --node-rank 0

# Node 1
python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --tp 4 --nccl-init sgl-dev-0:50000 --nnodes 2 --node-rank 1

支持的模型#

生成模型

  • Llama / Llama 2 / Llama 3 / Llama 3.1

  • Mistral / Mixtral / Mistral NeMo

  • Gemma / Gemma 2

  • Qwen / Qwen 2 / Qwen 2 MoE

  • DeepSeek / DeepSeek 2

  • 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

Embedding Models

  • e5-mistral

  • gte-Qwen2

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

支持新模型的说明请参考 此处

使用 ModelScope 中的模型#

More

要使用 ModelScope 中的模型,请设置环境变量 SGLANG_USE_MODELSCOPE。

export SGLANG_USE_MODELSCOPE=true

启动 Qwen2-7B-Instruct 服务器

SGLANG_USE_MODELSCOPE=true python -m sglang.launch_server --model-path qwen/Qwen2-7B-Instruct --port 30000

运行 Llama 3.1 405B#

More
# Run 405B (fp8) on a single node
python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tp 8

# Run 405B (fp16) on two nodes
## on the first node, replace the `172.16.4.52:20000` with your own first node ip address and port
GLOO_SOCKET_IFNAME=eth0 python3 -m sglang.launch_server --model-path meta-llama/Meta-Llama-3.1-405B-Instruct --tp 16 --nccl-init-addr 172.16.4.52:20000 --nnodes 2 --node-rank 0 --disable-cuda-graph

## on the first node, replace the `172.16.4.52:20000` with your own first node ip address and port
GLOO_SOCKET_IFNAME=eth0 python3 -m sglang.launch_server --model-path meta-llama/Meta-Llama-3.1-405B-Instruct --tp 16 --nccl-init-addr 172.16.4.52:20000 --nnodes 2 --node-rank 1 --disable-cuda-graph

基准性能#

  • 通过运行以下命令,在不启动服务器的情况下,对单个静态批次进行基准测试。参数与 launch_server.py 相同。请注意,这不是动态批处理服务器,因此它可能无法处理真实服务器可以处理的批次大小的内存。真实服务器会将预填充截断为多个批次,而此单元测试不会。为了进行准确的大批次测试,请使用 sglang.bench_serving

    python -m sglang.bench_latency --model-path meta-llama/Meta-Llama-3-8B-Instruct --batch 32 --input-len 256 --output-len 32
    
  • 基准测试在线服务。首先启动服务器,然后运行以下命令。

    python3 -m sglang.bench_serving --backend sglang --num-prompt 10