1-从进程和端口开始看架构

AI-摘要
User GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
1-从进程和端口开始看架构
gogongxt进程结构
tp=1的情况 总共三个进程
启动命令:python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 1
查看进程树:ps -aux —-forest
1
2
3
luban 3049112 21.6 0.0 7700748 758940 pts/6 Sl+ 11:48 0:09 | \_ python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 1
luban 3052085 32.5 0.0 56482984 769368 pts/6 Sl+ 11:48 0:06 | \_ python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 1
luban 3052087 0.5 0.0 7445368 458940 pts/6 Sl+ 11:48 0:00 | \_ python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 1进程数:
1
2
3
主进程 (PID: 304911) - FastAPI服务器 + Tokenizer Manager
├── Router进程 (PID: 3052085) - 请求调度和路由和推理进程(只有一个TP)
└── Detokenizer进程 (PID: 3052087) - 结果解码启动命令:python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 2
tp=2的情况 总共五个进程
查看进程数:ps -aux —-forest
1
2
3
4
5
luban 2201211 1.5 0.0 9052664 716400 pts/6 Sl+ 19:49 0:09 | \_ python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 2
luban 2204099 41.6 0.0 7938212 444556 pts/6 Sl+ 19:49 4:11 | \_ python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 2
luban 2204103 33.9 0.1 256067172 1629868 pts/6 Sl+ 19:49 3:24 | | \_ python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 2
luban 2204107 31.7 0.1 255899232 1630536 pts/6 Sl+ 19:49 3:11 | | \_ python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 2
luban 2204102 0.0 0.0 7445520 459256 pts/6 Sl+ 19:49 0:00 | \_ python3 -m sglang.launch_server --model-path /tmp-data/models/llama-2-7b --port 30000 --mem-fraction-static 0.8 --tp 2进程数对应的就是:
1
2
3
4
5
主进程 (PID: 2201211) - FastAPI服务器 + Tokenizer Manager
├── Router进程 (PID: 2204099) - 请求调度和路由
├── Model RPC进程 1 (PID: 2204103) - 模型推理进程1 (TP rank 0)
├── Model RPC进程 2 (PID: 2204107) - 模型推理进程2 (TP rank 1)
└── Detokenizer进程 (PID: 2204102) - 结果解码在这里以tp=2进程进行详解,如果是tp=1就是router和model推理进程合并了
- 主进程 (PID: 2201211)
- 双重角色: FastAPI HTTP服务器 + Tokenizer Manager
- 作用:
- 启动HTTP服务器,监听端口30000
- 处理OpenAI兼容的API请求 (/v1/completions, /generate)
- 负责文本分词和图像预处理
- 与其他进程通过ZeroMQ通信
- Router进程 (PID: 2204099)
- 作用: 核心调度器
- 管理请求队列和批处理
- 实现不同的调度策略 (LPM, weight, random, FCFS)
- 协调模型推理进程
- 管理KV缓存和内存池
- 与tokenizer/detokenizer通过ZeroMQ通信
- 作用: 核心调度器
- Model RPC进程 (PID: 2204103, 2204107)
- Tensor Parallelism实现:
- 进程1 (rank 0): 处理模型的tp分块
- 进程2 (rank 1): 处理模型的tp分块
- 优先通过NCCL进行GPU间通信
- 每个进程有独立的RPyC服务端口
- Tensor Parallelism实现:
- Detokenizer进程 (PID: 2204102)
- 作用: 将token ID转换回文本
- 解码生成的token
- 处理停止词和特殊token
- 支持流式输出
- 通过ZeroMQ与router通信
- 作用: 将token ID转换回文本
端口分配
ZeroMQ在以下模块间进行通信:
1
2
3
4
5
6
7
8
# 端口分配 (4 + tp_size = 6个端口)
PortArgs(
tokenizer_port=can_use_ports[0], # ~30001
router_port=can_use_ports[1], # ~30002
detokenizer_port=can_use_ports[2], # ~30003
nccl_port=can_use_ports[3], # ~30004
model_rpc_ports=can_use_ports[4:6], # ~30005, ~30006 # 如果tp==1,这个也会分配但是没有用上
)通信流向:
- Tokenizer → Router: PUSH → PULL (分词后的token)
- Router ↔︎ Model RPC: RPyC远程调用 (模型推理)(tp=1时router和model rpc合并了,就不用这个了)
- Router → Detokenizer: PUSH → PULL (生成的token)
- Detokenizer → Tokenizer: PUSH → PULL (最终文本结果)
评论
匿名评论隐私政策








