Skip to content

Enable Eager Mode in Paddle CI

Weilong Wu edited this page Jun 14, 2022 · 14 revisions

Paddle CI流水线切换至新动态图eager模式说明

概要:

  • 第1节,背景
  • 第2节,PR-CI-Py3流水线单测失败的复现方法
  • 第3节,PR-CI-Windows-OPENBLAS流水线单测失败的复现方法
  • 第4节,PR-CI-Coverage-Eager-Test流水线单测失败的复现方法
  • 第5节,跳过失败单测方法

1. 背景

为了监控新动态图模式下单测的正确性,防止开发的PR导致新动态图功能错误,需要让CI流水线执行在新动态图eager模式下。

目前,已将PR-CI-Py3,PR-CI-Windows-OPENBLAS流水线切换至新动态图eager模式下执行(其他流水线暂时仍然执行在老动态图模式下)。

在PR-CI-Py3流水线中,已设置export FLAGS_enable_eager_mode=1,启用新动态图模式进行编译、执行单测。

在PR-CI-Windows-OPENBLAS流水线中,已设置set FLAGS_enable_eager_mode=1,启用新动态图模式进行编译、执行单测。

2. PR-CI-Py3流水线单测失败的复现方法

由于PR-CI-Py3流水线已执行在新动态图模式下,在本地复现PR-CI-Py3流水线的单测问题时,需要开启FLAGS_enable_eager_mode=1环境变量来执行单测,让本地单测也执行在新动态图模式下:

FLAGS_enable_eager_mode=1 python test_xxx.py

复现问题后需要修复单测,直至新动态图模式下该单测通过。

3. PR-CI-Windows-OPENBLAS流水线单测失败的复现方法

若 PR-CI-Windows-OPENBLAS 流水线执行失败,在本地复现单测问题时,需要使用set FLAGS_enable_eager_mode=1 进配置环境变量,确保单测跑在新动态图模式下。

4. PR-CI-Coverage-Eager-Test流水线单测失败的复现方法

若 PR-CI-Coverage-Eager-Test 流水线执行失败,在本地复现单测问题时,需要将 python/paddle/fluid/framework.py 内的 _in_eager_mode_ = (os.environ.get('FLAGS_enable_eager_mode') == '1') 改为 _in_eager_mode_ = True 进行全局切换,确保单测跑在新动态图模式下。

5. 跳过失败单测方法

如果有特殊原因,需要跳过新动态图模式下对该单测的检查,可以尝试让该单测只执行在老动态图模式下。方法如下:

  • 在新动态图模式下报错的单测文件中,调用_enable_legacy_dygraph方法,让该单测切换到老动态图模式下执行。
    from paddle.fluid.framework import _enable_legacy_dygraph
    _enable_legacy_dygraph()
    

注:

  • 需要注释说明该单测无法执行在新动态图模式下的原因,并且需要特殊人员审核,否则PR-CI-APPROVAL无法通过。
  • 在单测文件中,设置环境变量FLAGS_enable_eager_mode=0,无法让单测切换到老动态图执行。
Clone this wiki locally