From: @nicholas_yhr Reviewed-by: Signed-off-by:tags/v1.1.0
| @@ -71,7 +71,7 @@ set(MS_CCSRC_PATH ${CMAKE_SOURCE_DIR}/mindspore/ccsrc) | |||||
| set(MS_CCSRC_BUILD_PATH ${BUILD_PATH}/mindspore/mindspore/ccsrc) | set(MS_CCSRC_BUILD_PATH ${BUILD_PATH}/mindspore/mindspore/ccsrc) | ||||
| if (ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES) | if (ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES) | ||||
| include(${CMAKE_SOURCE_DIR}/cmake/dependency_graphengine.cmake) | |||||
| include(${CMAKE_SOURCE_DIR}/cmake/dependency_graphenginev2.cmake) | |||||
| endif () | endif () | ||||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") | ||||
| @@ -398,6 +398,9 @@ parse_device | |||||
| echo "---------------- MindSpore: build start ----------------" | echo "---------------- MindSpore: build start ----------------" | ||||
| mkdir -pv "${BUILD_PATH}/package/mindspore/lib" | mkdir -pv "${BUILD_PATH}/package/mindspore/lib" | ||||
| git submodule update --init graphengine | git submodule update --init graphengine | ||||
| cd "${BASEPATH}/graphengine" | |||||
| git submodule update --init metadef | |||||
| cd "${BASEPATH}" | |||||
| if [[ "X$ENABLE_AKG" = "Xon" ]] && [[ "X$ENABLE_D" = "Xon" || "X$ENABLE_GPU" = "Xon" ]]; then | if [[ "X$ENABLE_AKG" = "Xon" ]] && [[ "X$ENABLE_D" = "Xon" || "X$ENABLE_GPU" = "Xon" ]]; then | ||||
| git submodule update --init --recursive akg | git submodule update --init --recursive akg | ||||
| fi | fi | ||||
| @@ -0,0 +1,39 @@ | |||||
| message(STATUS "Compiling GraphEngine") | |||||
| set(GE_SOURCE_DIR ${CMAKE_SOURCE_DIR}/graphengine) | |||||
| message(STATUS "[ME] build_path: ${BUILD_PATH}") | |||||
| function(find_submodule_lib module name path) | |||||
| find_library(${module}_LIBRARY_DIR NAMES ${name} NAMES_PER_DIR PATHS ${path} | |||||
| PATH_SUFFIXES lib | |||||
| ) | |||||
| if ("${${module}_LIBRARY_DIR}" STREQUAL "${module}_LIBRARY_DIR-NOTFOUND") | |||||
| message(FATAL_ERROR "${name} not found in any of following paths: ${path}") | |||||
| endif() | |||||
| add_library(${module} SHARED IMPORTED) | |||||
| set_target_properties(${module} PROPERTIES | |||||
| IMPORTED_LOCATION ${${module}_LIBRARY_DIR} | |||||
| ) | |||||
| endfunction() | |||||
| if (ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES) | |||||
| set(_ge_tmp_CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) | |||||
| set(_ge_tmp_ENABLE_GITEE ${ENABLE_GITEE}) | |||||
| set(ENABLE_GITEE ON) | |||||
| set(CMAKE_INSTALL_PREFIX ${BUILD_PATH}/graphengine) | |||||
| if (ENABLE_TESTCASES) | |||||
| # use slog, error manager, mmpa in non ascend mode, e.g. tests | |||||
| set(GE_PREBUILD_PATH ${GE_SOURCE_DIR}/third_party/prebuild/${CMAKE_HOST_SYSTEM_PROCESSOR}) | |||||
| set(ENABLE_MS_TESTCASES TRUE) | |||||
| find_submodule_lib(slog libslog.so ${GE_PREBUILD_PATH}) | |||||
| find_submodule_lib(error_manager liberror_manager.so ${GE_PREBUILD_PATH}) | |||||
| find_submodule_lib(static_mmpa libmmpa.a ${GE_PREBUILD_PATH}) | |||||
| endif() | |||||
| add_subdirectory(${GE_SOURCE_DIR}) | |||||
| set(CMAKE_INSTALL_PREFIX ${_ge_tmp_CMAKE_INSTALL_PREFIX}) | |||||
| set(ENABLE_GITEE ${_ge_tmp_ENABLE_GITEE}) | |||||
| else() | |||||
| message(FATAL_ERROR "No compile option defined for GraphEngine, exiting") | |||||
| endif() | |||||
| @@ -61,9 +61,10 @@ if (ENABLE_GE) | |||||
| link_directories(${CMAKE_SOURCE_DIR}/third_party/ge/lib) | link_directories(${CMAKE_SOURCE_DIR}/third_party/ge/lib) | ||||
| elseif(ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES) | elseif(ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES) | ||||
| include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc) | include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc) | ||||
| include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc/ops) | |||||
| include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc/external) | include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc/external) | ||||
| include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc/external/graph) | |||||
| include_directories(${CMAKE_SOURCE_DIR}/graphengine/metadef/inc) | |||||
| include_directories(${CMAKE_SOURCE_DIR}/graphengine/metadef/inc/external) | |||||
| include_directories(${CMAKE_SOURCE_DIR}/graphengine/metadef/inc/external/graph) | |||||
| endif() | endif() | ||||
| if (ENABLE_GE OR ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES) | if (ENABLE_GE OR ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES) | ||||
| @@ -211,7 +211,7 @@ if (NOT ENABLE_GE) | |||||
| set(ASCEND_DRIVER_PATH ${ASCEND_PATH}/driver/lib64/common) | set(ASCEND_DRIVER_PATH ${ASCEND_PATH}/driver/lib64/common) | ||||
| install( | install( | ||||
| FILES ${CMAKE_SOURCE_DIR}/build/graphengine/libc_sec.so | |||||
| FILES ${CMAKE_SOURCE_DIR}/build/graphengine/c_sec/lib/libc_sec.so | |||||
| DESTINATION ${INSTALL_LIB_DIR} | DESTINATION ${INSTALL_LIB_DIR} | ||||
| COMPONENT mindspore | COMPONENT mindspore | ||||
| ) | ) | ||||
| @@ -224,9 +224,9 @@ if (NOT ENABLE_GE) | |||||
| ) | ) | ||||
| install( | install( | ||||
| FILES | FILES | ||||
| ${CMAKE_BINARY_DIR}/graphengine/src/common/graph/libgraph.so | |||||
| ${CMAKE_BINARY_DIR}/graphengine/src/ge/common/libge_common.so | |||||
| ${CMAKE_BINARY_DIR}/graphengine/src/ge/ge_runtime/libge_runtime.so | |||||
| ${CMAKE_BINARY_DIR}/graphengine/metadef/graph/libgraph.so | |||||
| ${CMAKE_BINARY_DIR}/graphengine/ge/common/libge_common.so | |||||
| ${CMAKE_BINARY_DIR}/graphengine/ge/ge_runtime/libge_runtime.so | |||||
| DESTINATION ${INSTALL_LIB_DIR} | DESTINATION ${INSTALL_LIB_DIR} | ||||
| COMPONENT mindspore | COMPONENT mindspore | ||||
| ) | ) | ||||
| @@ -234,8 +234,8 @@ if (NOT ENABLE_GE) | |||||
| elseif (ENABLE_TESTCASES) | elseif (ENABLE_TESTCASES) | ||||
| install( | install( | ||||
| FILES | FILES | ||||
| ${CMAKE_BINARY_DIR}/graphengine/src/common/graph/libgraph.so | |||||
| ${CMAKE_SOURCE_DIR}/build/graphengine/libc_sec.so | |||||
| ${CMAKE_BINARY_DIR}/graphengine/metadef/graph/libgraph.so | |||||
| ${CMAKE_SOURCE_DIR}/build/graphengine/c_sec/lib/libc_sec.so | |||||
| ${LIBEVENT_LIB_LIST} | ${LIBEVENT_LIB_LIST} | ||||
| DESTINATION ${INSTALL_LIB_DIR} | DESTINATION ${INSTALL_LIB_DIR} | ||||
| COMPONENT mindspore | COMPONENT mindspore | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit ce23341ee2c7e48b39f227b293d1aa7f54effd34 | |||||
| Subproject commit 20a0326976db65ca01f43ae4ccdd85677faaeb5e | |||||
| @@ -74,17 +74,14 @@ void AiCoreDynamicKernel::ParseCompileJson() { | |||||
| std::replace(compile_info_attr.begin(), compile_info_attr.end(), '\'', '\"'); | std::replace(compile_info_attr.begin(), compile_info_attr.end(), '\'', '\"'); | ||||
| compile_info_attr = ReplaceInvalidJsonStr(compile_info_attr); | compile_info_attr = ReplaceInvalidJsonStr(compile_info_attr); | ||||
| MS_LOG(INFO) << "Get compile_info:" << compile_info_attr; | MS_LOG(INFO) << "Get compile_info:" << compile_info_attr; | ||||
| try { | |||||
| compile_info_json_ = std::make_shared<nlohmann::json>(nlohmann::json::parse(compile_info_attr)); | |||||
| } catch (nlohmann::json::parse_error &e) { | |||||
| MS_LOG(EXCEPTION) << "parse json failed, error:" << e.what(); | |||||
| } | |||||
| op_compile_info_.str = compile_info_attr; | |||||
| op_compile_info_.key = ""; | |||||
| if (AnfAlgo::HasNodeAttr(kAttrFusionType, cnode_ptr_)) { | if (AnfAlgo::HasNodeAttr(kAttrFusionType, cnode_ptr_)) { | ||||
| auto fusion_type = AnfAlgo::GetNodeAttr<std::string>(cnode_ptr_, kAttrFusionType); | auto fusion_type = AnfAlgo::GetNodeAttr<std::string>(cnode_ptr_, kAttrFusionType); | ||||
| MS_LOG(INFO) << "Get fusion_type:" << fusion_type; | MS_LOG(INFO) << "Get fusion_type:" << fusion_type; | ||||
| (*compile_info_json_)["_pattern"] = fusion_type; | (*compile_info_json_)["_pattern"] = fusion_type; | ||||
| op_compile_info_.key = std::hash<std::string>{}(fusion_type); | |||||
| } | } | ||||
| } | } | ||||
| @@ -132,8 +129,8 @@ void AiCoreDynamicKernel::ComputeTiling() { | |||||
| MS_LOG(INFO) << "Start compute tiling of:" << cnode_ptr_->fullname_with_scope(); | MS_LOG(INFO) << "Start compute tiling of:" << cnode_ptr_->fullname_with_scope(); | ||||
| optiling::OpRunInfo op_run_info; | optiling::OpRunInfo op_run_info; | ||||
| OpTilingCalculater::GetInstance().CalculateTiling(NOT_NULL(cnode_ptr_), NOT_NULL(compile_info_json_), | |||||
| depend_tensor_map_, NOT_NULL(&op_run_info)); | |||||
| OpTilingCalculater::GetInstance().CalculateTiling(NOT_NULL(cnode_ptr_), op_compile_info_, depend_tensor_map_, | |||||
| NOT_NULL(&op_run_info)); | |||||
| block_dim_ = op_run_info.block_dim; | block_dim_ = op_run_info.block_dim; | ||||
| workspaces_size_ = op_run_info.workspaces; | workspaces_size_ = op_run_info.workspaces; | ||||
| tiling_data_ = op_run_info.tiling_data.str(); | tiling_data_ = op_run_info.tiling_data.str(); | ||||
| @@ -24,6 +24,7 @@ | |||||
| #include "nlohmann/json.hpp" | #include "nlohmann/json.hpp" | ||||
| #include "ir/tensor.h" | #include "ir/tensor.h" | ||||
| #include "runtime/device/device_address.h" | #include "runtime/device/device_address.h" | ||||
| #include "register/op_tiling.h" | |||||
| #include "mindspore/ccsrc/runtime/device/executor/dynamic_kernel.h" | #include "mindspore/ccsrc/runtime/device/executor/dynamic_kernel.h" | ||||
| namespace mindspore { | namespace mindspore { | ||||
| @@ -60,6 +61,7 @@ class AiCoreDynamicKernel : public DynamicKernel { | |||||
| std::vector<int64_t> workspaces_size_; | std::vector<int64_t> workspaces_size_; | ||||
| std::vector<DeviceAddressPtr> workspace_addr_; | std::vector<DeviceAddressPtr> workspace_addr_; | ||||
| std::shared_ptr<nlohmann::json> compile_info_json_; | std::shared_ptr<nlohmann::json> compile_info_json_; | ||||
| optiling::OpCompileInfo op_compile_info_{}; | |||||
| void ComputeTiling(); | void ComputeTiling(); | ||||
| bool CopyTilingToDevice(); | bool CopyTilingToDevice(); | ||||
| @@ -25,6 +25,7 @@ | |||||
| #include "runtime/device/ascend/ge_types_convert.h" | #include "runtime/device/ascend/ge_types_convert.h" | ||||
| #include "utils/utils.h" | #include "utils/utils.h" | ||||
| #include "external/graph/tensor.h" | #include "external/graph/tensor.h" | ||||
| #include "external/register/op_tiling_registry.h" | |||||
| namespace mindspore { | namespace mindspore { | ||||
| namespace device { | namespace device { | ||||
| @@ -136,7 +137,7 @@ void FeedTeOpConstTensor(const NotNull<CNodePtr> &cnode, const std::map<uint32_t | |||||
| void OpTilingCalculater::Init() { | void OpTilingCalculater::Init() { | ||||
| MS_LOG(INFO) << "Start init OpTilingCalculater"; | MS_LOG(INFO) << "Start init OpTilingCalculater"; | ||||
| tiling_func_map_ = optiling::OpTilingInterf::RegisteredOpInterf(); | |||||
| tiling_func_map_ = optiling::OpTilingRegistryInterf::RegisteredOpInterf(); | |||||
| MS_LOG(INFO) << "tiling_func_map_ size:" << tiling_func_map_.size(); | MS_LOG(INFO) << "tiling_func_map_ size:" << tiling_func_map_.size(); | ||||
| for (const auto &iter : tiling_func_map_) { | for (const auto &iter : tiling_func_map_) { | ||||
| MS_LOG(INFO) << "Regist tiling func:" << iter.first; | MS_LOG(INFO) << "Regist tiling func:" << iter.first; | ||||
| @@ -157,8 +158,7 @@ std::string GetRealOpType(const std::string &op_type) { | |||||
| return iter->second; | return iter->second; | ||||
| } | } | ||||
| void OpTilingCalculater::CalculateTiling(const NotNull<CNodePtr> &cnode, | |||||
| const NotNull<std::shared_ptr<nlohmann::json>> &compile_info_json, | |||||
| void OpTilingCalculater::CalculateTiling(const NotNull<CNodePtr> &cnode, const optiling::OpCompileInfo &op_compile_info, | |||||
| const std::map<uint32_t, tensor::TensorPtr> &depend_tensor_map, | const std::map<uint32_t, tensor::TensorPtr> &depend_tensor_map, | ||||
| NotNull<optiling::OpRunInfo *> op_run_info) { | NotNull<optiling::OpRunInfo *> op_run_info) { | ||||
| optiling::TeOpParas op_param; | optiling::TeOpParas op_param; | ||||
| @@ -181,7 +181,7 @@ void OpTilingCalculater::CalculateTiling(const NotNull<CNodePtr> &cnode, | |||||
| MS_LOG(INFO) << "Get tiling func:" << iter->first; | MS_LOG(INFO) << "Get tiling func:" << iter->first; | ||||
| if (iter != tiling_func_map_.end()) { | if (iter != tiling_func_map_.end()) { | ||||
| bool ret = (iter->second)(op_type, op_param, *compile_info_json.get(), *op_run_info); | |||||
| bool ret = (iter->second)(op_param, op_compile_info, *op_run_info); | |||||
| if (!ret) { | if (!ret) { | ||||
| MS_LOG(EXCEPTION) << "Calculate tiling failed"; | MS_LOG(EXCEPTION) << "Calculate tiling failed"; | ||||
| } | } | ||||
| @@ -37,8 +37,7 @@ class OpTilingCalculater { | |||||
| } | } | ||||
| void Init(); | void Init(); | ||||
| void CalculateTiling(const NotNull<CNodePtr> &cnode, | |||||
| const NotNull<std::shared_ptr<nlohmann::json>> &compile_info_json, | |||||
| void CalculateTiling(const NotNull<CNodePtr> &cnode, const optiling::OpCompileInfo &op_compile_info, | |||||
| const std::map<uint32_t, tensor::TensorPtr> &depend_tensor_map, | const std::map<uint32_t, tensor::TensorPtr> &depend_tensor_map, | ||||
| NotNull<optiling::OpRunInfo *> op_run_info); | NotNull<optiling::OpRunInfo *> op_run_info); | ||||
| @@ -21,7 +21,7 @@ | |||||
| #include <vector> | #include <vector> | ||||
| #include <memory> | #include <memory> | ||||
| #include "mindspore/core/ir/anf.h" | #include "mindspore/core/ir/anf.h" | ||||
| #include "external/hccl/hccl_types.h" | |||||
| #include "hccl/hccl_types.h" | |||||
| #define MS_API __attribute__((visibility("default"))) | #define MS_API __attribute__((visibility("default"))) | ||||
| @@ -164,10 +164,10 @@ def test_transformer(): | |||||
| # assertion occurs while the loss value, overflow state or loss_scale value is wrong | # assertion occurs while the loss value, overflow state or loss_scale value is wrong | ||||
| loss_value = np.array(callback.loss_list) | loss_value = np.array(callback.loss_list) | ||||
| assert np.allclose(loss_value[0], 11.241624, 0, 0.000005) | |||||
| assert np.allclose(loss_value[0], 11.241604, 0, 0.000005) | |||||
| expect_loss_value = [11.241624, 11.243232, 11.217465, 11.204196, 11.2138195, | |||||
| 11.215386, 11.19053, 11.150403, 11.191858, 11.160057] | |||||
| expect_loss_value = [11.241604, 11.243231, 11.217458, 11.204156, 11.213805, | |||||
| 11.215374, 11.19065, 11.150393, 11.191824, 11.160044] | |||||
| print("loss value: {}".format(loss_value)) | print("loss value: {}".format(loss_value)) | ||||
| assert np.allclose(loss_value[0:10], expect_loss_value, 0, 0.0005) | assert np.allclose(loss_value[0:10], expect_loss_value, 0, 0.0005) | ||||
| @@ -15,7 +15,7 @@ | |||||
| # ============================================================================ | # ============================================================================ | ||||
| set -e | set -e | ||||
| BASEPATH=$(cd $(dirname $0); pwd) | |||||
| BASEPATH=$(cd "$(dirname "$0")"; pwd) | |||||
| PROJECT_PATH=${BASEPATH}/../../.. | PROJECT_PATH=${BASEPATH}/../../.. | ||||
| if [ $BUILD_PATH ];then | if [ $BUILD_PATH ];then | ||||
| echo "BUILD_PATH = $BUILD_PATH" | echo "BUILD_PATH = $BUILD_PATH" | ||||
| @@ -26,7 +26,9 @@ fi | |||||
| cd ${BUILD_PATH}/mindspore/tests/ut/cpp | cd ${BUILD_PATH}/mindspore/tests/ut/cpp | ||||
| export LD_LIBRARY_PATH=${BUILD_PATH}/mindspore/googletest/googlemock/gtest:${PROJECT_PATH}/mindspore:${PROJECT_PATH}/mindspore/lib:$LD_LIBRARY_PATH | |||||
| export LD_LIBRARY_PATH=${BUILD_PATH}/mindspore/googletest/googlemock/gtest:${PROJECT_PATH}/mindspore:\ | |||||
| ${PROJECT_PATH}/mindspore/lib:${PROJECT_PATH}/graphengine/third_party/prebuild/x86_64:\ | |||||
| ${PROJECT_PATH}/graphengine/third_party/prebuild/aarch64:${LD_LIBRARY_PATH} | |||||
| export PYTHONPATH=${PROJECT_PATH}/tests/ut/cpp/python_input:$PYTHONPATH:${PROJECT_PATH} | export PYTHONPATH=${PROJECT_PATH}/tests/ut/cpp/python_input:$PYTHONPATH:${PROJECT_PATH} | ||||
| export GLOG_v=2 | export GLOG_v=2 | ||||
| export GC_COLLECT_IN_CELL=1 | export GC_COLLECT_IN_CELL=1 | ||||
| @@ -53,10 +53,9 @@ bool HcclExecutorManager::Initialize() { return true; } | |||||
| bool HcclExecutorManager::Finalize() { return true; } | bool HcclExecutorManager::Finalize() { return true; } | ||||
| void OpTilingCalculater::Init() {} | void OpTilingCalculater::Init() {} | ||||
| void OpTilingCalculater::CalculateTiling(const NotNull<CNodePtr> &cnode, | |||||
| const NotNull<std::shared_ptr<nlohmann::json>> &compile_info_json, | |||||
| const std::map<uint32_t, tensor::TensorPtr> &depend_tensor_map, | |||||
| NotNull<optiling::OpRunInfo *> op_run_info) {} | |||||
| void OpTilingCalculater::CalculateTiling(const NotNull<CNodePtr> &cnode, const optiling::OpCompileInfo &op_compile_info, | |||||
| const std::map<uint32_t, tensor::TensorPtr> &depend_tensor_map, | |||||
| NotNull<optiling::OpRunInfo *> op_run_info) {} | |||||
| } // namespace ascend | } // namespace ascend | ||||
| } // namespace device | } // namespace device | ||||
| } // namespace mindspore | } // namespace mindspore | ||||