• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright 2022-2023 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 #ifndef MINDSPORE_INCLUDE_API_MODEL_PARALLEL_RUNNER_H
17 #define MINDSPORE_INCLUDE_API_MODEL_PARALLEL_RUNNER_H
18 #include <vector>
19 #include <memory>
20 #include <utility>
21 #include <map>
22 #include <string>
23 #include "include/api/status.h"
24 #include "include/api/context.h"
25 namespace mindspore {
26 /// \brief The RunnerConfig class  is used to store environment variables during execution
27 /// management.
28 class MS_API RunnerConfig {
29  public:
30   struct Data;
31   RunnerConfig();
32   ~RunnerConfig();
33 
34   /// \brief Set the number of workers at runtime. Only valid for ModelParallelRunner.
35   ///
36   /// \param[in] workers_num the number of workers at runtime.
37   void SetWorkersNum(int32_t workers_num);
38 
39   /// \brief Get the current operators parallel workers number setting. Only valid for ModelParallelRunner.
40   ///
41   /// \return The current operators parallel workers number setting.
42   int32_t GetWorkersNum() const;
43 
44   /// \brief Set the context at runtime. Only valid for ModelParallelRunner.
45   ///
46   /// \param[in] context store environment variables at runtime.
47   void SetContext(const std::shared_ptr<Context> &context);
48 
49   /// \brief Get the current context setting. Only valid for ModelParallelRunner.
50   ///
51   /// \return The current operators context setting.
52   std::shared_ptr<Context> GetContext() const;
53 
54   /// \brief Set the config before runtime. Only valid for ModelParallelRunner.
55   ///
56   /// \param[in] section The category of the configuration parameter.
57   /// \param[in] config store environment variables before runtime.
58   inline void SetConfigInfo(const std::string &section, const std::map<std::string, std::string> &config);
59 
60   /// \brief Get the current config setting. Only valid for ModelParallelRunner.
61   ///
62   /// \return The current config setting.
63   inline std::map<std::string, std::map<std::string, std::string>> GetConfigInfo() const;
64 
65   /// \brief Set the config path before runtime. Only valid for ModelParallelRunner.
66   ///
67   /// \param[in] config_path The path of the configuration parameter.
68   inline void SetConfigPath(const std::string &config_path);
69 
70   /// \brief Get the current config path. Only valid for ModelParallelRunner.
71   ///
72   /// \return The current config path.
73   inline std::string GetConfigPath() const;
74 
75   /// \brief Set the device id list at runtime, make the model run on different npu/gpu devices. Only valid for
76   /// ModelParallelRunner.
77   ///
78   /// \param[in] device_ids The device id list at runtime.
79   void SetDeviceIds(const std::vector<uint32_t> &device_ids);
80 
81   /// \brief Get the device id list at runtime. Only valid for ModelParallelRunner.
82   ///
83   /// \return The device id list.
84   std::vector<uint32_t> GetDeviceIds() const;
85 
86  private:
87   void SetConfigInfo(const std::vector<char> &section, const std::map<std::vector<char>, std::vector<char>> &config);
88   std::map<std::vector<char>, std::map<std::vector<char>, std::vector<char>>> GetConfigInfoChar() const;
89   void SetConfigPath(const std::vector<char> &config_path);
90   std::vector<char> GetConfigPathChar() const;
91   std::shared_ptr<Data> data_ = nullptr;
92 };
93 
SetConfigInfo(const std::string & section,const std::map<std::string,std::string> & config)94 void RunnerConfig::SetConfigInfo(const std::string &section, const std::map<std::string, std::string> &config) {
95   SetConfigInfo(StringToChar(section), MapStringToVectorChar(config));
96 }
97 
GetConfigInfo()98 std::map<std::string, std::map<std::string, std::string>> RunnerConfig::GetConfigInfo() const {
99   return MapMapCharToString(GetConfigInfoChar());
100 }
101 
SetConfigPath(const std::string & config_path)102 void RunnerConfig::SetConfigPath(const std::string &config_path) { SetConfigPath(StringToChar(config_path)); }
103 
GetConfigPath()104 std::string RunnerConfig::GetConfigPath() const { return CharToString(GetConfigPathChar()); }
105 
106 class ModelParallelRunnerImpl;
107 
108 /// \brief The ModelParallelRunner class is used to define a MindSpore ModelParallelRunner, facilitating Model
109 /// management.
110 class MS_API ModelParallelRunner {
111  public:
112   ModelParallelRunner();
113   ~ModelParallelRunner();
114 
115   /// \brief build a model parallel runner from model path so that it can run on a device. Supports importing the `ms`
116   /// model (exported by the `converter_lite` tool) and the `mindir` model (exported by MindSpore or exported by the
117   /// `converter_lite` tool). The support for the `ms` model will be removed in future iterations, and it is recommended
118   /// to use the `mindir` model for inference. When using the `ms` model for inference, please keep the suffix name of
119   /// the model as `.ms`, otherwise it will not be recognized.
120   ///
121   /// \param[in] model_path Define the model path.
122   /// \param[in] runner_config Define the config used to store options during model pool init.
123   ///
124   /// \return Status.
125   inline Status Init(const std::string &model_path, const std::shared_ptr<RunnerConfig> &runner_config = nullptr);
126 
127   /// \brief build a model parallel runner from model buffer so that it can run on a device. This interface only
128   /// supports passing in `mindir` model file data.
129   ///
130   /// \param[in] model_data Define the buffer read from a model file.
131   /// \param[in] data_size Define bytes number of model buffer.
132   /// \param[in] runner_config Define the config used to store options during model pool init.
133   ///
134   /// \return Status.
135   Status Init(const void *model_data, const size_t data_size,
136               const std::shared_ptr<RunnerConfig> &runner_config = nullptr);
137 
138   /// \brief Obtains all input tensors information of the model.
139   ///
140   /// \return The vector that includes all input tensors.
141   std::vector<MSTensor> GetInputs();
142 
143   /// \brief Obtains all output tensors information of the model.
144   ///
145   /// \return The vector that includes all output tensors.
146   std::vector<MSTensor> GetOutputs();
147 
148   /// \brief Inference ModelParallelRunner.
149   ///
150   /// \param[in] inputs A vector where model inputs are arranged in sequence.
151   /// \param[out] outputs Which is a pointer to a vector. The model outputs are filled in the container in sequence.
152   /// \param[in] before CallBack before predict.
153   /// \param[in] after CallBack after predict.
154   ///
155   /// \return Status.
156   Status Predict(const std::vector<MSTensor> &inputs, std::vector<MSTensor> *outputs,
157                  const MSKernelCallBack &before = nullptr, const MSKernelCallBack &after = nullptr);
158 
159  private:
160   Status Init(const std::vector<char> &model_path, const std::shared_ptr<RunnerConfig> &runner_config);
161   std::shared_ptr<ModelParallelRunnerImpl> model_parallel_runner_impl_ = nullptr;
162 };
163 
Init(const std::string & model_path,const std::shared_ptr<RunnerConfig> & runner_config)164 Status ModelParallelRunner::Init(const std::string &model_path, const std::shared_ptr<RunnerConfig> &runner_config) {
165   return Init(StringToChar(model_path), runner_config);
166 }
167 }  // namespace mindspore
168 #endif  // MINDSPORE_INCLUDE_API_MODEL_PARALLEL_RUNNER_H
169