|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878 |
- /**
- * Copyright 2019-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 <map>
- #include <fstream>
- #include <unordered_map>
- #include <google/protobuf/io/coded_stream.h>
- #include <google/protobuf/io/zero_copy_stream_impl.h>
-
- #include "mmpa/mmpa_api.h"
- #include "common/debug/log.h"
- #include "common/debug/memory_dumper.h"
- #include "common/types.h"
- #include "common/util.h"
- #include "common/string_util.h"
- #include "common/properties_manager.h"
- #include "common/model_parser/base.h"
- #include "graph/model.h"
- #include "cce/dnn.h"
- #include "ge/ge_api_types.h"
- #include "framework/common/ge_types.h"
- #include "graph/utils/op_desc_utils.h"
- #include "common/profiling/profiling_manager.h"
-
- using domi::domiTensorFormat_t;
- using namespace cce;
- using namespace ge;
-
- struct PROC_PARAM {
- uint8_t *model_name;
-
- // ISV Ek buffer
- uint8_t *model_key;
- uint32_t model_key_len;
-
- // ISV root certificate buffer
- uint8_t *root_cert;
- uint32_t root_cert_len;
-
- // ISV private key buffer
- uint8_t *pri_key;
- uint32_t pri_key_len;
-
- // Raw AI Module Image buffer
- uint8_t *ai_image;
- uint32_t ai_image_len;
-
- // ISV HW key buffer
- uint8_t *hw_key;
- uint32_t hw_key_len;
- };
-
- #ifdef __cplusplus
- extern "C" {
- #endif
- using namespace ge;
- namespace {
- const char FMK_STATUS_FILE_DIR_ENV[] = "FMK_STATUS_FILE_DIR";
- const char JOBSTATE_FILE_NAME[] = "jobstateupdate_framework";
- const char HCOM_DETECT_FILE_NAME[] = "hcom_detection_result";
- const char FILE_SEPARATE[] = "/";
- } // namespace
-
- #ifdef __cplusplus
- }
- #endif
-
- namespace ge {
- struct GeModelPartition {
- ModelPartitionType type_ = MODEL_DEF;
- uint8_t *data_ = nullptr;
- size_t size_ = 0;
-
- GeModelPartition() = default;
-
- GeModelPartition(const GeModelPartition &partition){};
-
- GeModelPartition &operator=(const GeModelPartition &partition) = delete;
-
- ~GeModelPartition() {
- if (data_ != nullptr) {
- delete[] data_;
- data_ = nullptr;
- }
- }
-
- Status SetData(uint8_t *data, size_t size) {
- size_ = size;
- data_ = new (std::nothrow) uint8_t[size]();
- errno_t err;
- err = memcpy_s(data_, size_, data, size);
- if (err) {
- GELOGE(ge::FAILED, "[GeModel Partition] Error occur when copy GeModel Partition data.");
- return FAILED;
- }
- return SUCCESS;
- }
-
- Status SetType(ModelPartitionType type) {
- type_ = type;
- return SUCCESS;
- }
- };
- struct OmFileContext {
- vector<GeModelPartition> partition_datas_;
- vector<char> partition_table_;
- uint32_t model_data_len_;
- };
-
- class SubGraphInfo;
- using SubGraphInfoPtr = std::shared_ptr<ge::SubGraphInfo>;
-
- using GeModelPartitionPtr = std::shared_ptr<GeModelPartition>;
- using ModelPtr = std::shared_ptr<ge::Model>;
- class GeModel {
- public:
- explicit GeModel(const ModelPtr &model_ptr);
- ~GeModel() = default;
- GeModel(const GeModel &other) = delete;
- GeModel &operator=(const GeModel &other) = delete;
-
- ModelPtr GetModelPtr() const;
- Status AddPartition(uint8_t *data, size_t size, ModelPartitionType type);
- Status GetPartition(ModelPartitionType type, GeModelPartitionPtr &partition);
- uint8_t GetPlatformType() const;
- void SetPlatformType(const uint8_t platform_type) { platform_type_ = platform_type; }
-
- private:
- std::map<ModelPartitionType, GeModelPartitionPtr> partitions_;
- ModelPtr model_ = nullptr;
- uint8_t platform_type_ = {0};
- };
- using GeModelPtr = std::shared_ptr<ge::GeModel>;
-
- GeModel::GeModel(const ModelPtr &model_ptr) { this->model_ = model_ptr; }
-
- ModelPtr GeModel::GetModelPtr() const { return this->model_; }
-
- uint8_t GeModel::GetPlatformType() const { return platform_type_; }
-
- Status GeModel::AddPartition(uint8_t *data, size_t size, ModelPartitionType type) {
- if (size == 0) {
- return FAILED;
- }
-
- if (data == nullptr) {
- return FAILED;
- }
-
- auto iter = partitions_.find(type);
- if (iter != partitions_.end()) {
- return FAILED;
- }
-
- GeModelPartitionPtr partition = nullptr;
- GE_MAKE_SHARED(partition = std::make_shared<ge::GeModelPartition>(), return FAILED);
- Status ret = partition->SetType(type);
- if (ret != SUCCESS) {
- return FAILED;
- }
- ret = partition->SetData(data, size);
- if (ret != SUCCESS) {
- return FAILED;
- }
-
- partitions_.insert(std::pair<ModelPartitionType, GeModelPartitionPtr>(type, partition));
- return SUCCESS;
- }
-
- Status GeModel::GetPartition(ModelPartitionType type, GeModelPartitionPtr &partition) {
- auto iter = partitions_.find(type);
- if (iter == partitions_.end()) {
- return FAILED;
- }
-
- partition = iter->second;
- return SUCCESS;
- }
- class OmFileSaveHelper {
- public:
- OmFileSaveHelper();
- ~OmFileSaveHelper();
- vector<GeModelPartition> &GetModelPartitions();
- ModelPartitionTable *GetPartitionTable();
- ModelFileHeader model_header_;
- ModelFileHeader &GetModelFileHeader() { return model_header_; }
- void AddPartition(GeModelPartition &partition);
-
- private:
- OmFileContext context_;
- };
-
- OmFileSaveHelper::OmFileSaveHelper() {}
-
- OmFileSaveHelper::~OmFileSaveHelper() {}
-
- vector<GeModelPartition> &OmFileSaveHelper::GetModelPartitions() {
- static std::vector<GeModelPartition> tmp;
- return tmp;
- }
-
- ModelPartitionTable *OmFileSaveHelper::GetPartitionTable() { return nullptr; }
-
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void OmFileSaveHelper::AddPartition(GeModelPartition &partition) {
- context_.partition_datas_.push_back(partition);
- context_.model_data_len_ += partition.size_;
- }
- class ModelBuilder {
- public:
- ModelBuilder(ge::ComputeGraphPtr compute_graph, const std::vector<SubGraphInfoPtr> &subgraphs,
- const std::map<std::string, int> &stream_max_parallel_num, bool hcom_parallel, int mode);
- virtual ~ModelBuilder();
- Status BuildModel(ge::Model &model_def);
- Status SaveWeightsToModel(ge::Model &model);
- Status SaveDataToModel(ge::Model &model, ge::GeModel &ge_model);
- Status PreBuildModel();
- Status BuildModelForGetTask(ge::Model &model_def);
- ge::Buffer GetWeightBuffer() const;
- void SetModelVersion(ge::Model &model_def);
-
- public:
- ge::Buffer weight_buffer_;
- };
-
- ModelBuilder::ModelBuilder(ge::ComputeGraphPtr compute_graph, const std::vector<SubGraphInfoPtr> &subgraphs,
- const std::map<std::string, int> &stream_max_parallel_num, bool hcom_parallel, int mode) {
- weight_buffer_ = ge::Buffer(4100000);
- }
-
- ModelBuilder::~ModelBuilder() {}
-
- Status ModelBuilder::SaveWeightsToModel(ge::Model &model) { return SUCCESS; }
-
- Status ModelBuilder::BuildModel(ge::Model &model_def) { return SUCCESS; }
-
- Status ModelBuilder::SaveDataToModel(ge::Model &model, ge::GeModel &ge_model) { return SUCCESS; }
-
- Status ModelBuilder::PreBuildModel() { return SUCCESS; }
-
- Status ModelBuilder::BuildModelForGetTask(ge::Model &model_def) { return SUCCESS; }
-
- void ModelBuilder::SetModelVersion(ge::Model &model_def) { return; }
-
- ge::Buffer ModelBuilder::GetWeightBuffer() const { return ge::Buffer(4100000); }
-
- } // namespace ge
-
- using ProcParam = struct PROC_PARAM;
-
- namespace ge {
- #include <iostream>
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_N = 0;
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_C = 1;
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_H = 2;
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NCHW_DIM_W = 3;
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_N = 0;
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_H = 1;
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_W = 2;
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY extern const uint32_t NHWC_DIM_C = 3;
-
- const uint32_t MODEL_FILE_MAGIC_NUM = 0x444F4D49;
- const uint32_t MODEL_FILE_HEAD_LEN = 256;
- const uint32_t MODEL_VERSION = 0x10000000;
- const int MAX_FILE_SIZE_LIMIT = INT_MAX;
- bool FC_WEIGHT_COMPRESS_FLAG = false;
-
- bool ReadBytesFromBinaryFile(const char *file_name, char **buffer, int &length) {
- length = 10;
- *buffer = new (std::nothrow) char[10]();
- GE_CHK_BOOL_TRUE_EXEC_RET_STATUS(*buffer == nullptr, false, "new an object failed.");
- return true;
- }
- bool ReadProtoFromText(const char *file, google::protobuf::Message *message) {
- GE_CHK_BOOL_TRUE_EXEC_WITH_LOG((nullptr == file || nullptr == message), return false,
- "incorrect parameter. nullptr == file || nullptr == message");
- string real_path = RealPath(file);
- GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(real_path.empty(), return false, "proto file path '%s' not valid", file);
- GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(GetFileLength(real_path.c_str()) == -1, return false, "file size not valid.");
- std::ifstream fs(real_path.c_str(), std::ifstream::in);
-
- if (!fs.is_open()) {
- GELOGE(ge::FAILED, "proto file '%s' open fail.", file);
- return false;
- }
- google::protobuf::io::IstreamInputStream input(&fs);
- bool ret = google::protobuf::TextFormat::Parse(&input, message);
- GE_IF_BOOL_EXEC(ret != true,
- GELOGI("call [google::protobuf::TextFormat::Parse] func ret fail, please check your text file."));
- fs.close();
- return ret;
- }
-
- uint64_t GetCurrentTimestap() { return 0; }
-
- // get length of file
- long GetFileLength(const std::string &input_file) {
- GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(input_file.empty(), return -1, "input_file path is null.");
- string real_path = RealPath(input_file.c_str());
-
- GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(real_path.empty(), return -1, "input_file path '%s' not valid", input_file.c_str());
- unsigned long long file_length = 0;
- GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(mmGetFileSize(input_file.c_str(), &file_length) != EN_OK, return -1,
- "open file failed.");
- GE_CHK_BOOL_TRUE_EXEC_WITH_LOG((file_length <= 0), return -1, "file length <= 0, not valid.");
- GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(file_length > MAX_FILE_SIZE_LIMIT, return -1, "file size %ld is out of limit: %d.",
- file_length, MAX_FILE_SIZE_LIMIT);
- return file_length;
- }
- string RealPath(const char *path) {
- string s = path;
- if (s.size() >= PATH_MAX) {
- return "";
- }
- if (s == "." || s == "1") {
- return path;
- // for insert_aipp_op unittest
- } else if (s.substr(0, 3) == "llt") {
- return path;
- } else {
- return "22";
- }
- }
-
- bool CheckInputPathValid(const string &file_path) { return true; }
- bool ReadProtoFromArray(const void *data, int size, Message *proto) { return true; }
-
- struct ModelPartition {
- ModelPartitionType type;
- uint8_t *data = 0;
- uint32_t size = 0;
- };
-
- class InsertNewOpUtil {
- public:
- InsertNewOpUtil();
- ~InsertNewOpUtil();
- Status InsertNewOps(const ComputeGraphPtr &graph);
- Status InsertAippOps(ge::ComputeGraphPtr graph, std::string &aipp_config_path);
- Status Parse(const char *conf_path);
- };
-
- InsertNewOpUtil::InsertNewOpUtil() {}
-
- Status InsertNewOpUtil::InsertNewOps(const ComputeGraphPtr &graph) { return SUCCESS; }
-
- Status InsertNewOpUtil::InsertAippOps(ge::ComputeGraphPtr graph, std::string &aipp_config_path) { return SUCCESS; }
-
- Status InsertNewOpUtil::Parse(const char *conf_path) { return SUCCESS; }
-
- Status InitOME() { return SUCCESS; }
- class GraphOptimizer {
- public:
- Status Optimize();
- Status OptimizeAfterCal();
- Status AdjustDataOpDesc();
- Status InsertTransOp();
- Status FusionFmkop();
- Status Optimize4Cloud();
- Status Optimize4FlowCtrl();
- Status OptimizeBeforeBuild();
- };
- Status GraphOptimizer::Optimize() { return SUCCESS; }
-
- Status Init(Options options) { return SUCCESS; }
-
- Status Shutdown(Options options) { return SUCCESS; }
-
- class Session {
- public:
- // singleton
- static Session *Instance();
- const uint32_t &DeviceId() const;
- };
-
- const uint32_t &Session::DeviceId() const { return 0; }
-
- Session *Session::Instance() {
- static Session instance;
- return &instance;
- }
- struct OmgContext {
- domiTensorFormat_t format;
-
- // get input format from cmd
- std::unordered_map<std::string, domiTensorFormat_t> input_nodes_format_map;
- std::vector<domiTensorFormat_t> output_formats;
-
- // user-designate input dims
- std::vector<std::pair<std::string, std::vector<int64_t>>> user_input_dims;
- // global input dims
- std::unordered_map<std::string, std::vector<int64_t>> input_dims;
-
- // solve rename op e.g: Detectionoutput:SsdDetectiontOutput
- std::map<std::string, std::string> op_conf_map;
- // save output node of network: key is op name, value = index, index is the output index of op
- std::map<std::string, std::vector<int32_t>> out_nodes_map;
- // user-designate out nodes (this is used for determing the orders)
- std::vector<std::pair<std::string, int32_t>> user_out_nodes;
- // save the path of cutsom_aicpu
- std::vector<std::string> aicpu_op_run_paths;
- // save ddk
- std::string ddk_version;
- // save format
- domiTensorFormat_t net_format;
-
- FrameworkType type;
- // RunMode run_mode;
- bool train_flag = false;
-
- std::string output_type;
-
- /// save the name of network
- /// eg:faster-rcnn, based on FirstStageProcessor after scope_fusion is faster-rcnn
- /// then reorder conv+reshape of FirstStageBoxPredictor/BoxEncodingPredictor
- /// need to delete op of reshape
- std::string net_name;
- };
- } // namespace ge
-
- namespace domi {
- ge::OmgContext &GetContext() {
- static ge::OmgContext tmp;
- return tmp;
- }
- } // namespace domi
-
- namespace ge {
- class OpUtils {
- public:
- static Status InitTensorDescriptor(const GeTensorDesc &tensor, ccTensorDescriptor_t &cc_tensor);
- static Status InitTensorDescriptor(int32_t format, int32_t data_type, const std::vector<int64_t> &dim,
- ccTensorDescriptor_t &cc_tensor, uint32_t real_dim_cnt);
- static void DestroyTensorDescriptor(ccTensorDescriptor_t &cc_tensor);
- };
- Status OpUtils::InitTensorDescriptor(const GeTensorDesc &tensor, ccTensorDescriptor_t &cc_tensor) {
- ccCreatePoolingMaskDescriptor(&cc_tensor);
- return SUCCESS;
- }
- Status OpUtils::InitTensorDescriptor(int32_t format, int32_t data_type, const std::vector<int64_t> &dim,
- ccTensorDescriptor_t &cc_tensor, uint32_t real_dim_cnt) {
- Status ret = SUCCESS;
- return ret;
- }
-
- class FileSaver {
- public:
- Status SaveToFile(const string &file_path, ModelFileHeader &model_file_header,
- ModelPartitionTable &model_partition_table, const std::vector<ModelPartition> &partition_datas);
- Status SaveToFileWithEncrypt(const std::string file_path, const ProcParam proc_param,
- const ModelFileHeader *model_file_header, bool check_sum);
- };
-
- Status FileSaver::SaveToFile(const string &file_path, ModelFileHeader &model_file_header,
- ModelPartitionTable &model_partition_table,
- const std::vector<ModelPartition> &partition_datas) {
- return SUCCESS;
- }
-
- Status FileSaver::SaveToFileWithEncrypt(const std::string file_path, const ProcParam proc_param,
- const ModelFileHeader *model_file_header, bool check_sum) {
- return SUCCESS;
- }
-
- class ModelSaver : public FileSaver {};
-
- FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY void OpUtils::DestroyTensorDescriptor(
- ccTensorDescriptor_t &cc_tensor) {
- if (nullptr != cc_tensor) {
- ccStatus_t ret = ccDestroyTensorDescriptor(&cc_tensor);
- GE_LOGE_IF(CC_STATUS_SUCCESS != ret, "ccDestroyTensorDescriptor failed. ret = %d", ret);
- cc_tensor = nullptr;
- }
- }
-
- } // namespace ge
-
- namespace domi {
- class OpRegistrationData {};
-
- class OpRegistry {
- public:
- static OpRegistry *Instance();
- std::vector<OpRegistrationData> registration_datas;
-
- ImplyType GetImplyType(const std::string &op_type);
- void GetOpTypeByImplyType(std::vector<std::string> &vec_op_type, const ImplyType &imply_type);
- };
-
- OpRegistry *OpRegistry::Instance() {
- static OpRegistry instance;
- return &instance;
- }
-
- void OpRegistry::GetOpTypeByImplyType(std::vector<std::string> &vec_op_type, const ImplyType &imply_type) {
- if (imply_type == ImplyType::AI_CPU) {
- vec_op_type.push_back("square");
- }
- }
-
- class OpRegistrationTbe {
- public:
- static OpRegistrationTbe *Instance();
-
- bool Finalize(OpRegistrationData ®_data, bool is_train);
- };
-
- OpRegistrationTbe *OpRegistrationTbe::Instance() {
- static OpRegistrationTbe instance;
- return &instance;
- }
-
- bool OpRegistrationTbe::Finalize(OpRegistrationData ®_data, bool is_train) { return true; }
- } // namespace domi
-
- namespace ge {
- class GraphPrepare {
- private:
- Status OptimizeForPreprocess(ge::ComputeGraphPtr &compute_graph);
- };
-
- Status GraphPrepare::OptimizeForPreprocess(ge::ComputeGraphPtr &compute_graph) { return SUCCESS; }
- } // namespace ge
-
- namespace ge {
-
- Status GetOriginalType(const ge::NodePtr &node, string &type) {
- type = node->GetType();
- GE_IF_BOOL_EXEC(type != FRAMEWORKOP, return SUCCESS);
- ge::AttrUtils::GetStr(node->GetOpDesc(), "original_type", type);
- return SUCCESS;
- }
-
- Status SetCycleEvent(const ge::NodePtr &node) { return SUCCESS; }
-
- Status SetStreamLabel(const ge::NodePtr &node, const std::string &label) {
- GE_CHECK_NOTNULL(node);
- OpDescPtr tmp_desc = AttrUtils::CloneOpDesc(node->GetOpDesc());
- GE_CHECK_NOTNULL(tmp_desc);
-
- if (!AttrUtils::SetStr(tmp_desc, "_stream_label", label)) {
- GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_STREAM_LABEL failed", node->GetName().c_str());
- return FAILED;
- }
- return SUCCESS;
- }
-
- Status SetActiveLabelList(const ge::NodePtr &node, const std::vector<std::string> &label) {
- GE_CHECK_NOTNULL(node);
- OpDescPtr tmp_desc = node->GetOpDesc();
- GE_CHECK_NOTNULL(tmp_desc);
- // add list of active_label
- if (!AttrUtils::SetListStr(tmp_desc, "_active_label", label)) {
- GELOGE(ge::FAILED, "Op: %s set ATTR_NAME_ACTIVE_LABEL_LIST failed", node->GetName().c_str());
- return FAILED;
- }
- return SUCCESS;
- }
-
- Status SetSwitchBranchNodeLabel(const ge::NodePtr &node, const std::string &branch_label) {
- GE_CHECK_NOTNULL(node);
- OpDescPtr tmp_desc = node->GetOpDesc();
- GE_CHECK_NOTNULL(tmp_desc);
- // add branch_label of switch
- if (!AttrUtils::SetStr(tmp_desc, "_switch_branch_node_label", branch_label)) {
- GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_SWITCH_BRANCH_NODE_LABEL failed", node->GetName().c_str());
- return FAILED;
- }
- return SUCCESS;
- }
-
- Status SetSwitchTrueBranchFlag(const ge::NodePtr &node, bool value) {
- GE_CHECK_NOTNULL(node);
- OpDescPtr tmp_desc = node->GetOpDesc();
- GE_CHECK_NOTNULL(tmp_desc);
- // add switch_true_branch_flag
- if (!AttrUtils::SetBool(tmp_desc, "_switch_true_branch_flag", value)) {
- GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_SWITCH_TRUE_BRANCH_FLAG failed", node->GetName().c_str());
- return FAILED;
- }
- return SUCCESS;
- }
-
- Status SetOriginalNodeName(const ge::NodePtr &node, const std::string &orig_name) {
- GE_CHECK_NOTNULL(node);
- OpDescPtr tmp_desc = node->GetOpDesc();
- GE_CHECK_NOTNULL(tmp_desc);
- // record original_node_name
- if (!AttrUtils::SetStr(tmp_desc, "_original_node_name", orig_name)) {
- GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_ORIG_NODE_NAME failed", node->GetName().c_str());
- return FAILED;
- }
- return SUCCESS;
- }
-
- Status SetCyclicDependenceFlag(const ge::NodePtr &node) {
- GE_CHECK_NOTNULL(node);
- OpDescPtr tmp_desc = node->GetOpDesc();
- GE_CHECK_NOTNULL(tmp_desc);
- // add cyclic_dependence_flag
- if (!AttrUtils::SetBool(tmp_desc, "_cyclic_dependence_flag", true)) {
- GELOGE(ge::FAILED, "Op :%s set ATTR_NAME_CYCLIC_DEPENDENCE_FLAG failed", node->GetName().c_str());
- return FAILED;
- }
- return SUCCESS;
- }
-
- Status SetNextIteration(const ge::NodePtr &node, const std::string &next) {
- GE_CHECK_NOTNULL(node);
- OpDescPtr tmp_desc = node->GetOpDesc();
- GE_CHECK_NOTNULL(tmp_desc);
-
- if (!AttrUtils::SetStr(tmp_desc, "_next_iteration_node", next)) {
- GELOGE(ge::FAILED, "Op: %s set ATTR_NAME_NEXT_ITERATION failed", node->GetName().c_str());
- return FAILED;
- }
- return SUCCESS;
- }
- } // namespace ge
-
- namespace cce {
- bool ccGetFuncState(ccFuncParamType_t type) { return true; }
- } // namespace cce
-
- namespace ge {
- Status UnloadModel(uint32_t model_id) { return SUCCESS; }
-
- Status GetInputOutputDescInfo(uint32_t model_id, vector<InputOutputDescInfo> &input_desc,
- vector<InputOutputDescInfo> &output_desc) {
- return SUCCESS;
- }
-
- Status DataInput(const InputData *input_data, OutputData *output_data) { return SUCCESS; }
- /*
- class ModelManager {
- public:
- static std::shared_ptr<ModelManager> GetInstance();
- static void FinalizeForPtr(ModelManager *) {}
- Status DataInputTensor(uint32_t model_id, const std::vector<ge::TensorInfo> &inputs,
- std::vector<ge::TensorInfo> &outputs);
- Status DataInput(const InputData &input_data, OutputData &output_data);
- Status GetInputOutputDescInfo(const uint32_t model_id, std::vector<InputOutputDescInfo> &input_desc,
- std::vector<InputOutputDescInfo> &output_desc);
- Status GetInputOutputDescInfo(const uint32_t model_id, std::vector<InputOutputDescInfo> &input_desc,
- std::vector<InputOutputDescInfo> &output_desc, std::vector<uint32_t> &input_formats,
- std::vector<uint32_t> &output_formats);
- Status GetInputOutputDescInfoForZeroCopy(const uint32_t model_id, std::vector<InputOutputDescInfo> &input_desc,
- std::vector<InputOutputDescInfo> &output_desc,
- std::vector<uint32_t> &input_formats, std::vector<uint32_t> &output_formats);
- Status Stop(uint32_t model_id);
- Status Unload(uint32_t model_id);
- Status LoadModelOnline(uint32_t &model_id, std::shared_ptr<ge::Model> &model,
- std::shared_ptr<ModelListener> listener);
- Status Start(uint32_t model_id);
- Status GetMaxUsedMemory(const uint32_t model_id, uint64_t &max_size);
- Status LoadModelOffline(uint32_t &model_id, const ModelData &model, std::shared_ptr<ModelListener> listener = nullptr,
- void *dev_ptr = nullptr, size_t mem_size = 0, void *weight_ptr = nullptr,
- size_t weight_size = 0);
- Status LoadModelWithQ(uint32_t &model_id, const ModelData &model_data, const std::vector<uint32_t> &input_queue_ids,
- const std::vector<uint32_t> &output_queue_ids);
-
- Status HandleCommand(const Command &command);
- Status ExecuteModel(uint32_t model_id, rtStream_t stream, bool async_mode, const InputData &input_data,
- OutputData &output_data);
- void DestroyAicpuSession(uint64_t session_id);
- };
- void ModelManager::DestroyAicpuSession(uint64_t session_id) {}
- std::shared_ptr<ModelManager> ModelManager::GetInstance() {
- static std::shared_ptr<ModelManager> instance_ptr =
- shared_ptr<ModelManager>(new ModelManager(), ModelManager::FinalizeForPtr);
- return instance_ptr;
- }
-
- Status ModelManager::DataInputTensor(uint32_t model_id, const std::vector<ge::TensorInfo> &inputs,
- std::vector<ge::TensorInfo> &outputs) {
- return SUCCESS;
- }
-
- Status ModelManager::DataInput(const InputData &input_data, OutputData &output_data) { return SUCCESS; }
-
- Status ModelManager::GetInputOutputDescInfo(const uint32_t model_id, std::vector<InputOutputDescInfo> &input_desc,
- std::vector<InputOutputDescInfo> &output_desc,
- std::vector<uint32_t> &input_formats,
- std::vector<uint32_t> &output_formats) {
- return SUCCESS;
- }
-
- Status ModelManager::GetInputOutputDescInfo(const uint32_t model_id, std::vector<InputOutputDescInfo> &input_desc,
- std::vector<InputOutputDescInfo> &output_desc) {
- return SUCCESS;
- }
-
- Status ModelManager::GetInputOutputDescInfoForZeroCopy(const uint32_t model_id,
- std::vector<InputOutputDescInfo> &input_desc,
- std::vector<InputOutputDescInfo> &output_desc,
- std::vector<uint32_t> &input_formats,
- std::vector<uint32_t> &output_formats) {
- return SUCCESS;
- }
-
- Status ModelManager::Stop(uint32_t model_id) { return SUCCESS; }
-
- Status ModelManager::Unload(uint32_t model_id) { return SUCCESS; }
-
- Status ModelManager::LoadModelOnline(uint32_t &model_id, std::shared_ptr<ge::Model> &model,
- std::shared_ptr<ModelListener> listener) {
- return SUCCESS;
- }
-
- Status ModelManager::Start(uint32_t model_id) { return SUCCESS; }
-
- Status ModelManager::GetMaxUsedMemory(const uint32_t model_id, uint64_t &max_size) { return SUCCESS; }
-
- Status ModelManager::LoadModelOffline(uint32_t &model_id, const ModelData &model, shared_ptr<ModelListener> listener,
- void *dev_ptr, size_t mem_size, void *weight_ptr, size_t weight_size) {
- return SUCCESS;
- }
-
- Status ModelManager::LoadModelWithQ(uint32_t &model_id, const ModelData &model_data,
- const std::vector<uint32_t> &input_queue_ids,
- const std::vector<uint32_t> &output_queue_ids) {
- return SUCCESS;
- }
-
- Status ModelManager::HandleCommand(const Command &command) { return SUCCESS; }
-
- Status ModelManager::ExecuteModel(uint32_t model_id, rtStream_t stream, bool async_mode, const InputData &input_data,
- OutputData &output_data) {
- return SUCCESS;
- }
-
- */
-
- } // namespace ge
-
- namespace ge {
-
- enum JobState {
- JOBSTATE_WAITING = 1,
- JOBSTATE_RUNNING,
- JOBSTATE_KILLING,
- JOBSTATE_SUCCEED,
- JOBSTATE_FAILED,
- JOBSTATE_KILLED,
- JOBSTATE_UNKOWN
- };
-
- enum JobSubState {
- JOBSUBSTATE_ENV_INIT = 201,
- JOBSUBSTATE_ENV_FIN,
- JOBSUBSTATE_RESOUCE_ALLOC,
- JOBSUBSTATE_MODEL_COMPILE,
- JOBSUBSTATE_GRAPH_PREPARE,
- JOBSUBSTATE_GRAPH_SPLIT,
- JOBSUBSTATE_GRAPH_OPTIMIZE,
- JOBSUBSTATE_GRAPH_BUILD,
- JOBSUBSTATE_GRAPH_LOAD,
- JOBSUBSTATE_GRAPH_EXEC,
- JOBSUBSTATE_GRAPH_UNLOAD,
- JOBSUBSTATE_OTHER
- };
-
- enum ErrorModule {
- ERROR_MODULE_DRIVER = 0x01,
- ERROR_MODULE_RUNTIME = 0x04,
- ERROR_MODULE_CCE = 0x06,
- ERROR_MODULE_FMK = 0x08,
- ERROR_MODULE_HCCL = 0x12
- };
-
- class CsaInteract {
- public:
- CsaInteract &GetInstance();
- void WriteErrorCode(uint32_t module_ret_errcode, ErrorModule error_module, JobSubState job_sub_state);
- void Init(int32_t dev_index, int64_t job_id);
- Status WriteJobState(JobState job_state, JobSubState job_sub_state = JOBSUBSTATE_OTHER,
- uint32_t module_ret_errcode = SUCCESS, ErrorModule error_module = ERROR_MODULE_FMK);
- // device index
- int32_t dev_index_;
- // job id
- int64_t job_id_;
- // is initialization complete
- bool is_init_;
- // current job state
- JobState curr_state_;
- // job state file
- std::string job_state_file_;
- // network connectivity detect file
- std::string hcom_detect_file_;
- // identification of internal errors that occurred during the training
- bool is_have_internal_error_;
- };
-
- CsaInteract &CsaInteract::GetInstance() {
- static CsaInteract instance;
- return instance;
- }
-
- void CsaInteract::Init(int32_t dev_index, int64_t job_id) {
- if (!is_init_) {
- dev_index_ = dev_index;
- job_id_ = job_id;
- string csa_path_prefix;
- if (std::getenv(FMK_STATUS_FILE_DIR_ENV) != nullptr) {
- csa_path_prefix = std::getenv(FMK_STATUS_FILE_DIR_ENV);
- }
- if (!csa_path_prefix.empty()) {
- std::string job_state_file = csa_path_prefix + std::to_string(dev_index_) + FILE_SEPARATE + JOBSTATE_FILE_NAME;
- std::string hcom_detect_file =
- csa_path_prefix + std::to_string(dev_index_) + FILE_SEPARATE + HCOM_DETECT_FILE_NAME;
- job_state_file_ = RealPath(job_state_file.c_str());
- hcom_detect_file_ = RealPath(hcom_detect_file.c_str());
- }
- is_init_ = true;
- }
- }
-
- void CsaInteract::WriteErrorCode(uint32_t module_ret_errcode, ErrorModule error_module, JobSubState job_sub_state) {}
-
- } // namespace ge
-
- Status ModelParserBase::LoadFromFile(const char *model_path, const char *key, int32_t priority,
- ge::ModelData &model_data) {
- return SUCCESS;
- }
-
- Status CsaInteract::WriteJobState(JobState job_state, JobSubState job_sub_state, uint32_t module_ret_errcode,
- ErrorModule error_module) {
- return SUCCESS;
- }
-
- namespace ge {
-
- static std::map<ge::DataType, uint32_t> data_type_to_length = {
- {DT_BOOL, sizeof(bool)}, {DT_INT64, sizeof(int64_t)}, {DT_UINT64, sizeof(int64_t)}, {DT_FLOAT, sizeof(float)},
- {DT_INT32, sizeof(int32_t)}, {DT_UINT32, sizeof(int32_t)}, {DT_INT8, sizeof(char)}, {DT_UINT8, sizeof(char)},
- {DT_INT16, sizeof(int16_t)}, {DT_UINT16, sizeof(int16_t)}, {DT_FLOAT16, sizeof(int16_t)}, {DT_DOUBLE, sizeof(double)},
- };
-
- class TypeUtils {
- public:
- static bool GetDataTypeLength(ge::DataType data_type, uint32_t &length);
- static bool CheckUint64MulOverflow(uint64_t a, uint32_t b);
- };
-
- bool TypeUtils::GetDataTypeLength(ge::DataType data_type, uint32_t &length) {
- auto it = data_type_to_length.find(data_type);
- if (it != data_type_to_length.end()) {
- length = it->second;
- return true;
- } else {
- return false;
- }
- }
-
- bool TypeUtils::CheckUint64MulOverflow(uint64_t a, uint32_t b) {
- // Not overflow
- if (a == 0) {
- return false;
- }
- if ((ULLONG_MAX / a) >= b) {
- return false;
- }
- return true;
- }
- } // namespace ge
|