安装 SGLang#
您可以通过以下方法之一安装 SGLang。
本页面主要适用于常见的 NVIDIA GPU 平台。 对于其他或更新的平台,请参考 AMD GPUs、Intel Xeon CPUs、TPU、NVIDIA DGX Spark、NVIDIA Jetson、Ascend NPUs 和 Intel XPU 的专用页面。
方法 1:使用 pip 或 uv#
建议使用 uv 进行更快的安装:
pip install --upgrade pip
pip install uv
uv pip install "sglang" --prerelease=allow
常见问题快速修复
如果遇到
OSError: CUDA_HOME environment variable is not set错误。请通过以下任一解决方案将其设置为您的 CUDA 安装根目录:使用
export CUDA_HOME=/usr/local/cuda-<your-cuda-version>设置CUDA_HOME环境变量。首先按照 FlashInfer 安装文档 安装 FlashInfer,然后按上述方式安装 SGLang。
方法 2:从源码安装#
# 使用最新的发布分支
git clone -b v0.5.5.post3 https://github.com/sgl-project/sglang.git
cd sglang
# 安装 python 包
pip install --upgrade pip
pip install -e "python"
常见问题快速修复
如果您想开发 SGLang,可以尝试使用 dev docker 镜像。请参考 设置 docker 容器。docker 镜像是
lmsysorg/sglang:dev。
方法 3:使用 Docker#
Docker 镜像可在 lmsysorg/sglang 获取,该镜像基于 Dockerfile 构建。
将下面的 <secret> 替换为您的 huggingface hub token。
docker run --gpus all \
--shm-size 32g \
-p 30000:30000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HF_TOKEN=<secret>" \
--ipc=host \
lmsysorg/sglang:latest \
python3 -m sglang.launch_server --model-path meta-llama/Llama-3.1-8B-Instruct --host 0.0.0.0 --port 30000
您也可以在此处找到夜间构建的 docker 镜像:nightly。
方法 4:使用 Kubernetes#
请查看 OME,这是一个用于企业级管理和部署大型语言模型 (LLMs) 的 Kubernetes 操作符。
更多
选项 1:用于单节点服务(通常当模型大小适合一个节点上的 GPU 时)
执行命令
kubectl apply -f docker/k8s-sglang-service.yaml,以创建 k8s 部署和服务,以 llama-31-8b 为例。选项 2:用于多节点服务(通常当大型模型需要多个 GPU 节点时,例如
DeepSeek-R1)根据需要修改 LLM 模型路径和参数,然后执行命令
kubectl apply -f docker/k8s-sglang-distributed-sts.yaml,以创建两个节点的 k8s statefulset 和服务。
方法 5:使用 docker compose#
更多
如果您计划将其作为服务运行,建议使用此方法。 更好的方法是使用 k8s-sglang-service.yaml。
将 compose.yml 复制到您的本地机器
在您的终端中执行命令
docker compose up -d。
方法 6:使用 SkyPilot 在 Kubernetes 或云端运行#
更多
要在 Kubernetes 或 12+ 个云平台上部署,您可以使用 SkyPilot。
安装 SkyPilot 并设置 Kubernetes 集群或云访问权限:请参阅 SkyPilot 文档。
使用单个命令在您自己的基础设施上部署并获取 HTTP API 端点:
SkyPilot YAML: sglang.yaml
# sglang.yaml
envs:
HF_TOKEN: null
resources:
image_id: docker:lmsysorg/sglang:latest
accelerators: A100
ports: 30000
run: |
conda deactivate
python3 -m sglang.launch_server \
--model-path meta-llama/Llama-3.1-8B-Instruct \
--host 0.0.0.0 \
--port 30000
# 在任何云或 Kubernetes 集群上部署。使用 --cloud <cloud> 选择特定的云提供商。
HF_TOKEN=<secret> sky launch -c sglang --env HF_TOKEN sglang.yaml
# 获取 HTTP API 端点
sky status --endpoint 30000 sglang
要通过自动扩展和故障恢复进一步扩展您的部署,请查看 SkyServe + SGLang 指南。
方法 7:在 AWS SageMaker 上运行#
更多
要在 AWS SageMaker 上部署 SGLang,请查看 AWS SageMaker 推理
要使用您自己的容器托管模型,请按照以下步骤操作:
使用 sagemaker.Dockerfile 和 serve 脚本构建 docker 容器。
将您的容器推送到 AWS ECR。
Dockerfile 构建脚本: build-and-push.sh
#!/bin/bash
AWS_ACCOUNT="<YOUR_AWS_ACCOUNT>"
AWS_REGION="<YOUR_AWS_REGION>"
REPOSITORY_NAME="<YOUR_REPOSITORY_NAME>"
IMAGE_TAG="<YOUR_IMAGE_TAG>"
ECR_REGISTRY="${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com"
IMAGE_URI="${ECR_REGISTRY}/${REPOSITORY_NAME}:${IMAGE_TAG}"
echo "Starting build and push process..."
# Login to ECR
echo "Logging into ECR..."
aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ECR_REGISTRY}
# Build the image
echo "Building Docker image..."
docker build -t ${IMAGE_URI} -f sagemaker.Dockerfile .
echo "Pushing ${IMAGE_URI}"
docker push ${IMAGE_URI}
echo "Build and push completed successfully!"
在 AWS Sagemaker 上部署模型以进行服务,请参考 deploy_and_serve_endpoint.py。有关更多信息,请查看 sagemaker-python-sdk。
默认情况下,SageMaker 上的模型服务器将使用以下命令运行:
python3 -m sglang.launch_server --model-path opt/ml/model --host 0.0.0.0 --port 8080。这对于使用 SageMaker 托管您自己的模型是最佳选择。要修改模型服务参数,serve 脚本允许通过指定带有
SM_SGLANG_前缀的环境变量来使用python3 -m sglang.launch_server --helpcli 中的所有可用选项。serve 脚本将自动将带有
SM_SGLANG_前缀的所有环境变量从SM_SGLANG_INPUT_ARGUMENT转换为--input-argument,以解析到python3 -m sglang.launch_servercli 中。例如,要使用推理解析器运行 Qwen/Qwen3-0.6B,只需添加额外的环境变量
SM_SGLANG_MODEL_PATH=Qwen/Qwen3-0.6B和SM_SGLANG_REASONING_PARSER=qwen3。
常见注意事项#
FlashInfer 是默认的注意力内核后端。它仅支持 sm75 及更高版本。如果您在 sm75+ 设备(例如 T4、A10、A100、L4、L40S、H100)上遇到任何与 FlashInfer 相关的问题,请通过添加
--attention-backend triton --sampling-backend pytorch切换到其他内核,并在 GitHub 上打开问题。要在本地重新安装 flashinfer,请使用以下命令:
pip3 install --upgrade flashinfer-python --force-reinstall --no-deps,然后使用rm -rf ~/.cache/flashinfer删除缓存。