Browse Source

!4686 Add Convertor function for windows enviroment

Merge pull request !4686 from liuwenhao/master
tags/v0.7.0-beta
mindspore-ci-bot Gitee 5 years ago
parent
commit
f17d05007e
11 changed files with 179 additions and 23 deletions
  1. +87
    -14
      build.bat
  2. +14
    -3
      mindspore/lite/CMakeLists.txt
  3. +4
    -0
      mindspore/lite/src/common/file_utils.cc
  4. +1
    -1
      mindspore/lite/src/common/log_adapter.cc
  5. +4
    -0
      mindspore/lite/src/runtime/kernel/arm/nnacl/optimized_kernel.h
  6. +2
    -0
      mindspore/lite/src/runtime/thread_pool.cc
  7. +12
    -0
      mindspore/lite/src/runtime/workspace_pool.cc
  8. +7
    -0
      mindspore/lite/tools/anf_importer/import_from_protobuf.cc
  9. +34
    -4
      mindspore/lite/tools/converter/CMakeLists.txt
  10. +7
    -0
      mindspore/lite/tools/converter/parser/onnx/onnx_model_parser.cc
  11. +7
    -1
      mindspore/lite/tools/converter/quantizer/post_training_quantizer.cc

+ 87
- 14
build.bat View File

@@ -17,38 +17,111 @@


SET BASEPATH=%CD% SET BASEPATH=%CD%
IF NOT EXIST %BASEPATH%/build ( IF NOT EXIST %BASEPATH%/build (
md "build"
)
md "build"
)


cd %BASEPATH%/build cd %BASEPATH%/build
SET BUILD_PATH=%CD%
set BUILD_PATH=%CD%


IF NOT EXIST %BUILD_PATH%/mindspore ( IF NOT EXIST %BUILD_PATH%/mindspore (
md "mindspore"
)
md "mindspore"
)


cd %CD%/mindspore cd %CD%/mindspore


cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_CPU=ON -DENABLE_MINDDATA=ON -DUSE_GLOG=ON -G "CodeBlocks - MinGW Makefiles" ../..
IF NOT %errorlevel% == 0 (
echo "cmake fail."
goto run_fail
IF "%2%" == "lite" (
call :gene_gtest
call :run_cmake
IF errorlevel 1 (
echo "cmake fail one time."
call :gene_protobuf
call :gene_flatbuffer
call :run_cmake
IF errorlevel 1 (
echo "cmake fail."
goto run_fail
)
) ELSE (
call :gene_protobuf
call :gene_flatbuffer
) )


IF "%1%" == "" (
cmake --build . --target package -- -j6
cd %BUILD_PATH%/mindspore
IF "%1%" == "" (
cmake --build . -- -j6
) ELSE (
cmake --build . -- -j%1%
)
IF errorlevel 1 (
echo "build fail."
goto run_fail
)
) ELSE (
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_CPU=ON -DENABLE_MINDDATA=ON -DUSE_GLOG=ON ^
-G "CodeBlocks - MinGW Makefiles" ../..
IF NOT %errorlevel% == 0 (
echo "cmake fail."
goto run_fail
)

IF "%1%" == "" (
cmake --build . --target package -- -j6
) ELSE ( ) ELSE (
cmake --build . --target package -- -j%1% cmake --build . --target package -- -j%1%
) )
IF NOT %errorlevel% == 0 (
echo "build fail."
goto run_fail
IF NOT %errorlevel% == 0 (
echo "build fail."
goto run_fail
) )
)


cd %BASEPATH% cd %BASEPATH%


goto run_eof goto run_eof


:run_cmake
cd %BUILD_PATH%/mindspore
cmake -DBUILD_DEVICE=on -DBUILD_CONVERTER=on -DPLATFORM_ARM64=off -DSUPPORT_TRAIN=off ^
-DCMAKE_BUILD_TYPE=Release -DSUPPORT_GPU=off -DBUILD_MINDDATA=off -DOFFLINE_COMPILE=off ^
-G "CodeBlocks - MinGW Makefiles" %BASEPATH%/mindspore/lite
GOTO:EOF

:gene_gtest
cd %BASEPATH%/third_party
IF EXIST googletest rd /s /q googletest
git submodule update --init --recursive googletest
cd %BUILD_PATH%/mindspore
GOTO:EOF

:gene_protobuf
SET PROTOC=%BASEPATH%/build/mindspore/_deps/protobuf-src/_build/protoc

SET PROTO_SRC_DIR=%BASEPATH%/mindspore/lite/tools/converter/parser/caffe
cd %PROTO_SRC_DIR%
%PROTOC% *.proto --proto_path=%PROTO_SRC_DIR% --cpp_out=%PROTO_SRC_DIR%

SET PROTO_SRC_DIR=%BASEPATH%/mindspore/lite/tools/converter/parser/onnx
cd %PROTO_SRC_DIR%
%PROTOC% *.proto --proto_path=%PROTO_SRC_DIR% --cpp_out=%PROTO_SRC_DIR%
cd %BUILD_PATH%/mindspore
GOTO:EOF

:gene_flatbuffer
SET FLATC=%BASEPATH%/build/mindspore/_deps/flatbuffers-src/_build/flatc
SET FLAT_DIR=%BASEPATH%/mindspore/lite/schema
cd %FLAT_DIR%
IF EXIST inner rd /s /q inner
md inner

%FLATC% -c -b *.fbs
%FLATC% -c -b --reflect-types --gen-mutable --reflect-names --gen-object-api -o %FLAT_DIR%/inner *.fbs

SET FLAT_DIR=%BASEPATH%/mindspore/lite/tools/converter/parser/tflite
cd %FLAT_DIR%
%FLATC% -c -b --reflect-types --gen-mutable --reflect-names --gen-object-api -o %FLAT_DIR% *.fbs
cd %BUILD_PATH%/mindspore
GOTO:EOF

:run_fail :run_fail
cd %BASEPATH% cd %BASEPATH%
set errorlevel=1 set errorlevel=1


+ 14
- 3
mindspore/lite/CMakeLists.txt View File

@@ -44,6 +44,10 @@ include_directories(${TOP_DIR}/third_party/flatbuffers/include)
include(${TOP_DIR}/cmake/utils.cmake) include(${TOP_DIR}/cmake/utils.cmake)
include(${TOP_DIR}/cmake/dependency_utils.cmake) include(${TOP_DIR}/cmake/dependency_utils.cmake)
include(${TOP_DIR}/cmake/dependency_securec.cmake) include(${TOP_DIR}/cmake/dependency_securec.cmake)
if (WIN32)
include(${TOP_DIR}/cmake/external_libs/protobuf.cmake)
include(${TOP_DIR}/cmake/external_libs/flatbuffers.cmake)
endif()


option(CMAKE_BUILD_TYPE "build type" Release) option(CMAKE_BUILD_TYPE "build type" Release)
option(BUILD_DEVICE "if build device" on) option(BUILD_DEVICE "if build device" on)
@@ -89,6 +93,11 @@ if (SUPPORT_GPU)
include_directories(${TOP_DIR}/third_party/OpenCL-CLHPP/include) include_directories(${TOP_DIR}/third_party/OpenCL-CLHPP/include)
endif() endif()


if (WIN32)
add_compile_definitions(LITE_EXPORTS)
add_compile_definitions(BUILDING_DLL)
endif()

set(ANF_SRC set(ANF_SRC
${CMAKE_CURRENT_SOURCE_DIR}/../core/ir/meta_tensor.cc ${CMAKE_CURRENT_SOURCE_DIR}/../core/ir/meta_tensor.cc
${CORE_DIR}/gvar/logging_level.cc ${CORE_DIR}/gvar/logging_level.cc
@@ -178,9 +187,11 @@ endif()


if (BUILD_DEVICE) if (BUILD_DEVICE)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tools/benchmark)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/test)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tools/time_profile)
if (NOT WIN32)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tools/benchmark)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/test)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tools/time_profile)
endif()
endif() endif()


include(${TOP_DIR}/cmake/package_lite.cmake) include(${TOP_DIR}/cmake/package_lite.cmake)

+ 4
- 0
mindspore/lite/src/common/file_utils.cc View File

@@ -72,7 +72,11 @@ std::string RealPath(const char *path) {
MS_LOG(ERROR) << "new resolvedPath failed"; MS_LOG(ERROR) << "new resolvedPath failed";
return ""; return "";
} }
#ifdef _WIN32
char *real_path = _fullpath(resolvedPath.get(), path, 1024);
#else
char *real_path = realpath(path, resolvedPath.get()); char *real_path = realpath(path, resolvedPath.get());
#endif
if (real_path == nullptr || strlen(real_path) == 0) { if (real_path == nullptr || strlen(real_path) == 0) {
MS_LOG(ERROR) << "Proto file path is not valid"; MS_LOG(ERROR) << "Proto file path is not valid";
return ""; return "";


+ 1
- 1
mindspore/lite/src/common/log_adapter.cc View File

@@ -120,7 +120,7 @@ if (IsPrint(log_level_)) {
__android_log_print(GetAndroidLogLevel(log_level_), ANDROID_LOG_TAG, "[%s:%d] %s] %s", location_.file_, __android_log_print(GetAndroidLogLevel(log_level_), ANDROID_LOG_TAG, "[%s:%d] %s] %s", location_.file_,
location_.line_, location_.func_, msg.str().c_str()); location_.line_, location_.func_, msg.str().c_str());
#else #else
printf("%s [%s:%d] %s] %s\n:", EnumStrForMsLogLevel(log_level_), location_.file_, location_.line_, location_.func_,
printf("%s [%s:%d] %s] %s\n", EnumStrForMsLogLevel(log_level_), location_.file_, location_.line_, location_.func_,
msg.str().c_str()); msg.str().c_str());
#endif #endif
} }


+ 4
- 0
mindspore/lite/src/runtime/kernel/arm/nnacl/optimized_kernel.h View File

@@ -17,7 +17,9 @@
#ifndef MINDSPORE_LITE_SRC_RUNTIME_KERNEL_ARM_NNACL_OPTIMIZED_KERNEL_H_ #ifndef MINDSPORE_LITE_SRC_RUNTIME_KERNEL_ARM_NNACL_OPTIMIZED_KERNEL_H_
#define MINDSPORE_LITE_SRC_RUNTIME_KERNEL_ARM_NNACL_OPTIMIZED_KERNEL_H_ #define MINDSPORE_LITE_SRC_RUNTIME_KERNEL_ARM_NNACL_OPTIMIZED_KERNEL_H_


#ifndef _WIN32
#include <dlfcn.h> #include <dlfcn.h>
#endif
#ifdef __ANDROID__ #ifdef __ANDROID__
#include <asm/hwcap.h> #include <asm/hwcap.h>
#include "nnacl/nnacl_utils.h" #include "nnacl/nnacl_utils.h"
@@ -58,7 +60,9 @@ class OptimizeModule {
if ((!support_optimize_ops) && (!support_fp16)) { if ((!support_optimize_ops) && (!support_fp16)) {
return; return;
} }
#ifndef _WIN32
optimized_op_handler_ = dlopen(OPTIMIZE_SHARED_LIBRARY_PATH, RTLD_LAZY); optimized_op_handler_ = dlopen(OPTIMIZE_SHARED_LIBRARY_PATH, RTLD_LAZY);
#endif
if (optimized_op_handler_ == nullptr) { if (optimized_op_handler_ == nullptr) {
printf("Open optimize shared library failed.\n"); printf("Open optimize shared library failed.\n");
} }


+ 2
- 0
mindspore/lite/src/runtime/thread_pool.cc View File

@@ -212,11 +212,13 @@ bool LiteThreadBind::SetCPUBind(pthread_t threadId, cpu_set_t *cpuSet) {
MS_LOG(ERROR) << "not bind thread to apple's cpu."; MS_LOG(ERROR) << "not bind thread to apple's cpu.";
return false; return false;
#else #else
#ifndef _WIN32
int ret = pthread_setaffinity_np(threadId, sizeof(cpuSet), cpuSet); int ret = pthread_setaffinity_np(threadId, sizeof(cpuSet), cpuSet);
if (ret != 0) { if (ret != 0) {
MS_LOG(ERROR) << "bind thread " << threadId << " to cpu failed.ERROR " << ret; MS_LOG(ERROR) << "bind thread " << threadId << " to cpu failed.ERROR " << ret;
return false; return false;
} }
#endif
#endif // __APPLE__ #endif // __APPLE__
#endif #endif
return true; return true;


+ 12
- 0
mindspore/lite/src/runtime/workspace_pool.cc View File

@@ -47,8 +47,12 @@ void *WorkspacePool::AllocWorkSpaceMem(size_t size) {
MS_LOGE("posix_memalign failed, error code:%d", err); MS_LOGE("posix_memalign failed, error code:%d", err);
return alloc.second; return alloc.second;
} }
#else
#ifdef _WIN32
alloc.second = _aligned_malloc(nbytes, kTempAllocaAlignment);
#else #else
alloc.second = memalign(kTempAllocaAlignment, nbytes); alloc.second = memalign(kTempAllocaAlignment, nbytes);
#endif
#endif #endif
} else if (freeList.size() == 1) { // one element } else if (freeList.size() == 1) { // one element
alloc = *(freeList.begin()); alloc = *(freeList.begin());
@@ -62,8 +66,12 @@ void *WorkspacePool::AllocWorkSpaceMem(size_t size) {
MS_LOGE("posix_memalign failed, error code:%d", err); MS_LOGE("posix_memalign failed, error code:%d", err);
return alloc.second; return alloc.second;
} }
#else
#ifdef _WIN32
alloc.second = _aligned_malloc(nbytes, kTempAllocaAlignment);
#else #else
alloc.second = memalign(kTempAllocaAlignment, nbytes); alloc.second = memalign(kTempAllocaAlignment, nbytes);
#endif
#endif #endif
} }
} else { } else {
@@ -91,8 +99,12 @@ void *WorkspacePool::AllocWorkSpaceMem(size_t size) {
MS_LOGE("posix_memalign failed, error code:%d", err); MS_LOGE("posix_memalign failed, error code:%d", err);
return alloc.second; return alloc.second;
} }
#else
#ifdef _WIN32
alloc.second = _aligned_malloc(nbytes, kTempAllocaAlignment);
#else #else
alloc.second = memalign(kTempAllocaAlignment, nbytes); alloc.second = memalign(kTempAllocaAlignment, nbytes);
#endif
#endif #endif
} }
} }


+ 7
- 0
mindspore/lite/tools/anf_importer/import_from_protobuf.cc View File

@@ -657,10 +657,17 @@ int AnfImporterFromProtobuf::Import(const schema::QuantType &quantType) {


onnx::ModelProto *AnfImporterFromProtobuf::ReadOnnxFromBinary(const std::string &model_path) { onnx::ModelProto *AnfImporterFromProtobuf::ReadOnnxFromBinary(const std::string &model_path) {
std::unique_ptr<char> onnx_file(new (std::nothrow) char[PATH_MAX]{0}); std::unique_ptr<char> onnx_file(new (std::nothrow) char[PATH_MAX]{0});
#ifdef _WIN32
if (_fullpath(onnx_file.get(), model_path.c_str(), 1024) == nullptr) {
MS_LOG(ERROR) << "open file failed.";
return nullptr;
}
#else
if (realpath(model_path.c_str(), onnx_file.get()) == nullptr) { if (realpath(model_path.c_str(), onnx_file.get()) == nullptr) {
MS_LOG(ERROR) << "open file failed."; MS_LOG(ERROR) << "open file failed.";
return nullptr; return nullptr;
} }
#endif
int fd = open(onnx_file.get(), O_RDONLY); int fd = open(onnx_file.get(), O_RDONLY);
google::protobuf::io::FileInputStream input(fd); google::protobuf::io::FileInputStream input(fd);
google::protobuf::io::CodedInputStream code_input(&input); google::protobuf::io::CodedInputStream code_input(&input);


+ 34
- 4
mindspore/lite/tools/converter/CMakeLists.txt View File

@@ -1,15 +1,15 @@
set(ANF_SRC set(ANF_SRC
${ANF_SRC} ${ANF_SRC}
#core / abstract
#core / abstract
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/abstract_function.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/abstract_function.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/analysis_context.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/analysis_context.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/param_validator.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/param_validator.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/abstract_value.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/abstract_value.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/dshape.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/dshape.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/utils.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/abstract/utils.cc
#core / base
#core / base
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/base/base_ref.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/base/base_ref.cc
#core / ir
#core / ir
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/ir/anf.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/ir/anf.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/ir/anf_extends.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/ir/anf_extends.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../../core/ir/meta_func_graph.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/ir/meta_func_graph.cc
@@ -55,6 +55,28 @@ set(ANF_SRC
${CMAKE_CURRENT_SOURCE_DIR}/../../src/common/graph_utils_extends.cc ${CMAKE_CURRENT_SOURCE_DIR}/../../src/common/graph_utils_extends.cc
) )


if (WIN32)
set(LITE_SRC
#src
${CMAKE_CURRENT_SOURCE_DIR}/../../src/ir/tensor.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/model.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/context.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/lite_session.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/kernel_registry.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/common/graph_util.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/runtime/runtime_api.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/runtime/thread_pool.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/runtime/workspace_pool.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/runtime/allocator.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/executor.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/scheduler.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/lite_kernel.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/common/ms_tensor_utils.cc
${CMAKE_CURRENT_SOURCE_DIR}/../../src/runtime/kernel/arm/nnacl/pack.c
${CMAKE_CURRENT_SOURCE_DIR}/../../src/populate_parameter.cc
)
endif()

file(GLOB_RECURSE OPS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../src/ops/*.cc) file(GLOB_RECURSE OPS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../src/ops/*.cc)


file(GLOB_RECURSE CONVERTER_SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} file(GLOB_RECURSE CONVERTER_SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -91,12 +113,20 @@ add_subdirectory(parser/onnx)
add_subdirectory(legacy_optimizer) add_subdirectory(legacy_optimizer)
add_subdirectory(quantizer) add_subdirectory(quantizer)


if (WIN32)
set(PROTO_LIBRARY mindspore::protobuf)
else()
set(PROTO_LIBRARY protobuf)
endif()

add_executable(converter_lite add_executable(converter_lite
main.cc main.cc
${ANF_SRC} ${ANF_SRC}
${CONVERTER_SRC} ${CONVERTER_SRC}
${OPS_SRC} ${OPS_SRC}
${LITE_SRC}
) )

target_link_libraries(converter_lite PRIVATE target_link_libraries(converter_lite PRIVATE
tflite_parser_mid tflite_parser_mid
caffe_parser_mid caffe_parser_mid
@@ -106,9 +136,9 @@ target_link_libraries(converter_lite PRIVATE
graph_pass_mid graph_pass_mid
fusion_mid fusion_mid
quantizer_mid quantizer_mid
protobuf
quantizer_mid quantizer_mid
pthread pthread
${PROTO_LIBRARY}
mindspore-lite mindspore-lite
${SECUREC_LIBRARY} ${SECUREC_LIBRARY}
mindspore::json mindspore::json


+ 7
- 0
mindspore/lite/tools/converter/parser/onnx/onnx_model_parser.cc View File

@@ -56,10 +56,17 @@ std::vector<int32_t> OnnxModelParser::GetDimsFromOnnxValue(const onnx::ValueInfo


STATUS OnnxModelParser::ReadOnnxModelFromBinary(const std::string &modelFile, google::protobuf::Message *onnx_model) { STATUS OnnxModelParser::ReadOnnxModelFromBinary(const std::string &modelFile, google::protobuf::Message *onnx_model) {
std::unique_ptr<char> onnx_file(new (std::nothrow) char[PATH_MAX]{0}); std::unique_ptr<char> onnx_file(new (std::nothrow) char[PATH_MAX]{0});
#ifdef _WIN32
if (_fullpath(onnx_file.get(), modelFile.c_str(), 1024) == nullptr) {
MS_LOG(ERROR) << "get realpath " << modelFile << " fail";
return RET_ERROR;
}
#else
if (realpath(modelFile.c_str(), onnx_file.get()) == nullptr) { if (realpath(modelFile.c_str(), onnx_file.get()) == nullptr) {
MS_LOG(ERROR) << "get realpath " << modelFile << " fail"; MS_LOG(ERROR) << "get realpath " << modelFile << " fail";
return RET_ERROR; return RET_ERROR;
} }
#endif
int fd = open(onnx_file.get(), O_RDONLY); int fd = open(onnx_file.get(), O_RDONLY);
google::protobuf::io::FileInputStream input(fd); google::protobuf::io::FileInputStream input(fd);
google::protobuf::io::CodedInputStream code_input(&input); google::protobuf::io::CodedInputStream code_input(&input);


+ 7
- 1
mindspore/lite/tools/converter/quantizer/post_training_quantizer.cc View File

@@ -426,9 +426,15 @@ STATUS Calibrator::ReadConfig() {
MS_LOG(ERROR) << "New an object failed."; MS_LOG(ERROR) << "New an object failed.";
return RET_ERROR; return RET_ERROR;
} }
if (nullptr != realpath(config_path_.c_str(), resolved_path)) {
#ifdef _WIN32
if (_fullpath(resolved_path, config_path_.c_str(), 1024) != nullptr) {
config_path_ = string(resolved_path); config_path_ = string(resolved_path);
} }
#else
if (realpath(config_path_.c_str(), resolved_path) != nullptr) {
config_path_ = string(resolved_path);
}
#endif
std::ifstream fs(config_path_.c_str(), std::ifstream::in); std::ifstream fs(config_path_.c_str(), std::ifstream::in);
if (!fs.is_open()) { if (!fs.is_open()) {
MS_LOG(ERROR) << "config proto file %s open failed: " << config_path_; MS_LOG(ERROR) << "config proto file %s open failed: " << config_path_;


Loading…
Cancel
Save