在 GPT Pynative 模型开启 FSDP 时,部分参数的第 0 维大小可能无法被 data_parallel_shard / parallel_dims.fsdp 整除。当前逻辑仍会尝试对这些参数应用 FSDP 分片,导致参数切分不合法,进而可能触发运行时报错或初始化失败。
data_parallel_shard
parallel_dims.fsdp
触发条件示例:
# 参数 shape[0] 不能被 data_parallel_shard 整除 # 例如 shape[0] = 3, data_parallel_shard = 2 # 开启 GPT Pynative FSDP 后,该参数不应继续进行 FSDP shard
期望行为:
当参数 shape[0] % data_parallel_shard != 0 时,该参数应作为 replicate parameter 处理,不参与 FSDP 分片,并给出 warning 提示。
shape[0] % data_parallel_shard != 0
实际行为:
未识别此类参数,仍可能进入 FSDP 分片流程,导致 shard 失败。
相关模块:
mindformers/pynative/base_models/gpt/parallelize.py
修复思路:
在 _collect_layer_replicate_params 中传入 parallel_dims.fsdp,遍历 layer 参数,当参数第 0 维不能被 shard size 整除时,将其加入 replicate_params,避免继续 apply FSDP。
_collect_layer_replicate_params
replicate_params
master
Thanks for contributing 🎉!
Checklist
🐞 问题详细描述
在 GPT Pynative 模型开启 FSDP 时,部分参数的第 0 维大小可能无法被
data_parallel_shard/parallel_dims.fsdp整除。当前逻辑仍会尝试对这些参数应用 FSDP 分片,导致参数切分不合法,进而可能触发运行时报错或初始化失败。触发条件示例:
# 参数 shape[0] 不能被 data_parallel_shard 整除 # 例如 shape[0] = 3, data_parallel_shard = 2 # 开启 GPT Pynative FSDP 后,该参数不应继续进行 FSDP shard期望行为:
当参数
shape[0] % data_parallel_shard != 0时,该参数应作为 replicate parameter 处理,不参与 FSDP 分片,并给出 warning 提示。实际行为:
未识别此类参数,仍可能进入 FSDP 分片流程,导致 shard 失败。
详细的环境信息描述
data_parallel_shard整除的参数其他辅助信息
相关模块:
修复思路:
在
_collect_layer_replicate_params中传入parallel_dims.fsdp,遍历 layer 参数,当参数第 0 维不能被 shard size 整除时,将其加入replicate_params,避免继续 apply FSDP。版本信息
master
Thanks for contributing 🎉!