1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414
15- // Eager Dygraph
15+ # include < sstream >
1616
1717#include " gtest/gtest.h"
1818
19- #include " paddle/fluid/eager/autograd_meta .h"
19+ #include " paddle/fluid/eager/eager_tensor .h"
2020#include " paddle/fluid/eager/grad_node_info.h"
2121#include " paddle/fluid/eager/tests/data_structure_tests/grad_node_test.h"
2222#include " paddle/fluid/eager/tests/test_utils.h"
2323#include " paddle/fluid/eager/utils.h"
2424
25+ #include " paddle/pten/api/lib/utils/allocator.h"
26+
27+ // TODO(jiabin): remove nolint here!!!
28+ using namespace egr ; // NOLINT
29+
2530namespace eager_test {
31+
32+ TEST (EagerUtils, AutoGradMeta) {
33+ // Construct Eager Tensor
34+ pten::DenseTensorMeta meta = pten::DenseTensorMeta (
35+ pten::DataType::FLOAT32, paddle::framework::make_ddim ({1 , 1 }));
36+ std::shared_ptr<pten::DenseTensor> dt0 = std::make_shared<pten::DenseTensor>(
37+ std::make_shared<paddle::experimental::DefaultAllocator>(
38+ paddle::platform::CPUPlace ()),
39+ meta);
40+ dt0->mutable_data <float >()[0 ] = 10.0 ;
41+ EagerTensor et0 = EagerTensor (dt0);
42+
43+ std::shared_ptr<pten::DenseTensor> dt1 = std::make_shared<pten::DenseTensor>(
44+ std::make_shared<paddle::experimental::DefaultAllocator>(
45+ paddle::platform::CPUPlace ()),
46+ meta);
47+ dt1->mutable_data <float >()[0 ] = 20.0 ;
48+ EagerTensor et1 = EagerTensor (dt1);
49+
50+ std::vector<EagerTensor> ets = {et0, et1};
51+ auto test_node = std::make_shared<eager_test::GradTestNode>();
52+
53+ // unsafe_autograd_meta()
54+ // autograd_meta()
55+ // multi_autograd_meta()
56+ AutogradMeta* autograd_meta0 = EagerUtils::autograd_meta (&et0);
57+ AutogradMeta* autograd_meta1 = EagerUtils::autograd_meta (&et1);
58+
59+ AutogradMeta* unsafe_autograd_meta_after =
60+ EagerUtils::unsafe_autograd_meta (et0);
61+ CHECK_NOTNULL (unsafe_autograd_meta_after);
62+
63+ std::vector<AutogradMeta*> autograd_metas =
64+ EagerUtils::multi_autograd_meta (&ets);
65+ std::vector<AutogradMeta*> unsafe_autograd_metas =
66+ EagerUtils::unsafe_autograd_meta (&ets);
67+ CHECK_NOTNULL (unsafe_autograd_metas[0 ]);
68+ CHECK_NOTNULL (unsafe_autograd_metas[1 ]);
69+
70+ // Set Autograd Meta
71+ autograd_meta0->SetSingleOutRankWithSlot (0 , 1 );
72+
73+ autograd_meta0->SetGradNode (test_node);
74+
75+ // OutRankInfo()
76+ std::pair<size_t , size_t > out_rank_info0 = EagerUtils::OutRankInfo (et0);
77+ CHECK_EQ (static_cast <int >(out_rank_info0.first ), 0 );
78+ CHECK_EQ (static_cast <int >(out_rank_info0.second ), 1 );
79+
80+ // grad_node()
81+ std::shared_ptr<GradNodeBase> grad_node0 = EagerUtils::grad_node (et0);
82+ CHECK_NOTNULL (grad_node0.get ());
83+
84+ EagerUtils::SetHistory (autograd_meta1, test_node);
85+ EagerUtils::SetHistory ({autograd_meta1}, test_node);
86+ std::shared_ptr<GradNodeBase> grad_node1 = EagerUtils::grad_node (et1);
87+ CHECK_NOTNULL (grad_node1.get ());
88+
89+ // SetOutRankWithSlot()
90+ EagerUtils::SetOutRankWithSlot (autograd_meta1, 0 );
91+ std::pair<size_t , size_t > out_rank_info1 = EagerUtils::OutRankInfo (et1);
92+ CHECK_EQ (static_cast <int >(out_rank_info1.first ), 0 );
93+ CHECK_EQ (static_cast <int >(out_rank_info1.second ), 0 );
94+
95+ EagerUtils::SetOutRankWithSlot (&autograd_metas, 0 );
96+ std::pair<size_t , size_t > out_rank_info2 = EagerUtils::OutRankInfo (et0);
97+ CHECK_EQ (static_cast <int >(out_rank_info2.first ), 0 );
98+ CHECK_EQ (static_cast <int >(out_rank_info2.second ), 0 );
99+
100+ std::pair<size_t , size_t > out_rank_info3 = EagerUtils::OutRankInfo (et1);
101+ CHECK_EQ (static_cast <int >(out_rank_info3.first ), 0 );
102+ CHECK_EQ (static_cast <int >(out_rank_info3.second ), 1 );
103+ }
104+
26105template <typename T>
27106egr::EagerTensor CreateTestCPUTensor (T val,
28107 const paddle::framework::DDim& ddim) {
@@ -40,7 +119,7 @@ egr::EagerTensor CreateTestCPUTensor(T val,
40119 tensor.set_impl (dt);
41120 return tensor;
42121}
43- } // namespace eager_test
122+
44123TEST (EagerUtils, ComputeRequireGrad) {
45124 auto auto_grad0 = std::make_shared<egr::AutogradMeta>();
46125 auto auto_grad1 = std::make_shared<egr::AutogradMeta>();
@@ -200,3 +279,5 @@ TEST(EagerUtils, ConstructDuplicableOutput) {
200279 CHECK (outs[0 ]->defined () == false );
201280 CHECK (outs[0 ]->initialized () == false );
202281}
282+
283+ } // namespace eager_test
0 commit comments