后端: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
-
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