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
