SGLang 的核心模块

在了解 SGLang 分布式集群之前,我们先来了解 SGLang 包含的核心模块。SGLang 使用 python 实现,python 的 GIL(Global Interpreter Lock)设计使得一个 python 进程最多只能使用一核 CPU,因此基于 python 的复杂计算系统通常会使用多进程来使用多核 CPU。SGLang 的多进程设计也是系统的顶层架构设计,顶层架构如下:

SGLANG的多种运行模型

SGLang 有多种分布式集群部署基础模式,可以分为三种类型。

  • 张量并行(TP,Tensor Parallelism),主要在矩阵计算阶段做拆分,将张量拆分到多个 GPU 卡上并行计算。
  • 流水线并行(PP,Pipeline-Parallelism),对模型层次做拆分,将层分布到不同的 GPU 卡上计算,单个请求串行在多个卡上执行,而多个请求可以同时在多个卡上执行不同的阶段。
  • 数据并行(DP,Data Parallelism),对一批输入请求做拆分,将请求分布到不同的 GPU 卡上并行计算。

局部计算并行

  • 注意力数据并行(DP Attention),主要用于 MLA 模型结构,将一批请求拆分为多个小批次,每一小批请求由部分 GPU 执行注意力计算,FFN 的计算和 TP 一致。
  • 专家并行(EP Expert Parallelism),主要用于 MoE 模型结构,将专家的计算分布到部分 GPU 上,而不是全部 GPU。

TP模式部署

我们采用TP模式部署, 单机多卡,多级多卡

单机多卡

在单节点上,使用节点上的两张卡做并行计算

检查节点的GPU配置,可见两张GPU

# env|grep NVIDIA
NVIDIA_VISIBLE_DEVICES=GPU-68d4a448-5487-0c73-44f7-82959430e695,GPU-8c4e1aa5-8d1f-15e8-6da5-ab68fd92bf4b

部署sglang,指定 --tp 2 单机使用两张卡并行计算

python3 -m sglang.launch_server --model-path /root/.cache/xxx --reasoning-parser qwen3

运行可见服务启动日志

[2026-03-11 08:16:32 TP0] Capture cuda graph bs [1, 2, 4, 8]
Capturing batches (avail_mem=1.65 GB): 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:02<00:00,  1.88it/s]
[2026-03-11 08:16:34 TP0] Capture cuda graph end. Time elapsed: 2.17 s. mem usage=0.14 GB. avail mem=1.61 GB.
[2026-03-11 08:16:35 TP0] max_total_num_tokens=364491, chunked_prefill_size=2048, max_prefill_tokens=16384, max_running_requests=4097, context_len=40960
[2026-03-11 08:16:35] INFO:     Started server process [6688]
[2026-03-11 08:16:35] INFO:     Waiting for application startup.
[2026-03-11 08:16:35] INFO:     Application startup complete.
[2026-03-11 08:16:35] INFO:     Uvicorn running on http://127.0.0.1:30000 (Press CTRL+C to quit)
[2026-03-11 08:16:36] INFO:     127.0.0.1:60008 - "GET /get_model_info HTTP/1.1" 200 OK

使用curl 命令访问sglang 提供的服务

curl   http://127.0.0.1:30000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "/model/Qwen/Qwen3-0.6B",
        "messages": [
           {"role": "system", "content": "You are a helpful assistant."},
           {"role": "user", "content": "写一首诗,主题是湖水"}
        ]
    }'

返回信息, 可见sglang 成功提供服务。

{"id":"8582a2c85a88432b826d697796830c02","object":"chat.completion","created":1773214715,"model":"/model/Qwen/Qwen3-0.6B","choices":[{"index":0,"message":{"role":"assistant","content":"《湖水的私语》\n\n晨雾漫过石阶时,水面开始呼吸\n涟漪在石纹间漫延成绸缎\n鸥鸟掠过时,倒影在水面\n碎成千万片银沙\n\n暮色将湖面染成琥珀色\n渔火在水波中游弋,像沉睡的星子\n月光从湖底漫上来,将倒影\n投射成倒悬的镜面\n\n当夜风掠过水面,涟漪便有了生命\n它们在黑暗中舞蹈,编织着透明的网\n而湖水始终保持着最温柔的沉默\n\n——因为湖水,是时间的容器","reasoning_content":"好的,用户让我写一首关于湖水的诗。首先,我需要确定诗的主题和情感基调。湖水通常让人联想到宁静、平静,或者自然的美丽。可能用户想要表达一种放松的心情,或者对湖水的细腻观察。\n\n接下来,考虑诗的结构。中文诗通常有押韵和节奏感。可能需要分几个小节,每节集中描绘一个意象。比如,早晨的湖水、黄昏的湖光、夜晚的湖景,这样能展示不同时间段的湖水状态。\n\n然后,要选择合适的词汇和比喻。湖水可以比喻为绸缎、月光、倒影等,这些意象能增强画面感。同时,要注意句子的流畅,避免生硬。比如用“涟漪”来表现水面的波光,或者“倒影”来描绘湖中的倒影。\n\n还要考虑诗的情感变化。从清晨的宁静到黄昏的余晖,再到夜晚的宁静,层层递进,让读者感受到湖水的变化。同时,加入一些自然元素,如鸥鹭、渔火,增加诗的生动性。\n\n最后,检查押韵和节奏是否合适,调整用词使诗句更优美,确保主题明确,情感真挚。这样用户的需求应该就能得到了满足。\n","tool_calls":null},"logprobs":null,"finish_reason":"stop","matched_stop":151645}],"usage":{"prompt_tokens":27,"total_tokens":441,"completion_tokens":414,"prompt_tokens_details":null}}

多机多卡

可在多个节点上运行slgnag,组成多机多卡,张量并行的模式。

分别在两个节点上运行

# 两个节点,每个节点有 2 个 GPU组成 TP 4 集群
# 节点 0 172.20.252.18
python3 -m sglang.launch_server --tp 4 --model-path /root/.cache/xxx --reasoning-parser qwen3 --dist-init-addr 172.20.252.18:20000 --nnodes 2 --node-rank 0
# 节点 1 其他 IP
python3 -m sglang.launch_server --tp 4 --model-path /root/.cache/xxx --reasoning-parser qwen3 --dist-init-addr 172.20.252.18:20000 --nnodes 2 --node-rank 1

启动后 使用curl访问 节点0,成功得到返回信息

curl   http://127.0.0.1:30000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "/model/Qwen/Qwen3-0.6B",
        "messages": [
           {"role": "system", "content": "You are a helpful assistant."},
           {"role": "user", "content": "写一首诗,主题是湖水"}
        ]
    }'


{"id":"8a0ed75e63cb4be288945edd4c2bcc34","object":"chat.completion","created":1773214743,"model":"/model/Qwen/Qwen3-0.6B","choices":[{"index":0,"message":{"role":"assistant","content":"《湖水的呼吸》\n\n暮色漫过湖面时\n倒影在涟漪里\n泛起银色的涟漪\n仿佛一首未完成的诗\n\n波涛在深蓝中起伏\n如同沉默的琴键\n每一次断裂都留下\n时光的裂痕\n\n鸥鸟掠过水面\n翅膀划破云层\n留下短暂的光斑\n而湖水本身\n始终保持着透明的韵律\n\n当晨雾漫过湖面\n湖水便成了迷人的镜子\n照出所有未说出口的\n湖心的涟漪","reasoning_content":"嗯,用户让我写一首关于湖水的诗。首先,我需要确定诗的主题和情感基调。湖水通常让人联想到宁静、平静或者神秘,可能需要营造一种自然的氛围。用户可能希望这首诗既有画面感,又能传达某种情感,比如宁静、孤独或者怀旧。\n\n接下来,我得考虑诗的结构。四行一节比较常见,押韵也很重要。可能需要选择一些自然意象,比如湖面、倒影、波浪、鸥鸟等,这些元素都能很好地表现湖水的特点。同时,要注意用词的选择,避免生僻字,保持诗意。\n\n然后,思考如何将湖水的不同方面融入诗中。比如,湖水的倒影可以体现湖的广阔,波浪则表现动态,鸥鸟可能象征自由或短暂的生命。这样可以让诗既有静态的美感,又有动态的生机。\n\n还要考虑诗的情感表达。湖水常常与宁静、神秘联系在一起,所以诗里可能需要传达一种平和或深沉的感觉。可能需要用一些比喻或隐喻,比如将湖水比作宝石,或者用倒影来表现湖面的广阔。\n\n另外,用户可能没有明确说明,但诗中可能还需要一些细节来增强画面感,比如湖边的景物、周围的环境,这样读者更容易代入。同时,注意句子的节奏和韵律,让整首诗读起来流畅自然。\n\n最后,检查是否有重复或冗长的部分,确保每句都传达一个独特的意象,同时整体连贯。可能需要调整用词,让诗句更凝练,更有画面感。这样用户就能得到一首既有美感又富有深意的湖水诗。\n","tool_calls":null},"logprobs":null,"finish_reason":"stop","matched_stop":151645}],"usage":{"prompt_tokens":27,"total_tokens":507,"completion_tokens":480,"prompt_tokens_details":null}}

Logo

免费领 100 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐