Skip to main content

Paddle踩坑记录

1.new_group的bug

​ 不同rank之间创建通信组时,每个rank都要按相同顺序创建全部的组,即使不用这个group,因为group id 是全局计数的,用一下例子说明:

image-20250716231251809

image-20250716231302025

如果仅仅在0,2卡和1,3卡,分别创建group[0,2],group[1,3],则会创建两个同名的group,而此时调用其它需要用到group的函数时,主要根据group id来区分不同的group,此时调用就会出现问题,因此需要在0,1,2,3上都创建group[0,2],group[1,3],且顺序必须一致,如下图:

image-20250716231728841

这时,就可以区分两个不同rank_list的group。

2.赋值dist_tensor的process_mesh和placements是浅拷贝

​ 在获取dist_tensor的process_mesh和placements后,如果将dist_tensor这个变量又赋值成dense_tensor,例如使用dtensor_to_local,之后赋值dist_tensor的process_mesh和placements的变量也会改变,此时再访问,会产生访存错误,因此尽量获取dense_tensor的时候,不要用原来的dist_tensor去赋值。

image-20250716232513598

​ 如图红色就不行,绿色则是正确操作。

3.dist_strategy.hybrid_configs设置

​ 需要在初始化时,一次性传入需要设置的键值对,否则赋值是无效的,

​ 如第一个图,只添加了dp,mp,pp三个键值对,然后根据情况判断,再新增key-value,但是是无效的

image-20250730155342299

​ 如下图必须先把所有要用到的key-value都定义好,再赋值,原因是hybrid_configs 是一个属性,不是普通字典;使用dist_strategy.hybrid_configs["sep_degree"] 时,是通过get方法访问这个值,此时赋值是无效的,因为没有这个key,只有最开始的设置才是set数据的key-value。

image-20250730155445396

4.用reshard时的问题

​ 当接受和发送的数据精度不一致时,第一次接收时,会初始化,导致接受的数据并不是发送的数据,而是随机初始化的数据。初始化后,接受和发送的数据精度一致,后面就会正常接收数据。

image-20250804113411251

image-20250804113359148

如上,1卡向0卡发送数据,发送的是float32,而接收的是float16。此时接收方会随机初始化,而不是正确接收到数据。