[NVIDIA] paddle.distributed.new_group的rank與world_size在group size=1時會輸出-1

dzjeubhm  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(37)

bug描述 Describe the Bug

某些TP/DP切分下,group size無可避免有可能最終剩 1 ,看起來這種corner case在paddlepaddle 2.6 中被當作邊界處理放棄掉了,但實際上應該是合理的使用場景

demo.py

# paddle: 2.6.0
from paddle.distributed import fleet
from paddle.distributed import get_rank, new_group

if __name__ == '__main__':
    fleet.init()
    gp = new_group([0, 1])
    print(f'rank={get_rank()}:  gp.rank={gp.rank} gp.world_size={gp.world_size}')
    gp = new_group([0])
    print(f'rank={get_rank()}:  gp.rank={gp.rank} gp.world_size={gp.world_size}') #-1, -1,  WHY?
    
    """
Output:
rank=0:  gp.rank=0 gp.world_size=2
rank=0:  gp.rank=-1 gp.world_size=-1
rank=1:  gp.rank=1 gp.world_size=2
rank=1:  gp.rank=-1 gp.world_size=-1
"""

Reproduce: 找個2GPU的node,然後執行以下

python -m paddle.distributed.launch --nproc_per_node=2 demo.py

其他补充信息 Additional Supplementary Information

No response

brtdzjyr

brtdzjyr1#

您好,我再說明更詳細一點。
比較困擾的會是group_rank也會是-1,這樣沒有辦法計算各進程之間的相對關係,一些allgather之類的操作就無法撰寫。

from paddle.distributed import get_rank
gp = new_group([0])
get_rank(gp) #-1
eeq64g8w

eeq64g8w2#

这个处理确实存在问题,后续会修复该问题。

uidvcgyl

uidvcgyl3#

@ForFishes As dicussion with biweekly sync meeting,
請問這個問題排程大概是?

相关问题