vllm021中EPLB劣化问题原因排查:默认用torch Gloo而非NCCL搬运权重导致空泡

目录

1 背景介绍

2 开EPLB的空泡

2.1 空泡1

2.2 空泡2

3 空泡原因

4 替换方案


1 背景介绍

在使用VLLM的EPLB的时候,发现当打开EPLB,冗余专家为0的时,开EPLB的性能反而更差,通过抓torch profile对比发现问题。

服务端使用的命令是

--enable-eplb \ --eplb-config '{"window_size":200,"step_interval":200,"num_redundant_experts":0,"log_balancedness":true,"log_balancedness_interval":100,"use_async":true}'

这里采用的"use_async":true,也就是异步模式。

2 开EPLB的空泡

通过挨个查看prof中的每个step,发现如下两个空泡,

首先这个地方,这四块深蓝色的就是在做专家重排,在搬运权重,这四块都是memcpy, H2D D2H,

2.1 空泡1

2.2 空泡2

3 空泡原因

在vllm/config/parallel.py文件中,

这段注释写的很明白,就是这里为了不跟nccl主进程抢占资源导致死锁,所以这里默认异步的EPLB用的gloo backend。

# Torch Gloo is a backend that allows avoiding hangs

# due to NCCL multi-thread conflicts in async EPLB

而 gloo是需要经过cpu中转的,所以这里就出现了一堆这种H2D , D2H,

4 替换方案

除了rccl和gloo,还有其他后端可以 选择,

vllm021/vllm/config/parallel.py

这个需要环境中有nixl包

vllm021/vllm/distributed/eplb/eplb_communicator.py