未验证 提交 5df78366 编写于 作者: A Allen Guo 提交者: GitHub

[IPU] sync misc changes 02 (#39189)

* sync misc changes

* apply comments 01

* fix compile error

* remove is_ipu_place check

* add authors
Co-authored-by: NXiaobing Wang <xiaobingw@graphcore.ai>
Co-authored-by: NAllen Guo <alleng@graphcore.ai>
Co-authored-by: NZhixin Yao <zhixiny@graphcore.ai>
Co-authored-by: NHaicheng Jiang <haichengj@graphcore.ai>
Co-authored-by: NHan Zhao <hanzhao@graphcore.ai>

* sync changes

* restore cmake

* update ir cmake and setup.py

* update inference_lib cmake

* restore for split PR
Co-authored-by: NXiaobing Wang <xiaobingw@graphcore.ai>
Co-authored-by: NZhixin Yao <zhixiny@graphcore.ai>
Co-authored-by: NHaicheng Jiang <haichengj@graphcore.ai>
Co-authored-by: NHan Zhao <hanzhao@graphcore.ai>
上级 04285ab4
...@@ -181,6 +181,13 @@ IF(WITH_XPU) ...@@ -181,6 +181,13 @@ IF(WITH_XPU)
DSTS ${dst_dir} ${dst_dir}) DSTS ${dst_dir} ${dst_dir})
ENDIF() ENDIF()
IF(WITH_IPU)
set(dst_dir "${PADDLE_INFERENCE_INSTALL_DIR}/third_party/install/ipu")
copy(inference_lib_dist
SRCS ${CMAKE_BINARY_DIR}/paddle/fluid/platform/device/ipu/libpaddle_ipu.so
DSTS ${dst_dir})
ENDIF()
# CMakeCache Info # CMakeCache Info
copy(inference_lib_dist copy(inference_lib_dist
SRCS ${CMAKE_CURRENT_BINARY_DIR}/CMakeCache.txt SRCS ${CMAKE_CURRENT_BINARY_DIR}/CMakeCache.txt
......
...@@ -59,6 +59,10 @@ if(WITH_CINN) ...@@ -59,6 +59,10 @@ if(WITH_CINN)
add_subdirectory(cinn) add_subdirectory(cinn)
endif() endif()
if(WITH_IPU)
add_subdirectory(ipu)
endif()
SET(OP_HEADER_DEPS xxhash executor) SET(OP_HEADER_DEPS xxhash executor)
if (WITH_GPU) if (WITH_GPU)
......
if(WITH_IPU)
op_library(ipu_runtime_op DEPS ipu_backend)
endif(WITH_IPU)
// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. // Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
...@@ -12,32 +12,29 @@ ...@@ -12,32 +12,29 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
#pragma once #ifdef PADDLE_WITH_IPU
#include <memory>
#include <vector>
#include "paddle/fluid/framework/op_registry.h" #include "paddle/fluid/framework/op_registry.h"
#ifdef PADDLE_WITH_IPU #include "paddle/fluid/platform/device/ipu/ipu_backend.h"
#include "paddle/fluid/framework/ipu/ipu_backend.h"
#include "paddle/fluid/framework/tensor.h"
#endif
namespace paddle { namespace paddle {
namespace operators { namespace operators {
template <typename T> class IpuRuntimeOp : public framework::OperatorBase {
class IpuRuntimeKernel : public framework::OpKernel<T> {
public: public:
void Compute(const framework::ExecutionContext& ctx) const override { IpuRuntimeOp(const std::string& type,
#ifdef PADDLE_WITH_IPU const framework::VariableNameMap& inputs,
auto ipu_backend = framework::ipu::IpuBackend::GetInstance(); const framework::VariableNameMap& outputs,
if (!ipu_backend->DeviceIsAttached()) { const framework::AttributeMap& attrs)
const platform::IPUDeviceContext& ipu_ctx = : OperatorBase(type, inputs, outputs, attrs) {}
reinterpret_cast<const platform::IPUDeviceContext&>(
ctx.device_context());
ipu_backend->AttachDevice(ipu_ctx.DeviceId());
}
private:
void RunImpl(const framework::Scope& scope,
const platform::Place& place) const {
auto ipu_backend = platform::ipu::IpuBackend::GetInstance();
auto* dev_ctx = platform::DeviceContextPool::Instance().Get(place);
framework::RuntimeContext runtime_ctx(inputs_, outputs_, scope);
framework::ExecutionContext ctx(*this, scope, *dev_ctx, runtime_ctx);
auto inputs = ctx.MultiInput<framework::Tensor>("FeedList"); auto inputs = ctx.MultiInput<framework::Tensor>("FeedList");
auto outputs = ctx.MultiOutput<framework::Tensor>("FetchList"); auto outputs = ctx.MultiOutput<framework::Tensor>("FetchList");
auto output_names = ctx.OutputNames("FetchList"); auto output_names = ctx.OutputNames("FetchList");
...@@ -58,12 +55,24 @@ class IpuRuntimeKernel : public framework::OpKernel<T> { ...@@ -58,12 +55,24 @@ class IpuRuntimeKernel : public framework::OpKernel<T> {
<< "(" << dim << ")"; << "(" << dim << ")";
} }
} }
#else }
PADDLE_THROW(platform::errors::PreconditionNotMet( };
"Please compile WITH_IPU option to enable ipu_runtime op"));
#endif class IpuRuntimeOpMaker : public framework::OpProtoAndCheckerMaker {
public:
void Make() override {
AddInput("FeedList", "FeedList of Graph").AsDuplicable();
AddOutput("FetchList", "FetchList of Graph").AsDuplicable();
AddComment(R"DOC(
Run graph by PopART runtime.
)DOC");
} }
}; };
} // namespace operators } // namespace operators
} // namespace paddle } // namespace paddle
namespace ops = paddle::operators;
REGISTER_OPERATOR(ipu_runtime, ops::IpuRuntimeOp, ops::IpuRuntimeOpMaker);
#endif // PADDLE_WITH_IPU
// Copyright (c) 2021 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.
#include "paddle/fluid/operators/ipu_runtime_op.h"
namespace paddle {
namespace operators {
class IpuRuntimeOp : public framework::OperatorWithKernel {
public:
using framework::OperatorWithKernel::OperatorWithKernel;
void InferShape(framework::InferShapeContext* ctx) const override {}
protected:
framework::OpKernelType GetExpectedKernelType(
const framework::ExecutionContext& ctx) const override {
return framework::OpKernelType(
framework::proto::VarType::Type(ctx.Attr<int>("dtype")),
ctx.device_context());
}
};
class IpuRuntimeOpMaker : public framework::OpProtoAndCheckerMaker {
public:
void Make() override {
AddInput("FeedList", "FeedList of Graph").AsDuplicable();
AddOutput("FetchList", "FetchList of Graph").AsDuplicable();
AddAttr<int>("dtype",
"(int, default 5 (FP32)) "
"Output data type")
.SetDefault(framework::proto::VarType::FP32);
AddComment(R"DOC(
Run graph by PopART runtime.
)DOC");
}
};
} // namespace operators
} // namespace paddle
namespace ops = paddle::operators;
REGISTER_OPERATOR(ipu_runtime, ops::IpuRuntimeOp, ops::IpuRuntimeOpMaker);
REGISTER_OP_IPU_KERNEL(ipu_runtime, ops::IpuRuntimeKernel<float>,
ops::IpuRuntimeKernel<double>,
ops::IpuRuntimeKernel<int>,
ops::IpuRuntimeKernel<int64_t>,
ops::IpuRuntimeKernel<bool>,
ops::IpuRuntimeKernel<int8_t>,
ops::IpuRuntimeKernel<paddle::platform::float16>);
...@@ -293,6 +293,10 @@ if(WITH_PYTHON) ...@@ -293,6 +293,10 @@ if(WITH_PYTHON)
target_link_libraries(paddle_pybind ${ROCM_HIPRTC_LIB}) target_link_libraries(paddle_pybind ${ROCM_HIPRTC_LIB})
endif() endif()
if(WITH_IPU)
target_link_libraries(paddle_pybind paddle_ipu)
endif()
get_property (os_dependency_modules GLOBAL PROPERTY OS_DEPENDENCY_MODULES) get_property (os_dependency_modules GLOBAL PROPERTY OS_DEPENDENCY_MODULES)
target_link_libraries(paddle_pybind ${os_dependency_modules}) target_link_libraries(paddle_pybind ${os_dependency_modules})
add_dependencies(paddle_pybind op_function_generator_cmd) add_dependencies(paddle_pybind op_function_generator_cmd)
......
...@@ -134,9 +134,10 @@ limitations under the License. */ ...@@ -134,9 +134,10 @@ limitations under the License. */
#endif #endif
#include "paddle/fluid/platform/cuda_graph_with_memory_pool.h" #include "paddle/fluid/platform/cuda_graph_with_memory_pool.h"
#ifdef PADDLE_WITH_IPU #ifdef PADDLE_WITH_IPU
#include "paddle/fluid/platform/ipu/ipu_backend.h" #include "paddle/fluid/platform/device/ipu/ipu_backend.h"
#include "paddle/fluid/platform/ipu_info.h" #include "paddle/fluid/platform/device/ipu/ipu_info.h"
#endif #endif
#ifdef PADDLE_WITH_MLU #ifdef PADDLE_WITH_MLU
......
...@@ -519,6 +519,10 @@ if '${WITH_XPU_BKCL}' == 'ON': ...@@ -519,6 +519,10 @@ if '${WITH_XPU_BKCL}' == 'ON':
shutil.copy('${XPU_BKCL_LIB}', libs_path) shutil.copy('${XPU_BKCL_LIB}', libs_path)
package_data['paddle.libs']+=['${XPU_BKCL_LIB_NAME}'] package_data['paddle.libs']+=['${XPU_BKCL_LIB_NAME}']
if '${WITH_IPU}' == 'ON':
shutil.copy('${PADDLE_IPU_LIB}', libs_path)
package_data['paddle.libs'] += ['libpaddle_ipu' + ext_name]
# remove unused paddle/libs/__init__.py # remove unused paddle/libs/__init__.py
if os.path.isfile(libs_path+'/__init__.py'): if os.path.isfile(libs_path+'/__init__.py'):
os.remove(libs_path+'/__init__.py') os.remove(libs_path+'/__init__.py')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册