!8702 add cropper to mindspore-lite
From: @yeyunpeng2020 Reviewed-by: Signed-off-by:pull/8702/MERGE
commit
8cf3a072b9
@ -0,0 +1,20 @@
|
||||
# add shared link library
|
||||
set(COMMON_SRC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../common/flag_parser.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../src/common/file_utils.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../src/common/utils.cc
|
||||
)
|
||||
|
||||
add_executable(lib_cropper
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/main.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lib_cropper.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cropper_flags.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cropper_utils.cc
|
||||
${COMMON_SRC})
|
||||
|
||||
add_dependencies(lib_cropper fbs_src)
|
||||
|
||||
target_link_libraries(lib_cropper mindspore-lite_static)
|
||||
|
||||
add_custom_command(TARGET lib_cropper POST_BUILD COMMAND
|
||||
bash build_cropper_config.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
@ -0,0 +1,170 @@
|
||||
#!/bin/bash
|
||||
|
||||
CURRENT_PATH=$(pwd)
|
||||
MINDSPORE_HOME="${CURRENT_PATH}/../../../.."
|
||||
echo "MINDSPORE_HOME path is ${MINDSPORE_HOME}"
|
||||
CROPPER_OUTPUT_DIR=${MINDSPORE_HOME}/mindspore/lite/build/tools/lib_cropper
|
||||
mkdir -p ${CROPPER_OUTPUT_DIR}
|
||||
MAPPING_OUTPUT_FILE_NAME_TMP=${CROPPER_OUTPUT_DIR}/cropper_mapping_cpu_tmp.cfg
|
||||
MAPPING_OUTPUT_FILE_NAME=${CROPPER_OUTPUT_DIR}/cropper_mapping_cpu.cfg
|
||||
echo "MAPPING_OUTPUT_FILE_NAME is ${MAPPING_OUTPUT_FILE_NAME}"
|
||||
[ -n "${MAPPING_OUTPUT_FILE_NAME_TMP}" ] && rm -f ${MAPPING_OUTPUT_FILE_NAME_TMP}
|
||||
[ -n "${MAPPING_OUTPUT_FILE_NAME}" ] && rm -f ${MAPPING_OUTPUT_FILE_NAME}
|
||||
ops_list=()
|
||||
DEFINE_STR="-DENABLE_ANDROID -DENABLE_ARM -DENABLE_ARM64 -DENABLE_NEON -DNO_DLIB -DUSE_ANDROID_LOG -DANDROID"
|
||||
# get the flatbuffers path
|
||||
if [ ${MSLIBS_CACHE_PATH} ]; then
|
||||
FLATBUFFERS_LIST=($(ls -d ${MSLIBS_CACHE_PATH}/flatbuffers_*/include))
|
||||
FLATBUFFERS=${FLATBUFFERS_LIST[0]}
|
||||
echo "FLATBUFFERS path is ${FLATBUFFERS}"
|
||||
else
|
||||
FLATBUFFERS=$(ls -d ${MINDSPORE_HOME}/mindspore/lite/build/.mslib/flatbuffers_*/include)
|
||||
echo "FLATBUFFERS path is ${FLATBUFFERS}"
|
||||
fi
|
||||
|
||||
HEADER_LOCATION="-I${MINDSPORE_HOME}
|
||||
-I${MINDSPORE_HOME}/mindspore/core
|
||||
-I${MINDSPORE_HOME}/mindspore/core/ir
|
||||
-I${MINDSPORE_HOME}/mindspore/ccsrc
|
||||
-I${MINDSPORE_HOME}/mindspore/lite
|
||||
-I${MINDSPORE_HOME}/mindspore/lite/src/runtime/kernel/arm
|
||||
-I${MINDSPORE_HOME}/third_party
|
||||
-I${MINDSPORE_HOME}/mindspore/lite/build
|
||||
-I${MINDSPORE_HOME}/cmake/../third_party/securec/include
|
||||
-I${FLATBUFFERS}
|
||||
-I${MINDSPORE_HOME}/mindspore/lite/build/schema
|
||||
-I${MINDSPORE_HOME}/mindspore/lite/build/schema/inner
|
||||
-I${MINDSPORE_HOME}/mindspore/lite/src/../nnacl
|
||||
-I${MINDSPORE_HOME}/mindspore/lite/src/../nnacl/optimize"
|
||||
|
||||
REMOVE_LISTS_STR=""
|
||||
getDeep() {
|
||||
map_files=$(gcc -MM ${2} ${DEFINE_STR} ${HEADER_LOCATION})
|
||||
# first is *.o second is *.cc
|
||||
array_deep=($(echo ${map_files} | awk -F '\' '{for(i=3;i<=NF;i++){print $i}}' | grep -E 'src/runtime|nnacl' | egrep -v ${REMOVE_LISTS_STR}))
|
||||
for array_deep_file in ${array_deep[@]}; do
|
||||
# only add existing files
|
||||
if [[ -e ${array_deep_file%h*}cc ]]; then
|
||||
file_split=$(echo ${array_deep_file} | awk -F '/' '{print $NF}')
|
||||
echo "${1},${3},${file_split%h*}cc.o" >>${MAPPING_OUTPUT_FILE_NAME_TMP}
|
||||
fi
|
||||
if [[ -e ${array_deep_file%h*}c ]]; then
|
||||
file_split=$(echo ${array_deep_file} | awk -F '/' '{print $NF}')
|
||||
echo "${1},${3},${file_split%h*}c.o" >>${MAPPING_OUTPUT_FILE_NAME_TMP}
|
||||
fi
|
||||
done
|
||||
}
|
||||
getOpsFile() {
|
||||
echo "start get operator mapping file $3"
|
||||
for type in ${ops_list[@]}; do
|
||||
# get mapping
|
||||
ret=$(egrep -r -l "$1${type}," $2)
|
||||
array=(${ret})
|
||||
for file in ${array[@]}; do
|
||||
# delete \n
|
||||
out_file=$(echo ${file} | awk -F '/' '{print $NF}')
|
||||
# concat schemaType + fileType + fileName append to files
|
||||
echo "${type},${3},${out_file}.o" >>${MAPPING_OUTPUT_FILE_NAME_TMP}
|
||||
map_files=$(gcc -MM ${file} ${DEFINE_STR} ${HEADER_LOCATION})
|
||||
# first is *.o second is *.cc
|
||||
array_file=($(echo ${map_files} | awk -F '\' '{for(i=3;i<=NF;i++){print $i}}' | grep -E 'src/runtime|nnacl' | egrep -v ${REMOVE_LISTS_STR}))
|
||||
for array_file in ${array_file[@]}; do
|
||||
# only add existing files
|
||||
if [[ -e ${array_file%h*}cc ]]; then
|
||||
getDeep ${type} ${array_file%h*}cc ${3} &
|
||||
array_file_split=$(echo ${array_file} | awk -F '/' '{print $NF}')
|
||||
echo "${type},${3},${array_file_split%h*}cc.o" >>${MAPPING_OUTPUT_FILE_NAME_TMP}
|
||||
fi
|
||||
if [[ -e ${array_file%h*}c ]]; then
|
||||
getDeep ${type} ${array_file%h*}c ${3} &
|
||||
array_file_split=$(echo ${array_file} | awk -F '/' '{print $NF}')
|
||||
echo "${type},${3},${array_file_split%h*}c.o" >>${MAPPING_OUTPUT_FILE_NAME_TMP}
|
||||
fi
|
||||
done
|
||||
done
|
||||
done
|
||||
}
|
||||
getCommonFile() {
|
||||
echo "start get common files"
|
||||
include_h=($(ls ${MINDSPORE_HOME}/mindspore/lite/include/*.h))
|
||||
src_files_h=($(ls ${MINDSPORE_HOME}/mindspore/lite/src/*.h))
|
||||
common_files_h=($(ls ${MINDSPORE_HOME}/mindspore/lite/src/common/*.h))
|
||||
runtime_files_h=($(ls ${MINDSPORE_HOME}/mindspore/lite/src/runtime/*.h))
|
||||
others_files=(
|
||||
${MINDSPORE_HOME}/mindspore/lite/src/populate/populate_register.h
|
||||
${MINDSPORE_HOME}/mindspore/lite/src/ops/primitive_c.h
|
||||
${MINDSPORE_HOME}/mindspore/lite/nnacl/nnacl_utils.h
|
||||
${MINDSPORE_HOME}/mindspore/lite/nnacl/pack.h
|
||||
${MINDSPORE_HOME}/mindspore/lite/src/runtime/kernel/arm/fp16/common_fp16.h
|
||||
)
|
||||
all_files_h=(${include_h[@]} ${src_files_h[@]} ${common_files_h[@]} ${runtime_files_h[@]} ${others_files[@]})
|
||||
|
||||
# concat regx
|
||||
REMOVE_LISTS_STR="${all_files_h[0]}"
|
||||
for val in ${all_files_h[@]:1}; do
|
||||
REMOVE_LISTS_STR="$REMOVE_LISTS_STR|$val"
|
||||
done
|
||||
|
||||
src_files=($(ls ${MINDSPORE_HOME}/mindspore/lite/src/*.cc))
|
||||
common_files=($(ls ${MINDSPORE_HOME}/mindspore/lite/src/common/*.cc))
|
||||
runtime_files_cc=($(ls ${MINDSPORE_HOME}/mindspore/lite/src/runtime/*.cc))
|
||||
runtime_files_c=($(ls ${MINDSPORE_HOME}/mindspore/lite/src/runtime/*.c))
|
||||
|
||||
# sava all assembly files
|
||||
assembly_files=("$(ls ${MINDSPORE_HOME}/mindspore/lite/nnacl/assembly/*/*.S)")
|
||||
others_files=(
|
||||
${MINDSPORE_HOME}/mindspore/lite/src/ops/primitive_c.cc
|
||||
${MINDSPORE_HOME}/mindspore/lite/nnacl/nnacl_utils.c
|
||||
${MINDSPORE_HOME}/mindspore/lite/nnacl/pack.c
|
||||
${MINDSPORE_HOME}/mindspore/lite/src/runtime/kernel/arm/fp16/common_fp16.cc
|
||||
${MINDSPORE_HOME}/mindspore/lite/src/ops/populate/arithmetic_populate.cc
|
||||
${MINDSPORE_HOME}/mindspore/lite/src/ops/populate/arithmetic_self_populate.cc
|
||||
)
|
||||
all_files=(${src_files[@]} ${common_files[@]} ${runtime_files_cc[@]} ${runtime_files_c[@]} ${others_files[@]} ${assembly_files[@]})
|
||||
|
||||
for file in ${all_files[@]}; do
|
||||
map_files=$(gcc -MM ${file} ${DEFINE_STR} ${HEADER_LOCATION})
|
||||
# first is *.o second is *.cc
|
||||
array_runtime=($(echo ${map_files} | awk -F '\' '{for(i=3;i<=NF;i++){print $i}}' | grep -v "flatbuffers" | egrep -v ${REMOVE_LISTS_STR}))
|
||||
# only add existing files
|
||||
for array_runtime_file in "${array_runtime[@]}"; do
|
||||
if [[ -e ${array_runtime_file%h*}cc && ! ${all_files[*]} =~ ${array_runtime_file%h*}cc ]]; then
|
||||
all_files=("${all_files[@]}" "${array_runtime_file%h*}cc")
|
||||
fi
|
||||
if [[ -e ${array_runtime_file%h*}c && ! ${all_files[*]} =~ ${array_runtime_file%h*}c ]]; then
|
||||
all_files=("${all_files[@]}" "${array_runtime_file%h*}c")
|
||||
fi
|
||||
done
|
||||
done
|
||||
for file in ${all_files[@]}; do
|
||||
file=$(echo ${file} | awk -F '/' '{print $NF}')
|
||||
echo "CommonFile,common,${file}.o" >>${MAPPING_OUTPUT_FILE_NAME_TMP} &
|
||||
done
|
||||
wait
|
||||
}
|
||||
|
||||
# automatically generate operator list
|
||||
generateOpsList() {
|
||||
echo "start generate operator list"
|
||||
ops=($(egrep "PrimitiveType_.* = " "${MINDSPORE_HOME}/mindspore/lite/build/schema/model_generated.h" | awk -F '_' '{print $2}' | awk -F ' ' '{print $1}'))
|
||||
|
||||
ops_num=$((${#ops[@]} - 3))
|
||||
echo "ops nums:${ops_num}"
|
||||
ops_list=${ops[@]:1:$ops_num}
|
||||
}
|
||||
echo "Start getting all file associations."
|
||||
generateOpsList
|
||||
getCommonFile
|
||||
# get src/ops
|
||||
getOpsFile "Registry\(schema::PrimitiveType_" "${MINDSPORE_HOME}/mindspore/lite/src/ops" "prototype" &
|
||||
getOpsFile "REG_KERNEL\(.*?, kNumberTypeFloat32, PrimitiveType_" "${MINDSPORE_HOME}/mindspore/lite/src/runtime/kernel/arm" "kNumberTypeFloat32" &
|
||||
getOpsFile "REG_KERNEL\(.*?, kNumberTypeFloat16, PrimitiveType_" "${MINDSPORE_HOME}/mindspore/lite/src/runtime/kernel/arm" "kNumberTypeFloat16" &
|
||||
getOpsFile "REG_KERNEL\(.*?, kNumberTypeInt8, PrimitiveType_" "${MINDSPORE_HOME}/mindspore/lite/src/runtime/kernel/arm" "kNumberTypeInt8" &
|
||||
wait
|
||||
echo "remove duplicate files"
|
||||
# remove duplicate files
|
||||
sort ${MAPPING_OUTPUT_FILE_NAME_TMP} | uniq >${MAPPING_OUTPUT_FILE_NAME}
|
||||
# modify file permissions to read-only
|
||||
[ -n "${MAPPING_OUTPUT_FILE_NAME_TMP}" ] && rm -f ${MAPPING_OUTPUT_FILE_NAME_TMP}
|
||||
chmod 444 ${MAPPING_OUTPUT_FILE_NAME}
|
||||
echo "Complete all tasks."
|
@ -0,0 +1,105 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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 "tools/lib_cropper/cropper_flags.h"
|
||||
#include <string>
|
||||
#include "tools/lib_cropper/cropper_utils.h"
|
||||
#include "src/common/file_utils.h"
|
||||
|
||||
namespace mindspore {
|
||||
namespace lite {
|
||||
namespace cropper {
|
||||
CropperFlags::CropperFlags() {
|
||||
AddFlag(&CropperFlags::package_file_, "packageFile", "The libmindspore-lite.a file that needs to be cropped", "");
|
||||
AddFlag(&CropperFlags::model_file_, "modelFile", "List of model files, separated by commas", "");
|
||||
AddFlag(&CropperFlags::model_folder_path_, "modelFolderPath", "Load all ms models in the folder", "");
|
||||
AddFlag(&CropperFlags::config_file_, "configFile", "The mapping configuration file path", "");
|
||||
AddFlag(&CropperFlags::output_file_, "outputFile", "Output library file path", "");
|
||||
}
|
||||
|
||||
int CropperFlags::Init(int argc, const char **argv) {
|
||||
if (argc == 1) {
|
||||
std::cout << this->Usage() << std::endl;
|
||||
return RET_SUCCESS_EXIT;
|
||||
}
|
||||
Option<std::string> err = this->ParseFlags(argc, argv);
|
||||
|
||||
if (err.IsSome()) {
|
||||
std::cerr << err.Get();
|
||||
std::cerr << this->Usage() << std::endl;
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
}
|
||||
|
||||
if (this->help) {
|
||||
std::cout << this->Usage() << std::endl;
|
||||
return RET_SUCCESS_EXIT;
|
||||
}
|
||||
|
||||
MS_LOG(INFO) << "packageFile = " << this->package_file_;
|
||||
MS_LOG(INFO) << "modelFile = " << this->model_file_;
|
||||
MS_LOG(INFO) << "modelFolderPath = " << this->model_folder_path_;
|
||||
MS_LOG(INFO) << "configFile = " << this->config_file_;
|
||||
MS_LOG(INFO) << "outputFile = " << this->output_file_;
|
||||
|
||||
if (this->package_file_.empty()) {
|
||||
std::cerr << "INPUT MISSING: packageFile is necessary" << std::endl;
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
} else {
|
||||
// Verify whether it is a static library file(.a)
|
||||
if (ValidFileSuffix(this->package_file_, "a") != RET_OK) {
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
}
|
||||
this->package_file_ = RealPath(this->package_file_.c_str());
|
||||
if (this->package_file_.empty()) {
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
if (this->model_file_.empty() && this->model_folder_path_.empty()) {
|
||||
std::cerr << "INPUT MISSING: modelFile or modelFolderPath is necessary" << std::endl;
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
} else if (!this->model_file_.empty() && !this->model_folder_path_.empty()) {
|
||||
std::cerr << "INPUT MISSING: modelFile and modelFolderPath must choose one" << std::endl;
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
} else if (!this->model_folder_path_.empty()) {
|
||||
this->model_folder_path_ = RealPath(this->model_folder_path_.c_str());
|
||||
if (this->model_folder_path_.empty()) {
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
if (this->config_file_.empty()) {
|
||||
std::cerr << "INPUT MISSING: configFile is necessary" << std::endl;
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
}
|
||||
this->config_file_ = RealPath(this->config_file_.c_str());
|
||||
if (this->config_file_.empty()) {
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
}
|
||||
|
||||
if (this->output_file_.empty()) {
|
||||
this->output_file_ = this->package_file_;
|
||||
}
|
||||
this->output_file_ = RealPath(this->output_file_.c_str());
|
||||
if (this->output_file_.empty()) {
|
||||
return RET_INPUT_PARAM_INVALID;
|
||||
}
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
} // namespace cropper
|
||||
} // namespace lite
|
||||
} // namespace mindspore
|
@ -0,0 +1,45 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef MINDSPORE_LITE_TOOLS_LIB_CROPPER_LIB_CROPPER_FLAGS_H
|
||||
#define MINDSPORE_LITE_TOOLS_LIB_CROPPER_LIB_CROPPER_FLAGS_H
|
||||
|
||||
#include <string>
|
||||
#include "tools/common/flag_parser.h"
|
||||
#include "ir/dtype/type_id.h"
|
||||
|
||||
namespace mindspore {
|
||||
namespace lite {
|
||||
namespace cropper {
|
||||
|
||||
class CropperFlags : public virtual mindspore::lite::FlagParser {
|
||||
public:
|
||||
CropperFlags();
|
||||
~CropperFlags() override = default;
|
||||
int Init(int argc, const char **argv);
|
||||
|
||||
public:
|
||||
std::string package_file_;
|
||||
std::string model_file_;
|
||||
std::string model_folder_path_;
|
||||
std::string config_file_;
|
||||
std::string output_file_;
|
||||
};
|
||||
} // namespace cropper
|
||||
} // namespace lite
|
||||
} // namespace mindspore
|
||||
|
||||
#endif
|
@ -0,0 +1,53 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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 "tools/lib_cropper/cropper_utils.h"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include "src/common/log_adapter.h"
|
||||
#include "include/errorcode.h"
|
||||
|
||||
namespace mindspore {
|
||||
namespace lite {
|
||||
namespace cropper {
|
||||
int ValidFileSuffix(const std::string &filename, const std::string &suffix) {
|
||||
std::string suffixStr = filename.substr(filename.find_last_of('.') + 1);
|
||||
if (suffix == suffixStr) {
|
||||
return RET_OK;
|
||||
} else {
|
||||
MS_LOG(ERROR) << "The file name suffix needs: " << suffix << ", but file is " << filename;
|
||||
return RET_ERROR;
|
||||
}
|
||||
}
|
||||
int ValidFile(std::ifstream &in_file, const char *file_path) {
|
||||
if (!in_file.good()) {
|
||||
std::cerr << "file: " << file_path << " is not exist" << std::endl;
|
||||
MS_LOG(ERROR) << "file: " << file_path << " is not exist";
|
||||
return RET_ERROR;
|
||||
}
|
||||
|
||||
if (!in_file.is_open()) {
|
||||
std::cerr << "file: " << file_path << " open failed" << std::endl;
|
||||
MS_LOG(ERROR) << "file: " << file_path << " open failed";
|
||||
in_file.close();
|
||||
return RET_ERROR;
|
||||
}
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
} // namespace cropper
|
||||
} // namespace lite
|
||||
} // namespace mindspore
|
@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef MINDSPORE_LITE_TOOLS_LIB_CROPPER_LIB_CROPPER_UTILS_H
|
||||
#define MINDSPORE_LITE_TOOLS_LIB_CROPPER_LIB_CROPPER_UTILS_H
|
||||
#include <string>
|
||||
namespace mindspore {
|
||||
namespace lite {
|
||||
namespace cropper {
|
||||
int ValidFileSuffix(const std::string &filename, const std::string &suffix);
|
||||
int ValidFile(std::ifstream &in_file, const char *file_path);
|
||||
} // namespace cropper
|
||||
} // namespace lite
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_LITE_TOOLS_CROPPER_CROPPER_UTILS_H
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef MINDSPORE_LITE_TOOLS_LIB_CROPPER_LIB_CROPPER_H_
|
||||
#define MINDSPORE_LITE_TOOLS_LIB_CROPPER_LIB_CROPPER_H_
|
||||
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "include/model.h"
|
||||
#include "tools/common/flag_parser.h"
|
||||
#include "src/common/file_utils.h"
|
||||
#include "src/common/utils.h"
|
||||
#include "include/lite_session.h"
|
||||
#include "tools/lib_cropper/cropper_flags.h"
|
||||
|
||||
namespace mindspore::lite::cropper {
|
||||
|
||||
class MS_API Cropper {
|
||||
public:
|
||||
explicit Cropper(CropperFlags *flags) : flags_(flags) {}
|
||||
|
||||
~Cropper() = default;
|
||||
|
||||
int RunCropper();
|
||||
|
||||
int ReadPackage();
|
||||
|
||||
int GetModelFiles();
|
||||
|
||||
int GetModelOps();
|
||||
|
||||
int GetOpMatchFiles();
|
||||
|
||||
int GetDiscardFileList();
|
||||
|
||||
int CutPackage();
|
||||
|
||||
std::vector<std::string> model_files_;
|
||||
std::vector<std::string> all_files_;
|
||||
std::set<std::string> archive_files_;
|
||||
std::vector<std::string> discard_files_;
|
||||
|
||||
std::set<schema::PrimitiveType> all_operators_;
|
||||
std::set<schema::PrimitiveType> int8_operators_;
|
||||
std::set<schema::PrimitiveType> fp16_operators_;
|
||||
std::set<schema::PrimitiveType> fp32_operators_;
|
||||
|
||||
private:
|
||||
CropperFlags *flags_;
|
||||
};
|
||||
|
||||
int MS_API RunCropper(int argc, const char **argv);
|
||||
} // namespace mindspore::lite::cropper
|
||||
#endif // MINDSPORE_LITE_TOOLS_CROPPER_CROPPER_H_
|
@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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 "tools/lib_cropper/lib_cropper.h"
|
||||
#include "include/version.h"
|
||||
|
||||
int main(int argc, const char **argv) {
|
||||
MS_LOG(INFO) << mindspore::lite::Version();
|
||||
return mindspore::lite::cropper::RunCropper(argc, argv);
|
||||
}
|
Loading…
Reference in new issue