【运维】SGLang 安装指南

参考官方文档

SGLang 是一个高性能的大语言模型推理框架,支持多种安装方式。本文档提供了详细的安装步骤和常见问题解决方案。

系统要求

  • Python 3.8+
  • CUDA 11.8+ (GPU 推理)
  • 推荐使用 uv 进行依赖管理以获得更快的安装速度

安装方法

方法一:使用 pip 或 uv (推荐)

bash 复制代码
# 升级 pip
pip install --upgrade pip

# 安装 uv (推荐)
pip install uv

# 使用 uv 安装 SGLang
uv pip install "sglang[all]>=0.4.9.post2"

常见问题快速修复:

  1. FlashInfer 相关问题

    • SGLang 当前使用 torch 2.7.1,需要安装对应版本的 flashinfer
    • 如需单独安装 flashinfer,请参考 FlashInfer 安装文档
    • 注意:FlashInfer 的 PyPI 包名为 flashinfer-python 而不是 flashinfer
  2. CUDA_HOME 环境变量问题

    bash 复制代码
    # 解决方案 1:设置 CUDA_HOME 环境变量
    export CUDA_HOME=/usr/local/cuda-<your-cuda-version>
    
    # 解决方案 2:先安装 FlashInfer,再安装 SGLang
    # 参考 FlashInfer 安装文档

方法二:从源码安装

bash 复制代码
# 使用最新发布分支
git clone -b v0.4.9.post2 https://github.com/sgl-project/sglang.git
cd sglang

pip install --upgrade pip
pip install -e "python[all]"

AMD ROCm 系统 (Instinct/MI GPU):

bash 复制代码
# 使用最新发布分支
git clone -b v0.4.9.post2 https://github.com/sgl-project/sglang.git
cd sglang

pip install --upgrade pip
cd sgl-kernel
python setup_rocm.py install
cd ..
pip install -e "python[all_hip]"

方法三:使用 Docker(推荐)

Docker 镜像可在 Docker Hub 上获取:lmsysorg/sglang

bash 复制代码
docker run --gpus all \
    --shm-size 32g \
    -p 30000:30000 \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HF_TOKEN=<your-huggingface-token>" \
    --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

AMD ROCm 系统 Docker 使用:

bash 复制代码
# 构建 ROCm 镜像
docker build --build-arg SGL_BRANCH=v0.4.9.post2 -t v0.4.9.post2-rocm630 -f Dockerfile.rocm .

# 设置别名
alias drun='docker run -it --rm --network=host --device=/dev/kfd --device=/dev/dri --ipc=host \
    --shm-size 16G --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
    -v $HOME/dockerx:/dockerx -v /data:/data'

# 运行服务
drun -p 30000:30000 \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HF_TOKEN=<your-huggingface-token>" \
    v0.4.9.post2-rocm630 \
    python3 -m sglang.launch_server \
    --model-path meta-llama/Llama-3.1-8B-Instruct \
    --host 0.0.0.0 \
    --port 30000

方法四:使用 Docker Compose(推荐)

推荐用于服务化部署,更好的方式是使用 k8s-sglang-service.yaml

bash 复制代码
# 1. 复制 compose.yml 到本地机器
# 2. 执行命令
docker compose up -d

compose.yml 文件内容如下:

yaml 复制代码
services:
  sglang:
    image: lmsysorg/sglang:latest
    container_name: sglang
    volumes:
      - ${HOME}/.cache/huggingface:/root/.cache/huggingface
      # If you use modelscope, you need mount this directory
      # - ${HOME}/.cache/modelscope:/root/.cache/modelscope
    restart: always
    network_mode: host # required by RDMA
    privileged: true # required by RDMA
    # Or you can only publish port 30000
    # ports:
    #   - 30000:30000
    environment:
      HF_TOKEN: <secret>
      # if you use modelscope to download model, you need set this environment
      # - SGLANG_USE_MODELSCOPE: true
    entrypoint: python3 -m sglang.launch_server
    command: --model-path meta-llama/Llama-3.1-8B-Instruct
      --host 0.0.0.0
      --port 30000
    ulimits:
      memlock: -1
      stack: 67108864
    ipc: host  # 允许容器使用主机的 IPC 命名空间,提高内存共享效率
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:30000/health || exit 1"]
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ["0"]
              capabilities: [gpu]

方法五:使用 Kubernetes

单节点部署(模型大小适合单节点 GPU):

bash 复制代码
kubectl apply -f docker/k8s-sglang-service.yaml

多节点部署(大模型需要多 GPU 节点,如 DeepSeek-R1):

bash 复制代码
# 修改模型路径和参数后执行
kubectl apply -f docker/k8s-sglang-distributed-sts.yaml

方法六:使用 SkyPilot 在 Kubernetes 或云端部署

支持在 Kubernetes 或 12+ 云平台上部署。

安装 SkyPilot:

bash 复制代码
# 安装 SkyPilot 并设置 Kubernetes 集群或云访问
# 参考 SkyPilot 文档:https://skypilot.readthedocs.io/en/latest/getting-started/installation.html

部署配置 (sglang.yaml):

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

部署命令:

bash 复制代码
# 在任何云或 Kubernetes 集群上部署
HF_TOKEN=<secret> sky launch -c sglang --env HF_TOKEN sglang.yaml

# 获取 HTTP API 端点
sky status --endpoint 30000 sglang

常见注意事项

  1. FlashInfer 支持

    • FlashInfer 是默认的注意力内核后端

    • 仅支持 sm75 及以上架构

    • 如果在 sm75+ 设备上遇到 FlashInfer 相关问题,可切换到其他内核:

      bash 复制代码
      --attention-backend triton --sampling-backend pytorch
  2. 轻量级安装

    • 如果只需要使用 OpenAI 模型的前端语言,可以使用:

      bash 复制代码
      pip install "sglang[openai]"
  3. 前后端分离安装

    • 前端语言独立于后端运行时

    • 前端可在本地安装(无需 GPU):

      bash 复制代码
      pip install sglang
    • 后端在 GPU 机器上安装:

      bash 复制代码
      pip install sglang[srt]  # srt 是 SGLang runtime 的缩写
  4. 重新安装 FlashInfer

    bash 复制代码
    pip3 install --upgrade flashinfer-python --force-reinstall --no-deps
    rm -rf ~/.cache/flashinfer

验证安装

安装完成后,可以通过以下方式验证:

bash 复制代码
# 检查 SGLang 版本
python -c "import sglang; print(sglang.__version__)"

# 启动测试服务器
python -m sglang.launch_server --model-path meta-llama/Llama-3.1-8B-Instruct --host 0.0.0.0 --port 30000

故障排除

  1. CUDA 版本不兼容

    • 确保 CUDA 版本与 PyTorch 版本兼容
    • 检查 nvidia-smi 输出确认 GPU 驱动版本
  2. 内存不足

    • 增加 Docker 的共享内存大小:--shm-size 32g
    • 检查系统可用内存
  3. 模型下载失败

    • 设置 HuggingFace token:export HF_TOKEN=<your-token>
    • 检查网络连接和防火墙设置
  4. 权限问题

    • 确保有足够的权限访问 GPU 设备
    • 在 Docker 中使用 --gpus all 参数

服务测试代码

复制代码
from openai import OpenAI

base_url = "http://192.168.6.9:7890/v1"
api_key = "no"

messages = [
    {
        "role": "user",
        "content": "你好,帮我写一首6字6韵6行包含各种6的诗"
    }
]

client = OpenAI(
    base_url=base_url,
    api_key=api_key
)
response = client.chat.completions.create(
    model="no",
    messages=messages
)
print(response.choices[0].message.content)

相关链接

相关推荐
极客老王说Agent4 分钟前
2026实战指南:如何用智能体实现药品不良反应报告的自动录入?
人工智能·ai·chatgpt
imbackneverdie7 分钟前
本科毕业论文怎么写?需要用到什么工具?
人工智能·考研·aigc·ai写作·学术·毕业论文·ai工具
九皇叔叔8 分钟前
Ubuntu 22.04 版本常用设置
linux·运维·ubuntu
lulu121654407831 分钟前
Claude Code项目大了响应慢怎么办?Subagents、Agent Teams、Git Worktree、工作流编排四种方案深度解析
java·人工智能·python·ai编程
大橙子打游戏33 分钟前
talkcozy像聊微信一样多项目同时开发
人工智能·vibecoding
deephub34 分钟前
LangChain 还是 LangGraph?一个是编排一个是工具包
人工智能·langchain·大语言模型·langgraph
OidEncoder2 小时前
编码器分辨率与机械精度的关系
人工智能·算法·机器人·自动化
Championship.23.242 小时前
Harness工程深度解析:从理论到实践的完整指南
人工智能·harness
扬帆破浪2 小时前
开源免费的WPS AI 软件 察元AI文档助手:链路 002:executeAssistantFromRibbon 与任务进度窗
人工智能·开源·wps
杨云龙UP2 小时前
ODA登录ODA Web管理界面时提示Password Expired的处理方法_20260423
linux·运维·服务器·数据库·oracle