夜雨聆风学习资料网

ARTICLE · 1083314

本地大模型部署指南- SGLang(含源码)

本地大模型部署指南- SGLang(含源码)

面向低延迟、高吞吐和结构化生成的推理运行时,适合 NVIDIA GPU 服务器与集群演进。

推荐环境:Ubuntu/Linux + NVIDIA GPU;Windows 建议 WSL2 或远程 Linux GPU 主机

模型格式:Hugging Face 模型及 SGLang 支持的运行时格式

示例接口:http://127.0.0.1:30000/v1/chat/completions

示例模型:Qwen/Qwen3-8B

安全提示:开发环境先绑定 127.0.0.1。生产环境不要将未鉴权服务直接暴露到公网,应先配置 TLS、认证、限流与访问审计。

一、部署前先确认这几件事

先明确使用目标:个人离线问答、桌面演示、内网 API,还是高并发生产服务。框架选择要同时考虑硬件、模型格式、并发需求与运维能力。

• 个人电脑或原型:优先选择 7B-14B 的量化 instruct 模型,重点确认内存、显存、SSD 空间和中文模板。
• 单 GPU 服务:重点确认显存、上下文长度、KV Cache 和并发数;模型参数量并不等于实际可承载的业务并发。
• 多 GPU 或多用户服务:通常选用 vLLM 或 SGLang,并提前设计网关、监控、鉴权和容量压测。
• CPU 或低显存设备:优先考虑 llama.cpp 与 GGUF 量化模型,验收指标是 tokens/s、内存占用和回答质量。
• 所有场景:模型、提示词、输入和输出都可能包含敏感数据;下载前阅读模型卡与许可证,定义数据保留和访问权限。

重要边界:本文给出部署流程,不代表当前机器已经安装或运行了模型。部署当天仍需重新核对框架版本、GPU 兼容性和模型许可证。

二、安装与启动

Windows 11 路径

1. 原生 Windows 不作为生产路径;使用 WSL2 Ubuntu 或 Linux GPU 服务器。
2. 确认 `nvidia-smi` 可用,建立 Python 虚拟环境并按官方硬件平台文档选择安装方式。
3. 开发验证可用单 GPU;生产前需明确 GPU 型号、互联方式和驱动版本。

Ubuntu/Linux + NVIDIA GPU 路径

4. 建立环境:`python3 -m venv .venv && source .venv/bin/activate`。
5. 按官方安装页选择 pip、源码或 Docker 路径;常见起点为 `pip install "sglang[all]"`,实际版本以官方兼容说明为准。
6. 模型仓库访问受限时,将令牌放入环境变量或凭据系统,不写入 shell 历史和代码仓库。

版本提示:GPU 推理框架会受到 Python、PyTorch、CUDA、NVIDIA 驱动和模型架构的共同影响。升级前应在隔离环境验证,并保留可回滚版本。

启动服务

python -m sglang.launch_server --model-path Qwen/Qwen3-8B --host 127.0.0.1 --port 30000

出现监听地址或模型加载完成日志后,还要继续执行下一节的模型列表检查和对话请求,不能只看进程是否启动。

三、接口验证与 Python 调用

请求流程:业务程序发起 HTTP 请求 -> 推理服务排队与调度 -> 模型加载权重并推理 -> 服务返回 JSON 或流式响应。生产环境应把公网入口、TLS、认证和限流交给网关,模型服务本身仅监听私网或回环地址。

先做健康检查或模型发现

curl http://127.0.0.1:30000/v1/models

预期结果是能列出已加载模型,或收到与框架文档一致的健康响应。若此步骤失败,先排查端口、服务进程、监听地址和防火墙。

最小 Python 客户端

下面仅使用 Python 标准库。启动服务后,将 `model` 字段替换为服务实际暴露的模型标识;业务代码还需要补充超时、重试边界、请求日志和敏感信息处理。

from __future__ import annotationsimport jsonfrom urllib.request import Request, urlopenurl = "http://127.0.0.1:30000/v1/chat/completions"payload = {   "model": "Qwen/Qwen3-8B",   "messages": [{"role": "user", "content": "请用一句话说明本地部署的意义。"}],   "temperature": 0.2}request = Request(   url,   data=json.dumps(payload).encode("utf-8"),   headers={"Content-Type": "application/json"},   method="POST",)with urlopen(request, timeout=60) as response:   result = json.loads(response.read().decode("utf-8"))print(result["choices"][0]["message"]["content"])

四、生产化部署建议

• SGLang 适合生产级服务;先确认单机稳定,再逐步启用多 GPU、前缀缓存、结构化输出或分布式能力。
• 限制上下文长度、请求体大小和并发数,避免单个长请求耗尽 KV Cache 并拖累整实例。
• 将服务日志、GPU 指标、请求时延、队列长度和错误率接入现有监控系统。

可用性:使用进程托管和健康检查,观察存活、就绪、重启次数与模型加载时长。

性能:设置连接/读取超时、请求大小上限和并发边界,监控首 token 延迟、tokens/s、P50/P95 与队列长度。

资源:限制 CPU、内存、显存和磁盘;持续观察 GPU 利用率、显存、KV Cache 与磁盘余量。

安全:模型服务仅私网监听或置于网关保护之后;审计认证失败、限流命中和异常请求。

Linux systemd 服务模板

[Unit]Description=SGLang local LLM serviceAfter=network-online.target[Service]User=llmWorkingDirectory=/opt/llmEnvironment=HOME=/var/lib/llmExecStart=/bin/bash -lc 'python -m sglang.launch_server --model-path Qwen/Qwen3-8B --host 127.0.0.1 --port 30000'Restart=on-failureRestartSec=5[Install]WantedBy=multi-user.target

模板说明:这是结构示例,不应原样直接用于生产。必须替换实际的虚拟环境或二进制绝对路径、模型目录、用户权限、日志路径、环境变量和网关策略。

五、常见问题排查

7. 1. 端口无法访问

常见原因:服务只监听回环地址、进程未启动,或防火墙阻断

建议动作:先在服务主机执行健康检查;确认监听地址、入站规则和反向代理配置。

8. 2. 首次响应很慢

常见原因:模型首次加载、CUDA 内核编译或磁盘缓存尚未就绪

建议动作:预热一条短请求;把模型放在 SSD;观察显存和磁盘占用。

9. 3. 显存不足

常见原因:模型、KV Cache、上下文长度和并发总量超过显存

建议动作:换小模型或量化版本;降低上下文/并发;调整 GPU 内存参数。

10. 4. 返回 401/403

常见原因:网关或服务启用了鉴权,但客户端未提供正确密钥

建议动作:检查反向代理与服务端鉴权策略;从环境变量读取密钥,不要写入代码。

11. 5. 模型下载失败

常见原因:网络、代理、磁盘空间或模型仓库权限问题

建议动作:核对网络与代理;预留足够磁盘;先用浏览器或 CLI 验证模型仓库访问。

12. 6. 中文输出异常

常见原因:模型模板、编码或客户端请求体不一致

建议动作:使用 UTF-8 JSON;选择明确支持中文的 instruct/chat 模型;检查 chat template。

13. 7. 请求格式不兼容

常见原因:客户端混用了原生端点和 OpenAI 兼容端点的字段

建议动作:固定一种 API 契约;用 `/v1/models` 和单条 chat 请求逐步验证。

六、官方资料

部署当天请再次核对官方发布版本、安装方式、兼容矩阵和模型许可。不要把本文示例中的版本或模型名视为永久不变。

• https://docs.sglang.io/
• https://docs.sglang.io/docs/get-started/install
• https://docs.sglang.io/docs/get-started/quickstart

相关学习资料