-
Notifications
You must be signed in to change notification settings - Fork 685
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix rand ops that have the same seed in graph and have different seed…
… in checkpointing (#9941) fixed: Oneflow-Inc/OneTeam#1926 修复关于 random op 系列的 bug: - 一些 random op kernel 在 CreateOpKernelState 时,直接 MakeGenerator,使用的是 default_rng_seed_val,所有的 random op 的 generator 使用的相同的 seed,那么会产生相同的结果。例如:transformer 所有的 layer 的 dropout 都产生一样的随机结果,很可能影响最终精度。 - 一些 random op kernel 在 CreateOpKernelState 时,没考虑 split 时,不同 rank 上应该有不同的结果(broadcast 需要相同的结果),应该通过 GetOpKernelRandomSeedInCurrentRank 为不同 rank 的 generator 设置相同的 seed。 - 在 checkpoint activation 开启后,要求前后向对应的 random op(例如 dropout)具有相同的 random state,这样才能使前后向中相同的 dropout 产生一致的结果。所以这里要求前后向对应的 dropout 拥有相同的 seed,可以通过为 dropout 添加 attr seed 来完成。 eager 所有 random op 使用相同的 generator(有些 op 容许传入自定义的 generator)。但 lazy 不同,所有的 random op kernel 都会创建自己的 generator,只能通过 seed 来控制随机结果。同一张图内的不同 random op 需要不同 seed,split 的不同 rank 需要不同 seed,checkpoint activation 的前后向 random op 需要相同 seed,broadcast 的不同 rank 需要相同 seed。 --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
- Loading branch information
1 parent
63060cc
commit d3712f1
Showing
19 changed files
with
1,026 additions
and
241 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.