From 8fa4c0988991b2e23095f10eed805a4c83cf4b0d Mon Sep 17 00:00:00 2001 From: wanghuancoder Date: Mon, 12 Oct 2020 19:43:30 +0800 Subject: [PATCH] add load_op_xpu for Baidu Kunlun (#27817) * add load_op_xpu for Baidu Kunlun, test=kunlun * add is_compiled_with_xpu for unit test, test=kunlun * add is_compiled_with_xpu for unit test, test=kunlun --- paddle/fluid/operators/load_op_xpu.cc | 28 +++++++++ .../fluid/tests/unittests/test_load_op_xpu.py | 63 +++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 paddle/fluid/operators/load_op_xpu.cc create mode 100644 python/paddle/fluid/tests/unittests/test_load_op_xpu.py diff --git a/paddle/fluid/operators/load_op_xpu.cc b/paddle/fluid/operators/load_op_xpu.cc new file mode 100644 index 0000000000000..e56586552e498 --- /dev/null +++ b/paddle/fluid/operators/load_op_xpu.cc @@ -0,0 +1,28 @@ +/* Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#ifdef PADDLE_WITH_XPU + +#include "paddle/fluid/operators/load_op.h" + +namespace ops = paddle::operators; + +REGISTER_OP_XPU_KERNEL( + load, ops::LoadOpKernel, + ops::LoadOpKernel, + ops::LoadOpKernel, + ops::LoadOpKernel, + ops::LoadOpKernel); + +#endif // PADDLE_WITH_XPU diff --git a/python/paddle/fluid/tests/unittests/test_load_op_xpu.py b/python/paddle/fluid/tests/unittests/test_load_op_xpu.py new file mode 100644 index 0000000000000..1d7f986507ca9 --- /dev/null +++ b/python/paddle/fluid/tests/unittests/test_load_op_xpu.py @@ -0,0 +1,63 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import unittest +import numpy as np +from op_test import OpTest, randomize_probability +import paddle.fluid as fluid +import paddle.fluid.layers as layers +import paddle + + +@unittest.skipIf(not paddle.is_compiled_with_xpu(), + "core is not compiled with XPU") +class TestLoadOpXpu(unittest.TestCase): + """ Test load operator. + """ + + def setUp(self): + self.ones = np.ones((4, 4)).astype('float32') + main_prog = fluid.Program() + start_prog = fluid.Program() + with fluid.program_guard(main_prog, start_prog): + input = fluid.data('input', shape=[-1, 4], dtype='float32') + output = layers.fc( + input, + 4, + param_attr=fluid.ParamAttr( + name='w', + initializer=fluid.initializer.NumpyArrayInitializer( + self.ones))) + exe = fluid.Executor(fluid.XPUPlace(0)) + exe.run(start_prog) + fluid.io.save_persistables( + exe, dirname="/tmp/model", main_program=main_prog) + + def test_load_xpu(self): + main_prog = fluid.Program() + start_prog = fluid.Program() + with fluid.program_guard(main_prog, start_prog): + var = layers.create_tensor(dtype='float32') + layers.load(var, file_path='/tmp/model/w') + + exe = fluid.Executor(fluid.XPUPlace(0)) + exe.run(start_prog) + ret = exe.run(main_prog, fetch_list=[var.name]) + self.assertTrue(np.array_equal(self.ones, ret[0])) + + +if __name__ == "__main__": + unittest.main()