SGLang是一个高性能的大语言模型推理框架,提供了丰富的服务器参数配置选项。本文将基于官方文档详细介绍SGLang服务器的各种参数配置,帮助开发者更好地优化模型推理性能。
常用启动命令
多GPU张量并行
python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --tp 2
多GPU数据并行
python -m sglang_router.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --dp 2 --tp 2
内存优化
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
模型和分词器参数
参数 |
描述 |
默认值 |
--model-path |
模型权重路径,支持本地文件夹或Hugging Face仓库ID |
None |
--tokenizer-path |
分词器路径 |
None |
--tokenizer-mode |
分词器模式:'auto'使用快速分词器,'slow'使用慢速分词器 |
auto |
--skip-tokenizer-init |
跳过分词器初始化,在生成请求中传递input_ids |
False |
--load-format |
模型权重加载格式:'auto'、'pt'、'safetensors'、'npcache'、'dummy'、'gguf'、'bitsandbytes'、'layered' |
auto |
--trust-remote-code |
是否允许在Hub上使用自定义模型定义 |
False |
--context-length |
模型最大上下文长度,默认使用模型config.json中的值 |
None |
--is-embedding |
是否将CausalLM用作嵌入模型 |
False |
--enable-multimodal |
启用多模态功能 |
None |
--revision |
使用的特定模型版本 |
None |
--model-impl |
模型实现:'auto'、'sglang'、'transformers' |
auto |
HTTP服务器参数
参数 |
描述 |
默认值 |
--host |
服务器主机地址 |
0.0.0.0 |
--port |
服务器端口 |
30000 |
--allow-credentials |
允许跨域凭据 |
False |
--allowed-origins |
允许的跨域来源 |
* |
--allowed-methods |
允许的HTTP方法 |
GET, POST, OPTIONS |
--allowed-headers |
允许的HTTP头 |
* |
--max-request-size |
最大请求大小(字节) |
1048576 |
--max-queue-size |
最大队列大小 |
1000 |
--max-batch-size |
最大批处理大小 |
1000 |
--max-batch-delay |
最大批处理延迟(秒) |
0.1 |
--max-concurrent-requests |
最大并发请求数 |
1000 |
量化和数据类型参数
参数 |
描述 |
默认值 |
--dtype |
模型数据类型:'auto'、'half'、'float16'、'bfloat16'、'float'、'float32' |
auto |
--quantization |
量化方法:'awq'、'gptq'、'squeezellm'、'marlin'、'aqlm'、'exl2'、'quip'、'eetq'、'fp8' |
None |
--kv-cache-dtype |
KV缓存数据类型 |
auto |
--rope-scaling |
RoPE缩放配置 |
None |
--max-model-len |
模型最大长度 |
None |
--block-size |
块大小 |
None |
--swap-space |
交换空间大小(GB) |
4 |
--gpu-memory-utilization |
GPU内存使用率 |
0.9 |
--max-paddings |
最大填充长度 |
8192 |
--disable-log-stats |
禁用日志统计 |
False |
--disable-log-requests |
禁用请求日志 |
False |
内存和调度参数
参数 |
描述 |
默认值 |
--max-num-batched-tokens |
批处理的最大token数量 |
2048 |
--max-num-seqs |
最大序列数 |
256 |
--max-paddings |
最大填充长度 |
8192 |
--max-lora-rank |
最大LoRA秩 |
None |
--max-lora-max-rank |
最大LoRA最大秩 |
None |
--max-rolling-batch-size |
最大滚动批处理大小 |
None |
--max-rolling-batch-delay |
最大滚动批处理延迟 |
None |
--max-rolling-batch-preempt |
最大滚动批处理抢占 |
None |
--max-rolling-batch-attention |
最大滚动批处理注意力 |
None |
--max-rolling-batch-cache |
最大滚动批处理缓存 |
None |
--max-rolling-batch-cache-size |
最大滚动批处理缓存大小 |
None |
运行时选项
参数 |
描述 |
默认值 |
--seed |
随机种子 |
0 |
--max-model-len |
模型最大长度 |
None |
--block-size |
块大小 |
None |
--swap-space |
交换空间大小(GB) |
4 |
--gpu-memory-utilization |
GPU内存使用率 |
0.9 |
--max-paddings |
最大填充长度 |
8192 |
--disable-log-stats |
禁用日志统计 |
False |
--disable-log-requests |
禁用请求日志 |
False |
--max-lora-rank |
最大LoRA秩 |
None |
--max-lora-max-rank |
最大LoRA最大秩 |
None |
日志参数
参数 |
描述 |
默认值 |
--log-level |
日志级别 |
INFO |
--log-file |
日志文件路径 |
None |
--log-format |
日志格式 |
None |
--log-interval |
日志间隔 |
10 |
--log-requests |
记录请求日志 |
True |
--log-stats |
记录统计日志 |
True |
--log-timestamps |
记录时间戳 |
False |
API相关参数
参数 |
描述 |
默认值 |
--api-key |
API密钥 |
None |
--api-key-file |
API密钥文件路径 |
None |
--api-key-header |
API密钥头名称 |
Authorization |
--api-key-prefix |
API密钥前缀 |
Bearer |
--api-key-suffix |
API密钥后缀 |
None |
--api-key-format |
API密钥格式 |
None |
--api-key-encoding |
API密钥编码 |
None |
--api-key-hash |
API密钥哈希 |
None |
--api-key-salt |
API密钥盐值 |
None |
--api-key-iterations |
API密钥迭代次数 |
None |
数据并行参数
参数 |
描述 |
默认值 |
--dp |
数据并行大小 |
1 |
--dp-backend |
数据并行后端 |
None |
--dp-address |
数据并行地址 |
None |
--dp-port |
数据并行端口 |
None |
--dp-world-size |
数据并行世界大小 |
None |
--dp-rank |
数据并行秩 |
None |
--dp-timeout |
数据并行超时 |
None |
--dp-retry |
数据并行重试 |
None |
--dp-verbose |
数据并行详细模式 |
False |
多节点分布式服务参数
参数 |
描述 |
默认值 |
--nnodes |
节点数量 |
1 |
--node-rank |
节点秩 |
0 |
--dist-init-addr |
分布式初始化地址 |
None |
--dist-init-port |
分布式初始化端口 |
None |
--dist-timeout |
分布式超时 |
None |
--dist-backend |
分布式后端 |
None |
--dist-world-size |
分布式世界大小 |
None |
--dist-rank |
分布式秩 |
None |
张量并行参数
参数 |
描述 |
默认值 |
--tp |
张量并行大小 |
1 |
--tp-backend |
张量并行后端 |
None |
--tp-address |
张量并行地址 |
None |
--tp-port |
张量并行端口 |
None |
--tp-world-size |
张量并行世界大小 |
None |
--tp-rank |
张量并行秩 |
None |
--tp-timeout |
张量并行超时 |
None |
--tp-retry |
张量并行重试 |
None |
--tp-verbose |
张量并行详细模式 |
False |
流水线并行参数
参数 |
描述 |
默认值 |
--pp |
流水线并行大小 |
1 |
--pp-backend |
流水线并行后端 |
None |
--pp-address |
流水线并行地址 |
None |
--pp-port |
流水线并行端口 |
None |
--pp-world-size |
流水线并行世界大小 |
None |
--pp-rank |
流水线并行秩 |
None |
--pp-timeout |
流水线并行超时 |
None |
--pp-retry |
流水线并行重试 |
None |
--pp-verbose |
流水线并行详细模式 |
False |
专家并行参数
参数 |
描述 |
默认值 |
--ep |
专家并行大小 |
1 |
--ep-backend |
专家并行后端 |
None |
--ep-address |
专家并行地址 |
None |
--ep-port |
专家并行端口 |
None |
--ep-world-size |
专家并行世界大小 |
None |
--ep-rank |
专家并行秩 |
None |
--ep-timeout |
专家并行超时 |
None |
--ep-retry |
专家并行重试 |
None |
--ep-verbose |
专家并行详细模式 |
False |
优化和调试选项
参数 |
描述 |
默认值 |
--disable-radix-cache |
禁用RadixAttention前缀缓存 |
False |
--cuda-graph-max-bs |
CUDA图最大批处理大小 |
None |
--cuda-graph-bs |
CUDA图批处理大小列表 |
None |
--disable-cuda-graph |
禁用CUDA图 |
False |
--disable-cuda-graph-padding |
禁用CUDA图填充 |
False |
--enable-profile-cuda-graph |
启用CUDA图分析 |
False |
--enable-nccl-nvls |
启用NCCL NVLS |
False |
--enable-tokenizer-batch-encode |
启用分词器批处理编码 |
False |
--disable-outlines-disk-cache |
禁用outlines磁盘缓存 |
False |
--disable-custom-all-reduce |
禁用自定义all-reduce内核 |
False |
--enable-mscclpp |
启用mscclpp |
False |
--disable-overlap-schedule |
禁用重叠调度器 |
False |
--enable-mixed-chunk |
启用混合块 |
False |
--enable-dp-attention |
启用数据并行注意力 |
False |
--enable-dp-lm-head |
启用数据并行语言模型头 |
False |
--enable-two-batch-overlap |
启用双批处理重叠 |
False |
--enable-torch-compile |
启用torch.compile优化 |
False |
--torch-compile-max-bs |
torch.compile最大批处理大小 |
32 |
--torchao-config |
torchao配置 |
None |
--enable-nan-detection |
启用NaN检测 |
False |
--enable-p2p-check |
启用P2P检查 |
False |
--triton-attention-reduce-in-fp32 |
Triton注意力在fp32中归约 |
False |
--triton-attention-num-kv-splits |
Triton注意力KV分割数 |
8 |
--num-continuous-decode-steps |
连续解码步数 |
1 |
--delete-ckpt-after-loading |
加载后删除检查点 |
False |
--enable-memory-saver |
启用内存节省器 |
False |
--allow-auto-truncate |
允许自动截断 |
False |
--enable-custom-logit-processor |
启用自定义logit处理器 |
False |
--flashinfer-mla-disable-ragged |
禁用Flashinfer MLA ragged处理 |
False |
--disable-shared-experts-fusion |
禁用共享专家融合 |
False |
--disable-chunked-prefix-cache |
禁用分块前缀缓存 |
False |
--disable-fast-image-processor |
禁用快速图像处理器 |
False |
--enable-return-hidden-states |
启用返回隐藏状态 |
False |
--enable-triton-kernel-moe |
启用Triton MoE内核 |
False |
实际配置示例
基础推理服务器
python -m sglang.launch_server \
--model-path meta-llama/Meta-Llama-3-8B-Instruct \
--host 0.0.0.0 \
--port 30000 \
--max-num-batched-tokens 4096 \
--max-num-seqs 256
高性能推理服务器
python -m sglang.launch_server \
--model-path meta-llama/Meta-Llama-3-8B-Instruct \
--dtype bfloat16 \
--gpu-memory-utilization 0.9 \
--max-model-len 8192 \
--max-num-batched-tokens 8192 \
--max-num-seqs 512 \
--disable-log-stats
量化模型服务器
python -m sglang.launch_server \
--model-path meta-llama/Meta-Llama-3-8B-Instruct \
--quantization awq \
--load-format awq \
--gpu-memory-utilization 0.8 \
--max-model-len 4096
多GPU张量并行
python -m sglang.launch_server \
--model-path meta-llama/Meta-Llama-3-8B-Instruct \
--tp 2 \
--enable-p2p-check
多节点分布式
# 节点0
python -m sglang.launch_server \
--model-path meta-llama/Meta-Llama-3-8B-Instruct \
--tp 4 \
--dist-init-addr sgl-dev-0:50000 \
--nnodes 2 \
--node-rank 0
# 节点1
python -m sglang.launch_server \
--model-path meta-llama/Meta-Llama-3-8B-Instruct \
--tp 4 \
--dist-init-addr sgl-dev-0:50000 \
--nnodes 2 \
--node-rank 1
参数调优建议
内存优化
- GPU内存使用率: 根据GPU显存大小调整
gpu-memory-utilization
- 模型长度: 根据实际需求设置
max-model-len
- 批处理大小: 平衡
max-num-batched-tokens
和 max-num-seqs
- 交换空间: 设置合适的
swap-space
值
性能优化
- 数据类型: 优先使用
bfloat16
或 float16
- 量化: 对于大模型考虑使用量化
- 日志: 生产环境禁用不必要的日志
- CUDA图: 启用CUDA图优化
并发优化
- 序列数: 根据GPU计算能力调整
max-num-seqs
- 批处理: 合理设置
max-num-batched-tokens
- 并行: 多GPU环境下使用张量并行
- 数据并行: 使用SGLang Router进行数据并行
常见问题解决
内存不足
- 降低
gpu-memory-utilization
- 减少
max-model-len
- 使用量化模型
- 增加
swap-space
性能瓶颈
- 增加
max-num-batched-tokens
- 调整
max-num-seqs
- 使用更高效的数据类型
- 启用CUDA图优化
并发限制
- 增加
max-num-seqs
- 优化批处理策略
- 使用分布式推理
- 调整服务器资源分配
GPU访问问题
- 添加
--enable-p2p-check
参数
- 检查GPU驱动和CUDA版本
- 验证GPU间连接
总结
SGLang提供了丰富的参数配置选项,开发者可以根据实际需求进行精细调优。关键是要在性能、内存使用和并发能力之间找到平衡点。建议在生产环境中进行充分的压力测试,找到最适合的参数组合。通过合理配置这些参数,可以显著提升大语言模型的推理性能和资源利用率。
评论区