1 /** 2 * Copyright 2022 Huawei Technologies Co., Ltd 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef MINDSPORE_LITE_TOOLS_CONVERTER_MICRO_CODER_CONFIG_H_ 18 #define MINDSPORE_LITE_TOOLS_CONVERTER_MICRO_CODER_CONFIG_H_ 19 20 #include <string> 21 #include <map> 22 #include <vector> 23 24 namespace mindspore::lite::micro { 25 enum Target { kX86 = 0, kCortex_M = 1, kARM32 = 2, kARM64 = 3, kAllTargets = 4, kTargetUnknown = 99 }; 26 enum CodeMode { Inference = 0, Train = 1, Code_Unknown = 99 }; 27 28 struct MicroParam { 29 std::string codegen_mode = "Inference"; 30 std::string target; 31 std::string changeable_weights_name; 32 bool enable_micro{false}; 33 bool support_parallel{false}; 34 bool debug_mode{false}; 35 std::string save_path; 36 std::string project_name; 37 bool is_last_model{false}; 38 bool keep_original_weight{false}; 39 std::vector<std::vector<std::string>> graph_inputs_template; 40 std::map<std::string, std::vector<std::string>> graph_inputs_origin_info; 41 std::vector<std::string> dynamic_symbols; 42 std::vector<size_t> dynamic_symbols_num; 43 std::map<std::string, std::vector<int>> dynamic_symbols_map; 44 std::vector<std::vector<std::vector<int>>> graph_inputs_shape_infos; 45 std::map<std::string, std::vector<std::vector<int>>> inputs_shape_by_scenes; 46 }; 47 48 class Configurator { 49 public: GetInstance()50 static Configurator *GetInstance() { 51 static Configurator configurator; 52 return &configurator; 53 } 54 set_code_path(const std::string & code_path)55 void set_code_path(const std::string &code_path) { code_path_ = code_path; } code_path()56 std::string code_path() const { return code_path_; } 57 set_target(Target target)58 void set_target(Target target) { target_ = target; } target()59 Target target() const { return target_; } 60 set_code_mode(CodeMode code_mode)61 void set_code_mode(CodeMode code_mode) { code_mode_ = code_mode; } code_mode()62 CodeMode code_mode() const { return code_mode_; } 63 set_debug_mode(bool debug)64 void set_debug_mode(bool debug) { debug_mode_ = debug; } debug_mode()65 bool debug_mode() const { return debug_mode_; } 66 set_support_parallel(bool parallel)67 void set_support_parallel(bool parallel) { support_parallel_ = parallel; } support_parallel()68 bool support_parallel() const { return support_parallel_; } 69 set_proj_dir(std::string dir)70 void set_proj_dir(std::string dir) { proj_dir_ = dir; } proj_dir()71 std::string proj_dir() const { return proj_dir_; } 72 set_keep_original_weight(bool keep_weight)73 void set_keep_original_weight(bool keep_weight) { keep_original_weight_ = keep_weight; } keep_original_weight()74 bool keep_original_weight() const { return keep_original_weight_; } 75 set_changeable_weights_name(const std::string & weights_name)76 void set_changeable_weights_name(const std::string &weights_name) { changeable_weights_name_ = weights_name; } changeable_weights_name()77 const std::string &changeable_weights_name() const { return changeable_weights_name_; } 78 set_dynamic_shape(bool dynamic_shape)79 void set_dynamic_shape(bool dynamic_shape) { dynamic_shape_ = dynamic_shape; } dynamic_shape()80 bool dynamic_shape() const { return dynamic_shape_; } 81 set_dynamic_symbols(const std::vector<std::string> & dynamic_symbols)82 void set_dynamic_symbols(const std::vector<std::string> &dynamic_symbols) { dynamic_symbols_ = dynamic_symbols; } dynamic_symbols()83 const std::vector<std::string> &dynamic_symbols() const { return dynamic_symbols_; } 84 set_dynamic_symbols_num(const std::vector<size_t> & dynamic_symbols_num)85 void set_dynamic_symbols_num(const std::vector<size_t> &dynamic_symbols_num) { 86 dynamic_symbols_num_ = dynamic_symbols_num; 87 } dynamic_symbols_num()88 const std::vector<size_t> &dynamic_symbols_num() const { return dynamic_symbols_num_; } 89 set_dynamic_symbols_map(const std::map<std::string,std::vector<int>> & dynamic_symbols_map)90 void set_dynamic_symbols_map(const std::map<std::string, std::vector<int>> &dynamic_symbols_map) { 91 dynamic_symbols_map_ = dynamic_symbols_map; 92 } dynamic_symbols_map()93 const std::map<std::string, std::vector<int>> &dynamic_symbols_map() const { return dynamic_symbols_map_; } 94 set_user_graph_inputs_template(const std::vector<std::vector<std::string>> & graph_inputs_template)95 void set_user_graph_inputs_template(const std::vector<std::vector<std::string>> &graph_inputs_template) { 96 user_graph_inputs_template_ = graph_inputs_template; 97 } user_graph_inputs_template()98 const std::vector<std::vector<std::string>> &user_graph_inputs_template() const { 99 return user_graph_inputs_template_; 100 } 101 set_graph_inputs_shape_infos(const std::vector<std::vector<std::vector<int>>> & graph_inputs_shape_infos)102 void set_graph_inputs_shape_infos(const std::vector<std::vector<std::vector<int>>> &graph_inputs_shape_infos) { 103 graph_inputs_shape_infos_ = graph_inputs_shape_infos; 104 } graph_inputs_shape_infos()105 const std::vector<std::vector<std::vector<int>>> &graph_inputs_shape_infos() { return graph_inputs_shape_infos_; } 106 107 private: 108 Configurator() = default; 109 ~Configurator() = default; 110 std::string code_path_; 111 Target target_{kTargetUnknown}; 112 CodeMode code_mode_{Code_Unknown}; 113 bool support_parallel_{false}; 114 bool debug_mode_{false}; 115 bool keep_original_weight_{false}; 116 bool dynamic_shape_{false}; 117 std::string proj_dir_; 118 std::string changeable_weights_name_; 119 std::vector<std::string> dynamic_symbols_; 120 std::vector<size_t> dynamic_symbols_num_; 121 std::map<std::string, std::vector<int>> dynamic_symbols_map_; 122 std::vector<std::vector<std::vector<int>>> graph_inputs_shape_infos_; 123 std::vector<std::vector<std::string>> user_graph_inputs_template_; 124 }; 125 } // namespace mindspore::lite::micro 126 #endif // MICRO_CODER_CONFIG_H 127