提交 72b22554 编写于 作者: Y yejianwu

update config mode

上级 44a7cb24
...@@ -6,8 +6,6 @@ LIBMACE_SOURCE_DIR=`/bin/pwd` ...@@ -6,8 +6,6 @@ LIBMACE_SOURCE_DIR=`/bin/pwd`
INPUT_FILE_NAME="model_input" INPUT_FILE_NAME="model_input"
OUTPUT_FILE_NAME="model.out" OUTPUT_FILE_NAME="model.out"
OUTPUT_LIST_FILE="model.list" OUTPUT_LIST_FILE="model.list"
TF_MODEL_NAME="model.pb"
TF_MODEL_FILE_PATH=$TF_MODEL_FILE_DIR/$TF_MODEL_NAME
PHONE_DATA_DIR="/data/local/tmp/mace_run" PHONE_DATA_DIR="/data/local/tmp/mace_run"
KERNEL_DIR="${PHONE_DATA_DIR}/cl/" KERNEL_DIR="${PHONE_DATA_DIR}/cl/"
CODEGEN_DIR=${LIBMACE_SOURCE_DIR}/codegen CODEGEN_DIR=${LIBMACE_SOURCE_DIR}/codegen
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Must run at root dir of libmace project. # Must run at root dir of libmace project.
# python tools/mace_tools.py \ # python tools/mace_tools.py \
# --global_config=models/config \ # --config=models/config \
# --round=100 \ # --round=100 \
# --mode=all # --mode=all
...@@ -11,6 +11,7 @@ import os ...@@ -11,6 +11,7 @@ import os
import shutil import shutil
import subprocess import subprocess
import sys import sys
import yaml
from ConfigParser import ConfigParser from ConfigParser import ConfigParser
...@@ -33,17 +34,13 @@ def run_command(command): ...@@ -33,17 +34,13 @@ def run_command(command):
result.returncode, command)) result.returncode, command))
def get_libs(configs): def get_libs(target_abi, configs):
global_target_abi = ""
global_runtime = ""
runtime_list = [] runtime_list = []
for config in configs: for model_name in configs["models"]:
if global_target_abi == "": model_runtime = configs["models"][model_name]["runtime"]
global_target_abi = config["TARGET_ABI"] runtime_list.append(model_runtime.lower())
elif global_target_abi != config["TARGET_ABI"]:
raise Exception("Multiple TARGET_ABI found in config files!")
runtime_list.append(config["RUNTIME"])
global_runtime = ""
if "dsp" in runtime_list: if "dsp" in runtime_list:
global_runtime = "dsp" global_runtime = "dsp"
elif "gpu" in runtime_list: elif "gpu" in runtime_list:
...@@ -53,7 +50,7 @@ def get_libs(configs): ...@@ -53,7 +50,7 @@ def get_libs(configs):
else: else:
raise Exception("Not found available RUNTIME in config files!") raise Exception("Not found available RUNTIME in config files!")
libmace_name = "libmace-{}-{}".format(global_target_abi, global_runtime) libmace_name = "libmace-{}-{}".format(target_abi, global_runtime)
command = "bash tools/download_and_link_lib.sh " + libmace_name command = "bash tools/download_and_link_lib.sh " + libmace_name
run_command(command) run_command(command)
...@@ -89,10 +86,12 @@ def tuning_run(model_output_dir, running_round, tuning, production_mode): ...@@ -89,10 +86,12 @@ def tuning_run(model_output_dir, running_round, tuning, production_mode):
model_output_dir, running_round, int(tuning), int(production_mode)) model_output_dir, running_round, int(tuning), int(production_mode))
run_command(command) run_command(command)
def benchmark_model(model_output_dir): def benchmark_model(model_output_dir):
command = "bash tools/benchmark.sh {}".format(model_output_dir) command = "bash tools/benchmark.sh {}".format(model_output_dir)
run_command(command) run_command(command)
def run_model(model_output_dir, running_round): def run_model(model_output_dir, running_round):
tuning_run(model_output_dir, running_round, False, False) tuning_run(model_output_dir, running_round, False, False)
...@@ -150,79 +149,10 @@ def merge_libs_and_tuning_results(output_dir, model_output_dirs): ...@@ -150,79 +149,10 @@ def merge_libs_and_tuning_results(output_dir, model_output_dirs):
run_command(command) run_command(command)
def parse_sub_model_configs(model_dirs, global_configs):
model_configs = []
for model_dir in model_dirs:
model_config = {}
model_config_path = os.path.join(model_dir, "config")
if os.path.exists(model_config_path):
cf = ConfigParser()
# Preserve character case
cf.optionxform = str
cf.read(model_config_path)
if "configs" in cf.sections():
config_list = cf.items("configs")
for config_map in config_list:
model_config[config_map[0]] = config_map[1]
else:
raise Exception("No config msg found in {}".format(model_config_path))
else:
raise Exception("Config file '{}' not found".format(model_config_path))
model_config[tf_model_file_dir_key] = model_dir
for config_map in global_configs:
model_config[config_map[0]] = config_map[1]
model_configs.append(model_config)
return model_configs
def parse_model_configs(): def parse_model_configs():
config_parser = ConfigParser() with open(FLAGS.config) as f:
# Preserve character case configs = yaml.load(f)
config_parser.optionxform = str return configs
global_config_dir = os.path.dirname(FLAGS.global_config)
try:
config_parser.read(FLAGS.global_config)
config_sections = config_parser.sections()
model_dirs = []
model_output_map = {}
if ("models" in config_sections) and (config_parser.items("models")):
model_dirs_str = config_parser.get(
"models", "DIRECTORIES")
model_dirs_str = model_dirs_str.rstrip(
",")
# Remove repetition element
model_dirs = list(
set(model_dirs_str.split(",")))
for model_dir in model_dirs:
# Create output dirs
model_output_dir = FLAGS.output_dir + "/" + model_dir
model_output_map[model_dir] = model_output_dir
else:
model_dirs = [global_config_dir]
# Create output dirs
model_output_dir = FLAGS.output_dir + "/" + global_config_dir
model_output_map[global_config_dir] = model_output_dir
except Exception as e:
print("Error in read model path msg. Exception: {}".format(e))
return
global_configs = []
if "configs" in config_sections:
global_configs = config_parser.items("configs")
return parse_sub_model_configs(model_dirs, global_configs), model_output_map
def parse_args(): def parse_args():
...@@ -230,7 +160,7 @@ def parse_args(): ...@@ -230,7 +160,7 @@ def parse_args():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.register("type", "bool", lambda v: v.lower() == "true") parser.register("type", "bool", lambda v: v.lower() == "true")
parser.add_argument( parser.add_argument(
"--global_config", "--config",
type=str, type=str,
default="./tool/config", default="./tool/config",
help="The global config file of models.") help="The global config file of models.")
...@@ -246,7 +176,7 @@ def parse_args(): ...@@ -246,7 +176,7 @@ def parse_args():
def main(unused_args): def main(unused_args):
configs, model_output_map = parse_model_configs() configs = parse_model_configs()
if FLAGS.mode == "build" or FLAGS.mode == "all": if FLAGS.mode == "build" or FLAGS.mode == "all":
# Remove previous output dirs # Remove previous output dirs
...@@ -258,14 +188,23 @@ def main(unused_args): ...@@ -258,14 +188,23 @@ def main(unused_args):
if FLAGS.mode == "validate": if FLAGS.mode == "validate":
FLAGS.round = 1 FLAGS.round = 1
libmace_name = get_libs(configs) target_abi = configs["target_abi"]
libmace_name = get_libs(target_abi, configs)
# Transfer params by environment
os.environ["TARGET_ABI"] = target_abi
os.environ["EMBED_MODEL_DATA"] = str(configs["embed_model_data"])
os.environ["PROJECT_NAME"] = os.path.splitext(FLAGS.config)[0]
model_output_dirs = [] model_output_dirs = []
for config in configs: for model_name in configs["models"]:
# Transfer params by environment # Transfer params by environment
for key in config: os.environ["MODEL_TAG"] = model_name
os.environ[key] = config[key] model_config = configs["models"][model_name]
model_output_dir = model_output_map[config[tf_model_file_dir_key]] for key in model_config:
os.environ[key.upper()] = str(model_config[key])
model_output_dir = FLAGS.output_dir + "/" + target_abi + "/" + os.path.splitext(
model_config["tf_model_file_path"])[0]
model_output_dirs.append(model_output_dir) model_output_dirs.append(model_output_dir)
if FLAGS.mode == "build" or FLAGS.mode == "all": if FLAGS.mode == "build" or FLAGS.mode == "all":
...@@ -291,9 +230,10 @@ def main(unused_args): ...@@ -291,9 +230,10 @@ def main(unused_args):
validate_model(model_output_dir) validate_model(model_output_dir)
if FLAGS.mode == "build" or FLAGS.mode == "merge" or FLAGS.mode == "all": if FLAGS.mode == "build" or FLAGS.mode == "merge" or FLAGS.mode == "all":
merge_libs_and_tuning_results(FLAGS.output_dir, model_output_dirs) merge_libs_and_tuning_results(FLAGS.output_dir + "/" + target_abi,
model_output_dirs)
if __name__ == '__main__': if __name__ == "__main__":
FLAGS, unparsed = parse_args() FLAGS, unparsed = parse_args()
main(unused_args=[sys.argv[0]] + unparsed) main(unused_args=[sys.argv[0]] + unparsed)
...@@ -24,25 +24,25 @@ cp ${LIBMACE_SOURCE_DIR}/lib/hexagon/libhexagon_controller.so ${LIBMACE_BUILD_DI ...@@ -24,25 +24,25 @@ cp ${LIBMACE_SOURCE_DIR}/lib/hexagon/libhexagon_controller.so ${LIBMACE_BUILD_DI
LIBMACE_TEMP_DIR=`mktemp -d -t libmace.XXXX` LIBMACE_TEMP_DIR=`mktemp -d -t libmace.XXXX`
# Merge all libraries in to one # Merge all libraries in to one
echo "create ${LIBMACE_BUILD_DIR}/libmace/lib/libmace_with_models.a" > ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "create ${LIBMACE_BUILD_DIR}/libmace/lib/libmace_${PROJECT_NAME}.a" > ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
echo "addlib lib/mace/libmace.a" >> ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "addlib lib/mace/libmace.a" >> ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
echo "addlib lib/mace/libmace_prod.a" >> ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "addlib lib/mace/libmace_prod.a" >> ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
if [ x"TARGET_ABI" = x"host" ]; then if [ x"TARGET_ABI" = x"host" ]; then
echo "addlib bazel-bin/codegen/libgenerated_opencl_prod.pic.a" >> ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "addlib bazel-bin/codegen/libgenerated_opencl_prod.pic.a" >> ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
echo "addlib bazel-bin/codegen/libgenerated_tuning_params.pic.a" >> ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "addlib bazel-bin/codegen/libgenerated_tuning_params.pic.a" >> ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
else else
echo "addlib bazel-bin/codegen/libgenerated_opencl_prod.a" >> ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "addlib bazel-bin/codegen/libgenerated_opencl_prod.a" >> ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
echo "addlib bazel-bin/codegen/libgenerated_tuning_params.a" >> ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "addlib bazel-bin/codegen/libgenerated_tuning_params.a" >> ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
fi fi
for model_output_dir in ${MODEL_OUTPUT_DIRS_ARR[@]}; do for model_output_dir in ${MODEL_OUTPUT_DIRS_ARR[@]}; do
for lib in ${model_output_dir}/*.a; do for lib in ${model_output_dir}/*.a; do
echo "addlib ${lib}" >> ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "addlib ${lib}" >> ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
done done
done done
echo "save" >> ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "save" >> ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
echo "end" >> ${LIBMACE_TEMP_DIR}/libmace_with_models.mri echo "end" >> ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri
$ANDROID_NDK_HOME/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar \ $ANDROID_NDK_HOME/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar \
-M < ${LIBMACE_TEMP_DIR}/libmace_with_models.mri || exit 1 -M < ${LIBMACE_TEMP_DIR}/libmace_${PROJECT_NAME}.mri || exit 1
rm -rf ${LIBMACE_TEMP_DIR} rm -rf ${LIBMACE_TEMP_DIR}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册