什么是GLLM?

Global Balanced Pipeline Parallelism System for Distributed LLM Serving with Token Throttling

Github Repo: https://github.com/gty111/GLLM

如何实现pipeline并行

worker是什么?

每个物理设备,负责推理的具体行为

worker之间如何分工?

首先需要了解worker的rank是如何确定的:

  • 总数rank : PP_size x TP_size = rank
  • 每个worker的有三个rank值(这里以pp_size = 4 , tp_size = 2举例):
    • rank: [0,1,2,3,4,5,6,7]
    • pp_rank = rank // tp_size : [0, 0, 1, 1, 2, 2, 3, 3]
    • tp_rank = rank % tp_size : [0, 1, 0, 1, 0, 1, 0, 1]
1
2
3
4
5
6
7
def run_worker(worker: Worker):
if worker.rank == 0: # 全局rank 0
worker.run_driver() # 驱动节点,负责调度
elif worker.pp_rank == 0: # Pipeline第一阶段
worker.run_first_tp() # 处理输入数据
else: # 其他Pipeline阶段
worker.run_other() # 处理中间数据

worker职责

  1. rank=0的worker作为驱动节点,负责很多工作:
    • 系统初始化
    • 整体pipeline控制
      • check_abort_seqs # 1. 检查中止请求
      • recv_ipc_package # 2. 接收新请求
      • recv_next_tokens # 3. 接收生成的tokens
      • schedule_forward # 4. 调度和前向推理
      • process_output # 5. 处理输出结果
  2. pp_rank=0 的worker