| @@ -300,14 +300,22 @@ void DumpParallelInfo(const CNodePtr &node, const std::shared_ptr<SubGraphIRInfo | |||
| return; | |||
| } | |||
| auto strategy = operator_info->strategy(); | |||
| if (strategy == nullptr) { | |||
| auto in_strategy = operator_info->strategy(); | |||
| if (in_strategy == nullptr) { | |||
| return; | |||
| } | |||
| ValuePtr temp = MakeValue(strategy->GetInputDim()); | |||
| gsub->buffer << " { strategy: "; | |||
| gsub->buffer << temp->ToString(); | |||
| ValuePtr in_tmp = MakeValue(in_strategy->GetInputDim()); | |||
| gsub->buffer << " { in_strategy: "; | |||
| gsub->buffer << in_tmp->ToString(); | |||
| auto out_strategy = operator_info->out_strategy(); | |||
| if (out_strategy) { | |||
| ValuePtr out_tmp = MakeValue(out_strategy->GetInputDim()); | |||
| gsub->buffer << ", out_strategy: "; | |||
| gsub->buffer << out_tmp->ToString(); | |||
| } | |||
| gsub->buffer << " }"; | |||
| } | |||
| @@ -1615,7 +1615,7 @@ Status CostGraph::InitReshapeStrategy() { | |||
| reshape_info->SetOutputLayout( | |||
| (*next_iter)->next_operator()->inputs_tensor_info()[LongToSize(next_index)].tensor_layout()); | |||
| } | |||
| if (reshape_info->Init(nullptr) != SUCCESS) { | |||
| if (reshape_info->Init(nullptr, nullptr) != SUCCESS) { | |||
| return FAILED; | |||
| } | |||
| } | |||
| @@ -851,8 +851,8 @@ Status GatherInfo::ComputeReplaceOp() { | |||
| return SUCCESS; | |||
| } | |||
| Status GatherInfo::Init(const StrategyPtr &strategy) { | |||
| if (InitWithAutoRepeatCalc(strategy) != SUCCESS) { | |||
| Status GatherInfo::Init(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) { | |||
| if (InitWithAutoRepeatCalc(in_strategy, out_strategy) != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << ": Init failed."; | |||
| return FAILED; | |||
| } | |||
| @@ -864,8 +864,8 @@ Status GatherInfo::Init(const StrategyPtr &strategy) { | |||
| return SUCCESS; | |||
| } | |||
| Status GatherInfo::InitForCostModel(const StrategyPtr &strategy) { | |||
| if (InitForCostModelWithAutoRepeatCalc(strategy) != SUCCESS) { | |||
| Status GatherInfo::InitForCostModel(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) { | |||
| if (InitForCostModelWithAutoRepeatCalc(in_strategy, out_strategy) != SUCCESS) { | |||
| if (is_auto_parallel_) { | |||
| MS_LOG(DEBUG) << name_ << ": Init for cost model failed."; | |||
| } else { | |||
| @@ -40,8 +40,8 @@ class GatherInfo : public OperatorInfo { | |||
| slice_size_(0), | |||
| replace_op_name_(replace_op_name) {} | |||
| ~GatherInfo() override = default; | |||
| Status Init(const StrategyPtr &strategy) override; | |||
| Status InitForCostModel(const StrategyPtr &strategy) override; | |||
| Status Init(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) override; | |||
| Status InitForCostModel(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) override; | |||
| std::vector<StrategyPtr> GenerateOpStrategies(int64_t stage_id) override; | |||
| Status SetCostUnderStrategy(const StrategyPtr &strategy) override; | |||
| @@ -90,18 +90,7 @@ Status MatMulBase::GetAttrs() { | |||
| if (transpose_b_iter->second->isa<BoolImm>()) { | |||
| transpose_b_ = transpose_b_iter->second->cast<BoolImmPtr>()->value(); | |||
| } else { | |||
| MS_LOG(ERROR) << name_ << " : The value of transpose_a is not bool."; | |||
| return FAILED; | |||
| } | |||
| } | |||
| auto forward_reduce_scatter_iter = attrs_.find(FORWARD_REDUCE_SCATTER); | |||
| if (forward_reduce_scatter_iter != attrs_.end()) { | |||
| MS_EXCEPTION_IF_NULL(forward_reduce_scatter_iter->second); | |||
| if (forward_reduce_scatter_iter->second->isa<BoolImm>()) { | |||
| forward_reduce_scatter_ = forward_reduce_scatter_iter->second->cast<BoolImmPtr>()->value(); | |||
| } else { | |||
| MS_LOG(ERROR) << name_ << " : The value of forward reduce scatter is not bool."; | |||
| MS_LOG(ERROR) << name_ << " : The value of transpose_b is not bool."; | |||
| return FAILED; | |||
| } | |||
| } | |||
| @@ -193,11 +182,58 @@ Status MatMul::CheckStrategy(const StrategyPtr &strategy) { | |||
| } | |||
| } | |||
| if ((mat_a_dimension_ != 2 || mat_b_dimension_ != 2) && forward_reduce_scatter_) { | |||
| MS_LOG(WARNING) << name_ | |||
| << ": The dimension of mat a and mat b must be 2 in forward reduce scatter mode, " | |||
| "setting the forward reduce scatter mode to false here"; | |||
| return SUCCESS; | |||
| } | |||
| Status MatMul::CheckOutputStrategy(const StrategyPtr &out_strategy) { | |||
| if (out_strategy == nullptr) { | |||
| MS_LOG(INFO) << name_ << ": The output strategy is null"; | |||
| return SUCCESS; | |||
| } | |||
| if (mat_a_dimension_ != 2 || mat_b_dimension_ != 2) { | |||
| MS_LOG(ERROR) << name_ << ": The dimension of mat a and mat b must be 2 if set output strategy"; | |||
| return FAILED; | |||
| } | |||
| if (CheckStrategyValue(out_strategy, outputs_shape_) != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << " : Invalid output strategy."; | |||
| return FAILED; | |||
| } | |||
| Strategys in_stra = strategy_->GetInputDim(); | |||
| Dimensions x_strategy = in_stra.at(0); | |||
| Dimensions w_strategy = in_stra.at(1); | |||
| int64_t in_shard_a = x_strategy[0]; | |||
| int64_t in_shard_b = x_strategy[1]; | |||
| int64_t in_shard_c = 1; | |||
| if (transpose_b_) { | |||
| in_shard_c = w_strategy[0]; | |||
| } else { | |||
| in_shard_c = w_strategy[1]; | |||
| } | |||
| Strategys out_stra = out_strategy->GetInputDim(); | |||
| Dimensions output_strategy = out_stra[0]; | |||
| int64_t out_shard_a_or_ab = output_strategy[0]; | |||
| int64_t out_shard_c = output_strategy[1]; | |||
| if (out_shard_c != in_shard_c) { | |||
| MS_LOG(ERROR) << name_ << ": The input strategy is (" << x_strategy << ", " << w_strategy << ")" | |||
| << ", the second dimension of output strategy must be " << in_shard_c << ", but got " << out_shard_c; | |||
| return FAILED; | |||
| } | |||
| if (out_shard_a_or_ab == in_shard_a) { | |||
| forward_reduce_scatter_ = false; | |||
| } else if (out_shard_a_or_ab == in_shard_a * in_shard_b) { | |||
| forward_reduce_scatter_ = true; | |||
| } else { | |||
| MS_LOG(ERROR) << name_ << ": The input strategy is (" << x_strategy << ", " << w_strategy << ")" | |||
| << ", the first dimension of output strategy must be " << in_shard_a << " or " | |||
| << in_shard_a * in_shard_b << ", but got " << out_shard_a_or_ab; | |||
| return FAILED; | |||
| } | |||
| return SUCCESS; | |||
| @@ -289,20 +325,8 @@ Status MatMulBase::InferTensorMap() { | |||
| } | |||
| if (forward_reduce_scatter_) { | |||
| if (dev_matrix_shape_.size() != 3) { | |||
| MS_LOG(WARNING) << name_ | |||
| << ": The dimension of dev matrix shape must be 3 in forward reduce scatter mode, " | |||
| "setting the forward reduce scatter mode to false here"; | |||
| forward_reduce_scatter_ = false; | |||
| } else if (outputs_shape_[0][0] % (dev_matrix_shape_[0] * dev_matrix_shape_[1]) != 0) { | |||
| MS_LOG(WARNING) << name_ | |||
| << ": The first dimension of output should be split by dev_matrix[0]*dev_matrix[1] in " | |||
| "forward reduce scatter mode, setting the forward reduce scatter mode to false here"; | |||
| forward_reduce_scatter_ = false; | |||
| } else { | |||
| // the forward reduce scatter only support that the dimension of output is 2 | |||
| output_tensor_map = {1, 0}; | |||
| } | |||
| // the forward reduce scatter only support that the dimension of output is 2 | |||
| output_tensor_map = {1, 0}; | |||
| } | |||
| inputs_tensor_map_.push_back(mat_a_tensor_map); | |||
| @@ -312,21 +336,28 @@ Status MatMulBase::InferTensorMap() { | |||
| } | |||
| Status MatMulBase::InferTensorLayout(TensorLayouts *inputs_layout, TensorLayouts *outputs_layout) { | |||
| Shape output_dev_matrix_shape; | |||
| out_dev_matrix_shape_ = dev_matrix_shape_; | |||
| if (forward_reduce_scatter_) { | |||
| if (dev_matrix_shape_.size() != 3) { | |||
| MS_LOG(ERROR) << "The size of origin dev matrix shape must be 3 in forward reduce scatter mode"; | |||
| return FAILED; | |||
| // the reduce scatter mode only use for MatMul | |||
| out_dev_matrix_shape_ = dev_matrix_shape_; | |||
| if (repeated_num_in_dev_matrix_right_ || repeated_calc_num_ == 1) { | |||
| // dev_matrix_shape_ is: [a, b, c, repeat_num] or [a, b, c] | |||
| // out_dev_matrix_shape_ is: [a*b, c, repeat_num] or [a*b, c] | |||
| (void)out_dev_matrix_shape_.erase(out_dev_matrix_shape_.begin(), out_dev_matrix_shape_.begin() + 2); | |||
| (void)out_dev_matrix_shape_.insert(out_dev_matrix_shape_.begin(), dev_matrix_shape_[0] * dev_matrix_shape_[1]); | |||
| } else { | |||
| // dev_matrix_shape_ is: [repeat_num, a, b, c] | |||
| // out_dev_matrix_shape_ is: [repeat_num, a*b, c] | |||
| (void)out_dev_matrix_shape_.erase(out_dev_matrix_shape_.begin() + 1, out_dev_matrix_shape_.begin() + 3); | |||
| (void)out_dev_matrix_shape_.insert(out_dev_matrix_shape_.begin() + 1, | |||
| dev_matrix_shape_[1] * dev_matrix_shape_[2]); | |||
| } | |||
| output_dev_matrix_shape = {dev_matrix_shape_[0] * dev_matrix_shape_[1], dev_matrix_shape_[2]}; | |||
| } else { | |||
| output_dev_matrix_shape = dev_matrix_shape_; | |||
| } | |||
| TensorLayout mat_a_layout, mat_b_layout, output_layout; | |||
| if ((mat_a_layout.InitFromVector(dev_matrix_shape_, inputs_tensor_map_[0], inputs_shape_[0]) != SUCCESS) || | |||
| (mat_b_layout.InitFromVector(dev_matrix_shape_, inputs_tensor_map_[1], inputs_shape_[1]) != SUCCESS) || | |||
| (output_layout.InitFromVector(output_dev_matrix_shape, outputs_tensor_map_[0], outputs_shape_[0]) != SUCCESS)) { | |||
| (output_layout.InitFromVector(out_dev_matrix_shape_, outputs_tensor_map_[0], outputs_shape_[0]) != SUCCESS)) { | |||
| return FAILED; | |||
| } | |||
| @@ -360,21 +391,6 @@ Status MatMulBase::InferTensorInfo() { | |||
| return SUCCESS; | |||
| } | |||
| Status MatMulBase::Init(const StrategyPtr &strategy) { | |||
| if (InitWithAutoRepeatCalc(strategy) != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << " : Init failed."; | |||
| return FAILED; | |||
| } | |||
| if (forward_reduce_scatter_) { | |||
| virtual_div_op_.clear(); | |||
| MS_LOG(INFO) << "The forward reduce scatter mode does not involve repeated calculation, clear the virtual div op"; | |||
| } | |||
| MS_LOG(INFO) << name_ << " : Init success."; | |||
| return SUCCESS; | |||
| } | |||
| Status MatMulBase::SwapLastTwoElements(mindspore::parallel::Shape *const input) { | |||
| if (input->size() < 2) { | |||
| MS_LOG(ERROR) << name_ << " : The size of inputs small than 2."; | |||
| @@ -584,7 +600,7 @@ std::shared_ptr<Strategys> BatchMatMulInfo::GenerateBatchStrategies() { | |||
| } | |||
| Status MatMulBase::SetCostUnderStrategy(const mindspore::parallel::StrategyPtr &strategy) { | |||
| if (InitForCostModel(strategy) == FAILED) { | |||
| if (InitForCostModel(strategy, nullptr) == FAILED) { | |||
| MS_LOG(ERROR) << name_ << " : Initialization under the strategy failed."; | |||
| return FAILED; | |||
| } | |||
| @@ -37,8 +37,6 @@ class MatMulBase : public OperatorInfo { | |||
| : OperatorInfo(name, inputs_shape, outputs_shape, attrs, std::make_shared<MatMulCost>()) {} | |||
| ~MatMulBase() override = default; | |||
| Status Init(const StrategyPtr &strategy) override; | |||
| // Generate all strategies and the corresponding cost for this MatMul operator | |||
| Status GenerateStrategies(int64_t stage_id) override; | |||
| std::vector<StrategyPtr> GenerateOpStrategies(int64_t stage_id) override; | |||
| @@ -75,6 +73,7 @@ class MatMul : public MatMulBase { | |||
| protected: | |||
| Status CheckStrategy(const StrategyPtr &strategy) override; | |||
| Status CheckOutputStrategy(const StrategyPtr &out_strategy) override; | |||
| }; | |||
| class MatMulInfo : public MatMul { | |||
| @@ -727,8 +727,8 @@ Status OperatorInfo::InferSliceShape(const Strategys &inputs_strategy, const Str | |||
| return SUCCESS; | |||
| } | |||
| Status OperatorInfo::Init(const StrategyPtr &strategy) { | |||
| if (InitWithAutoRepeatCalc(strategy) != SUCCESS) { | |||
| Status OperatorInfo::Init(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) { | |||
| if (InitWithAutoRepeatCalc(in_strategy, out_strategy) != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << " : Init failed."; | |||
| return FAILED; | |||
| } | |||
| @@ -737,8 +737,8 @@ Status OperatorInfo::Init(const StrategyPtr &strategy) { | |||
| return SUCCESS; | |||
| } | |||
| Status OperatorInfo::InitForCostModel(const StrategyPtr &strategy) { | |||
| if (InitForCostModelWithAutoRepeatCalc(strategy) != SUCCESS) { | |||
| Status OperatorInfo::InitForCostModel(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) { | |||
| if (InitForCostModelWithAutoRepeatCalc(in_strategy, out_strategy) != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << " : Init for cost model failed."; | |||
| return FAILED; | |||
| } | |||
| @@ -747,9 +747,10 @@ Status OperatorInfo::InitForCostModel(const StrategyPtr &strategy) { | |||
| return SUCCESS; | |||
| } | |||
| // method0: auto insert repeated_calculation_num for dev_matrix_shape when repeated_calculation_num > 1 | |||
| Status OperatorInfo::InitForCostModelWithAutoRepeatCalc(const StrategyPtr &strategy) { | |||
| if (strategy == nullptr) { | |||
| // auto insert repeated_calculation_num for dev_matrix_shape when repeated_calculation_num > 1 | |||
| Status OperatorInfo::InitForCostModelWithAutoRepeatCalc(const StrategyPtr &in_strategy, | |||
| const StrategyPtr &out_strategy) { | |||
| if (in_strategy == nullptr) { | |||
| MS_LOG(ERROR) << name_ << ": The strategy is null."; | |||
| return FAILED; | |||
| } | |||
| @@ -760,7 +761,7 @@ Status OperatorInfo::InitForCostModelWithAutoRepeatCalc(const StrategyPtr &strat | |||
| } | |||
| // must be after InferAttrs() | |||
| if (CheckStrategy(strategy) != SUCCESS) { | |||
| if (CheckStrategy(in_strategy) != SUCCESS) { | |||
| if (is_auto_parallel_) { | |||
| MS_LOG(DEBUG) << name_ << ": CheckStrategy failed."; | |||
| } else { | |||
| @@ -768,13 +769,18 @@ Status OperatorInfo::InitForCostModelWithAutoRepeatCalc(const StrategyPtr &strat | |||
| } | |||
| return FAILED; | |||
| } | |||
| strategy_ = in_strategy; | |||
| if (out_strategy && CheckOutputStrategy(out_strategy) != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << ": The output strategy is invalid"; | |||
| return FAILED; | |||
| } | |||
| out_strategy_ = out_strategy; | |||
| // need to clear queues before Init(), | |||
| // because Init() may be called multiple times by cost model | |||
| ResetQueueMember(); | |||
| strategy_ = strategy; | |||
| if (InferDevMatrixShape() != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << ": InferDevMatrixShape failed."; | |||
| return FAILED; | |||
| @@ -807,13 +813,13 @@ Status OperatorInfo::InitForCostModelWithAutoRepeatCalc(const StrategyPtr &strat | |||
| return SUCCESS; | |||
| } | |||
| Status OperatorInfo::InitWithAutoRepeatCalc(const StrategyPtr &strategy) { | |||
| if (strategy == nullptr) { | |||
| MS_LOG(ERROR) << name_ << ": The strategy is null."; | |||
| Status OperatorInfo::InitWithAutoRepeatCalc(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) { | |||
| if (in_strategy == nullptr) { | |||
| MS_LOG(ERROR) << name_ << ": The input strategy is null."; | |||
| return FAILED; | |||
| } | |||
| if (InitForCostModelWithAutoRepeatCalc(strategy) != SUCCESS) { | |||
| if (InitForCostModelWithAutoRepeatCalc(in_strategy, out_strategy) != SUCCESS) { | |||
| return FAILED; | |||
| } | |||
| @@ -1330,7 +1336,7 @@ Status GenerateStrategiesWithBroadcast(int64_t stage_id, const Shapes &inputs_sh | |||
| } | |||
| Status OperatorInfo::SetCostUnderStrategyBase(const StrategyPtr &strategy) { | |||
| if (InitForCostModel(strategy) == FAILED) { | |||
| if (InitForCostModel(strategy, nullptr) == FAILED) { | |||
| if (is_auto_parallel_) { | |||
| MS_LOG(DEBUG) << name_ << ": Initialization under the strategy failed."; | |||
| } else { | |||
| @@ -81,8 +81,9 @@ class OperatorInfo { | |||
| // If output is tuple, outputs_type.size() is greater than 1. | |||
| Status set_outputs_type(const std::vector<TypePtr> &outputs_type); | |||
| const std::vector<TypePtr> &outputs_type() const { return outputs_type_; } | |||
| virtual Status Init(const StrategyPtr &strategy); | |||
| virtual Status InitForCostModel(const StrategyPtr &strategy); // only init the necessary parts | |||
| virtual Status Init(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy); | |||
| // only init the necessary parts | |||
| virtual Status InitForCostModel(const StrategyPtr &strategy, const StrategyPtr &out_strategy); | |||
| // Given the stage_id (which indicates the number of devices), | |||
| // generate all strategies for this operator | |||
| @@ -152,7 +153,7 @@ class OperatorInfo { | |||
| void SetIsStrategyCostExactTrue() { is_strategy_cost_exact_ = true; } | |||
| void ClearStrategyCost() { strategy_cost_.clear(); } | |||
| void CheckSelectedStrategy(const StrategyPtr &); | |||
| Status InitSelectedStrategy(const StrategyPtr &s_strategy) { return Init(s_strategy); } | |||
| Status InitSelectedStrategy(const StrategyPtr &s_strategy) { return Init(s_strategy, nullptr); } | |||
| void set_input_value(const std::vector<ValuePtr> &input_value) { input_value_ = input_value; } | |||
| const std::vector<ValuePtr> &input_value() const { return input_value_; } | |||
| void set_outputs_dtype(const TypePtr &dtype) { outputs_dtype_ = dtype; } | |||
| @@ -161,6 +162,7 @@ class OperatorInfo { | |||
| bool is_alive() const { return is_alive_; } | |||
| void SetNotAlive() { is_alive_ = false; } | |||
| StrategyPtr strategy() const { return strategy_; } | |||
| StrategyPtr out_strategy() const { return out_strategy_; } | |||
| void set_strategy(const StrategyPtr &strategy) { strategy_ = strategy; } | |||
| void set_refkey_parameter_name(std::string p_name) { refkey_parameter_name_ = std::move(p_name); } | |||
| const std::string &refkey_parameter_name() const { return refkey_parameter_name_; } | |||
| @@ -199,14 +201,15 @@ class OperatorInfo { | |||
| virtual Status InferMirrorOps(); | |||
| virtual Status InferTensorInfo(); | |||
| virtual void InferReplaceOps() {} | |||
| virtual Status CheckOutputStrategy(const StrategyPtr &out_strategy) { return SUCCESS; } | |||
| Status CheckStrategyValue(const StrategyPtr &strategy, const Shapes &inputs_shape); | |||
| void SetRepeatedCalcDevMatrix(); | |||
| void ResetTensorMapIfRepeatedCalc(); | |||
| Status CreateGroupByDim(size_t axis, std::vector<Group> *group); | |||
| Status InferAttrs(); | |||
| void ResetQueueMember(); | |||
| Status InitWithAutoRepeatCalc(const StrategyPtr &strategy); | |||
| Status InitForCostModelWithAutoRepeatCalc(const StrategyPtr &strategy); | |||
| Status InitWithAutoRepeatCalc(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy); | |||
| Status InitForCostModelWithAutoRepeatCalc(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy); | |||
| Status InferRepeatedCalcInfo(); | |||
| Status InferVirtualDivOps(); | |||
| @@ -232,6 +235,7 @@ class OperatorInfo { | |||
| int32_t stage_id_ = 0; | |||
| StrategyPtr strategy_; | |||
| StrategyPtr out_strategy_; | |||
| std::vector<TensorInfo> inputs_tensor_info_; | |||
| std::vector<TensorInfo> outputs_tensor_info_; | |||
| Shape dev_matrix_shape_; // if repeated calculation, it contains the repeated_calc_num_ | |||
| @@ -89,6 +89,7 @@ constexpr char AUTO_PARALLEL_RUN_ONCE_ONLY[] = "auto_parallel_run_once_only"; | |||
| constexpr char SEMI_AUTO_PARALLEL_RUN_ONCE_ONLY[] = "semi_auto_parallel_run_once_only"; | |||
| constexpr char CHECK_SET_STRATEGY_VALID_ONCE_ONLY[] = "check_set_strategy_valid_once_only"; | |||
| constexpr char IN_STRATEGY[] = "in_strategy"; | |||
| constexpr char OUT_STRATEGY[] = "out_strategy"; | |||
| constexpr char STAGE_ATTR[] = "stage"; | |||
| constexpr char GEN_STRATEGY[] = "gen_strategy"; | |||
| constexpr char REDUCE_OP_SUM[] = "sum"; | |||
| @@ -306,7 +306,7 @@ Status ReshapeInfo::InferDefaultLayout(const Shape &shape, TensorLayout *const l | |||
| return Status::SUCCESS; | |||
| } | |||
| Status ReshapeInfo::Init(const StrategyPtr &strategy) { | |||
| Status ReshapeInfo::Init(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) { | |||
| auto reshape_skip_redis_iter = attrs_.find(SKIP_REDISTRIBUTION); | |||
| if (reshape_skip_redis_iter != attrs_.end()) { | |||
| MS_EXCEPTION_IF_NULL(reshape_skip_redis_iter->second); | |||
| @@ -319,8 +319,8 @@ Status ReshapeInfo::Init(const StrategyPtr &strategy) { | |||
| ResetQueueMember(); | |||
| device_number(); | |||
| if (strategy) { | |||
| if (InitWithAutoRepeatCalc(strategy) != SUCCESS) { | |||
| if (in_strategy) { | |||
| if (InitWithAutoRepeatCalc(in_strategy, out_strategy) != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << ": Init failed."; | |||
| return FAILED; | |||
| } | |||
| @@ -463,7 +463,7 @@ Status ReshapeInfo::GenetateStrategyCosts(const std::vector<std::shared_ptr<Stra | |||
| InferTensorInfoByLayout(); | |||
| SetCostForReshape(reshape_stra); | |||
| } else if (next_stra_costs.empty()) { | |||
| if (Init(nullptr) == FAILED) { | |||
| if (Init(nullptr, nullptr) == FAILED) { | |||
| MS_LOG(ERROR) << "Failure:operator reshape init failed"; | |||
| return FAILED; | |||
| } | |||
| @@ -43,7 +43,7 @@ class ReshapeInfo : public OperatorInfo { | |||
| input_layout_set_flag_(false), | |||
| output_layout_set_flag_(false) {} | |||
| ~ReshapeInfo() override = default; | |||
| Status Init(const StrategyPtr &strategy) override; | |||
| Status Init(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) override; | |||
| void SetInputLayout(const TensorLayout &input_layout) { | |||
| input_layout_ = input_layout; | |||
| input_layout_set_flag_ = true; | |||
| @@ -126,20 +126,20 @@ Status VirtualDatasetInfo::InferTensorMap() { | |||
| Status VirtualDatasetInfo::GetAttrs() { return SUCCESS; } | |||
| Status VirtualDatasetInfo::Init(const StrategyPtr &strategy) { | |||
| Status VirtualDatasetInfo::Init(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) { | |||
| repeated_num_in_dev_matrix_right_ = false; | |||
| if (ParallelContext::GetInstance()->dataset_repeat_dim_right()) { | |||
| repeated_num_in_dev_matrix_right_ = true; | |||
| } | |||
| if (InitWithAutoRepeatCalc(strategy) != SUCCESS) { | |||
| if (InitWithAutoRepeatCalc(in_strategy, out_strategy) != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << ": Init failed."; | |||
| return FAILED; | |||
| } | |||
| return SUCCESS; | |||
| } | |||
| Status VirtualDatasetInfo::InitForCostModel(const StrategyPtr &strategy) { | |||
| if (InitForCostModelWithAutoRepeatCalc(strategy) != SUCCESS) { | |||
| Status VirtualDatasetInfo::InitForCostModel(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) { | |||
| if (InitForCostModelWithAutoRepeatCalc(in_strategy, out_strategy) != SUCCESS) { | |||
| MS_LOG(ERROR) << name_ << ": Init for cost model failed."; | |||
| return FAILED; | |||
| } | |||
| @@ -34,8 +34,8 @@ class VirtualDatasetInfo : public OperatorInfo { | |||
| const PrimitiveAttrs &attrs) | |||
| : OperatorInfo(name, inputs_shape, outputs_shape, attrs, std::make_shared<VirtualDatasetCost>()) {} | |||
| ~VirtualDatasetInfo() override = default; | |||
| Status Init(const StrategyPtr &strategy) override; | |||
| Status InitForCostModel(const StrategyPtr &strategy) override; | |||
| Status Init(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) override; | |||
| Status InitForCostModel(const StrategyPtr &in_strategy, const StrategyPtr &out_strategy) override; | |||
| Status GenerateStrategies(int64_t stage_id) override; | |||
| std::vector<StrategyPtr> GenerateOpStrategies(int64_t stage_id) override; | |||
| @@ -331,14 +331,15 @@ OperatorInfoPtr PipelineTransformer::CreateOpInfo(const CNodePtr &cnode, int tup | |||
| op_info->set_input_value(input_value); | |||
| op_info->set_outputs_dtype(temp_node->Type()); | |||
| op_info->set_cnode(temp_node); | |||
| StrategyPtr strategy = nullptr; | |||
| StrategyPtr in_strategy = nullptr, out_strategy = nullptr; | |||
| if (!StrategyFound(attrs)) { | |||
| strategy = GenerateBatchParallelStrategy(op_info, prim); | |||
| in_strategy = GenerateBatchParallelStrategy(op_info, prim); | |||
| } else { | |||
| strategy = ExtractStrategy(attrs[IN_STRATEGY]); | |||
| in_strategy = ExtractStrategy(attrs[IN_STRATEGY]); | |||
| out_strategy = ExtractStrategy(attrs[OUT_STRATEGY]); | |||
| } | |||
| MS_EXCEPTION_IF_NULL(strategy); | |||
| if (op_info->Init(strategy) == FAILED) { | |||
| MS_EXCEPTION_IF_NULL(in_strategy); | |||
| if (op_info->Init(in_strategy, out_strategy) == FAILED) { | |||
| MS_LOG(EXCEPTION) << "operator: " << prim->name() << " init failed."; | |||
| } | |||
| return op_info; | |||
| @@ -1125,22 +1125,12 @@ std::string MirrorOpName() { | |||
| return mirror_op_name; | |||
| } | |||
| void InsertMirrorOps(const FuncGraphPtr &root, const MirrorOps &mirror_ops, const CNodePtr &node) { | |||
| MS_EXCEPTION_IF_NULL(node); | |||
| size_t node_size = node->inputs().size(); | |||
| static void DoInsertMirrorOps(const FuncGraphPtr &root, const MirrorOps &mirror_ops, const CNodePtr &node, | |||
| size_t node_size) { | |||
| FuncGraphPtr func_graph = node->func_graph(); | |||
| MS_EXCEPTION_IF_NULL(func_graph); | |||
| FuncGraphManagerPtr manager = func_graph->manager(); | |||
| MS_EXCEPTION_IF_NULL(manager); | |||
| for (auto input : node->inputs()) { | |||
| if (HasAbstractMonad(input)) { | |||
| node_size--; | |||
| } | |||
| } | |||
| if (!CheckInsertMirrorOps(mirror_ops, node, node_size)) { | |||
| return; | |||
| } | |||
| for (size_t index = 1; index < node_size; ++index) { | |||
| OperatorVector backward_op = mirror_ops[index - 1]; | |||
| @@ -1226,6 +1216,22 @@ void InsertMirrorOps(const FuncGraphPtr &root, const MirrorOps &mirror_ops, cons | |||
| } | |||
| } | |||
| void InsertMirrorOps(const FuncGraphPtr &root, const MirrorOps &mirror_ops, const CNodePtr &node) { | |||
| MS_EXCEPTION_IF_NULL(node); | |||
| size_t node_size = node->inputs().size(); | |||
| for (auto input : node->inputs()) { | |||
| if (HasAbstractMonad(input)) { | |||
| node_size--; | |||
| } | |||
| } | |||
| if (!CheckInsertMirrorOps(mirror_ops, node, node_size)) { | |||
| return; | |||
| } | |||
| DoInsertMirrorOps(root, mirror_ops, node, node_size); | |||
| } | |||
| void BackwardCommunication(const FuncGraphPtr &root, const OperatorInfoPtr &distribute_operator, const CNodePtr &node, | |||
| const std::vector<std::pair<CNodePtr, LossNodeInfo>> &sens_loss_pairs) { | |||
| MS_EXCEPTION_IF_NULL(distribute_operator); | |||
| @@ -1308,21 +1314,26 @@ OperatorInfoPtr NewOperatorInstance(const PrimitivePtr &prim, const PrimitiveAtt | |||
| } | |||
| StrategyPtr ExtractStrategy(const ValuePtr &stra) { | |||
| ValueTuplePtr var = stra->cast<ValueTuplePtr>(); | |||
| if (stra == nullptr) { | |||
| return nullptr; | |||
| } | |||
| auto var = stra->cast<ValueTuplePtr>(); | |||
| if (var == nullptr) { | |||
| return nullptr; | |||
| } | |||
| StrategyPtr strategyPtr; | |||
| int64_t stage_id = g_device_manager->stage_id(); | |||
| MS_LOG(INFO) << "Extract information: strategy " << stra->ToString(); | |||
| if (var == nullptr) { | |||
| MS_LOG(EXCEPTION) << "Strategy value is nullptr"; | |||
| } | |||
| if (var->size() > 0) { | |||
| std::vector<ValuePtr> elements = var->value(); | |||
| Strategys strategy; | |||
| for (uint64_t index = 0; index < elements.size(); ++index) { | |||
| Dimensions dim; | |||
| if (elements[index]->isa<ValueSequeue>()) { | |||
| ValueTuplePtr value_tuple = elements[index]->cast<ValueTuplePtr>(); | |||
| auto value_tuple = elements[index]->cast<ValueTuplePtr>(); | |||
| std::vector<ValuePtr> value_vector = value_tuple->value(); | |||
| (void)std::transform(value_vector.begin(), value_vector.end(), std::back_inserter(dim), | |||
| [](const ValuePtr &value) { return static_cast<int64_t>(GetValue<int64_t>(value)); }); | |||
| @@ -1920,7 +1931,10 @@ void SetStridedSliceSplitStrategy(const std::vector<AnfNodePtr> &all_nodes) { | |||
| } | |||
| } | |||
| void ExtractInformation(const std::vector<AnfNodePtr> &all_nodes) { | |||
| static void ExtractStrategyAndInit(const CNodePtr &cnode, const PrimitivePtr &prim, const OperatorInfoPtr &op_info) { | |||
| StrategyPtr in_strategy = nullptr, out_strategy = nullptr; | |||
| auto attrs = prim->attrs(); | |||
| // load strategy map from checkpoint | |||
| StrategyMap stra_map; | |||
| if (StrategyCheckpoint::GetInstance().LoadCheckPointOn() && | |||
| @@ -1928,6 +1942,35 @@ void ExtractInformation(const std::vector<AnfNodePtr> &all_nodes) { | |||
| MS_LOG(EXCEPTION) << "Load strategy checkpoint failed"; | |||
| } | |||
| std::string strategy_key_name = ""; | |||
| auto param_names = NodeParameterName(cnode, -1, 0); | |||
| if (!param_names.empty()) { | |||
| strategy_key_name = prim->name() + "_" + param_names[0].first; | |||
| } | |||
| bool load_strategy_from_ckpt = | |||
| StrategyCheckpoint::GetInstance().LoadCheckPointOn() && stra_map.find(strategy_key_name) != stra_map.end(); | |||
| if ((!StrategyFound(attrs) && !load_strategy_from_ckpt) && !cnode->HasPrimalAttr(IN_STRATEGY)) { | |||
| MS_LOG(INFO) << "ExtractInformation: the strategy of node " << cnode->ToString() << " prim " << prim->name() | |||
| << " is empty, using batch parallel"; | |||
| in_strategy = GenerateBatchParallelStrategy(op_info, prim); | |||
| } else if (cnode->HasPrimalAttr(IN_STRATEGY)) { | |||
| in_strategy = ExtractStrategy(cnode->GetPrimalAttr(IN_STRATEGY)); | |||
| out_strategy = ExtractStrategy(cnode->GetPrimalAttr(OUT_STRATEGY)); | |||
| } else if (StrategyFound(attrs)) { | |||
| in_strategy = ExtractStrategy(attrs[IN_STRATEGY]); | |||
| out_strategy = ExtractStrategy(attrs[OUT_STRATEGY]); | |||
| } else { | |||
| in_strategy = stra_map[strategy_key_name]; | |||
| } | |||
| MS_EXCEPTION_IF_NULL(in_strategy); | |||
| if (op_info->Init(in_strategy, out_strategy) == FAILED) { | |||
| MS_LOG(EXCEPTION) << "Failure:operator " << prim->name() << " init failed" | |||
| << " trace: " << trace::DumpSourceLines(cnode); | |||
| } | |||
| } | |||
| void ExtractInformation(const std::vector<AnfNodePtr> &all_nodes) { | |||
| SetStridedSliceSplitStrategy(all_nodes); | |||
| for (auto &node : all_nodes) { | |||
| auto cnode = node->cast<CNodePtr>(); | |||
| @@ -1958,7 +2001,7 @@ void ExtractInformation(const std::vector<AnfNodePtr> &all_nodes) { | |||
| } | |||
| input_value.emplace_back(nullptr); | |||
| } | |||
| StrategyPtr strategyPtr = nullptr; | |||
| (*operator_).set_input_value(input_value); | |||
| (*operator_).set_outputs_dtype(cnode->Type()); | |||
| (*operator_).set_cnode(cnode); | |||
| @@ -1966,32 +2009,8 @@ void ExtractInformation(const std::vector<AnfNodePtr> &all_nodes) { | |||
| cnode->set_user_data<OperatorInfo>(operator_); | |||
| continue; | |||
| } | |||
| // load strategy checkpoint | |||
| // key of strategy map | |||
| std::string strategy_key_name = ""; | |||
| auto param_names = NodeParameterName(cnode, -1, 0); | |||
| if (!param_names.empty()) { | |||
| strategy_key_name = prim->name() + "_" + param_names[0].first; | |||
| } | |||
| bool load_strategy_from_ckpt = | |||
| StrategyCheckpoint::GetInstance().LoadCheckPointOn() && stra_map.find(strategy_key_name) != stra_map.end(); | |||
| if ((!StrategyFound(attrs) && !load_strategy_from_ckpt) && !cnode->HasPrimalAttr(IN_STRATEGY)) { | |||
| MS_LOG(INFO) << "ExtractInformation: the strategy of node " << node->ToString() << " prim " << prim->name() | |||
| << " is empty, using batch parallel"; | |||
| strategyPtr = GenerateBatchParallelStrategy(operator_, prim); | |||
| } else if (cnode->HasPrimalAttr(IN_STRATEGY)) { | |||
| strategyPtr = ExtractStrategy(cnode->GetPrimalAttr(IN_STRATEGY)); | |||
| } else if (StrategyFound(attrs)) { | |||
| strategyPtr = ExtractStrategy(attrs[IN_STRATEGY]); | |||
| } else { | |||
| strategyPtr = stra_map[strategy_key_name]; | |||
| } | |||
| MS_EXCEPTION_IF_NULL(strategyPtr); | |||
| if (operator_->Init(strategyPtr) == FAILED) { | |||
| MS_LOG(EXCEPTION) << "Failure:operator " << prim->name() << " init failed" | |||
| << " trace: " << trace::DumpSourceLines(cnode); | |||
| } | |||
| ExtractStrategyAndInit(cnode, prim, operator_); | |||
| cnode->set_user_data<OperatorInfo>(operator_); | |||
| } | |||
| } | |||
| @@ -2268,7 +2287,7 @@ void ReshapeInit(const std::vector<AnfNodePtr> &all_nodes) { | |||
| auto reshape_info_ptr = std::dynamic_pointer_cast<ReshapeInfo>(operator_info); | |||
| reshape_info_ptr->SetOutputLayout(*prev_layout_ptr); | |||
| } | |||
| if (operator_info->Init(nullptr) == FAILED) { | |||
| if (operator_info->Init(nullptr, nullptr) == FAILED) { | |||
| MS_LOG(EXCEPTION) << "Failure:operator " << prim->ToString() << " init failed"; | |||
| } | |||
| } | |||
| @@ -3102,6 +3121,22 @@ bool IsInsertVirtualOutput(const FuncGraphPtr &root) { | |||
| current_stage == split_stage_num - 1); | |||
| } | |||
| static void HandleGroupInfo() { | |||
| auto group_info = g_device_manager->group_info(); | |||
| if (StrategyCheckpoint::GetInstance().group_info_save_on() && | |||
| StrategyCheckpoint::GetInstance().SaveGroupInfo(group_info) != SUCCESS) { | |||
| MS_LOG(EXCEPTION) << "Save group info failed"; | |||
| } | |||
| } | |||
| static void PipelinePostProcess(const FuncGraphPtr &root, const std::vector<AnfNodePtr> &all_nodes) { | |||
| auto pipeline_stages = ParallelContext::GetInstance()->pipeline_stage_split_num(); | |||
| if (pipeline_stages > 1) { | |||
| AddVirtualAssignAdd(root); | |||
| HandleReceiveParam(root, all_nodes); | |||
| } | |||
| } | |||
| bool StepParallel(const FuncGraphPtr &root, const opt::OptimizerPtr &optimizer) { | |||
| #if ((defined ENABLE_CPU) && (!defined _WIN32)) | |||
| if (ps::PSContext::instance()->is_server() || ps::PSContext::instance()->is_scheduler()) { | |||
| @@ -3202,16 +3237,9 @@ bool StepParallel(const FuncGraphPtr &root, const opt::OptimizerPtr &optimizer) | |||
| // ForwardCommunication BackwardCommunication TensorRedistribution | |||
| ParallelCommunication(root, all_nodes, manager); | |||
| if (pipeline_stages > 1) { | |||
| AddVirtualAssignAdd(root); | |||
| HandleReceiveParam(root, all_nodes); | |||
| } | |||
| PipelinePostProcess(root, all_nodes); | |||
| auto group_info = g_device_manager->group_info(); | |||
| if (StrategyCheckpoint::GetInstance().group_info_save_on() && | |||
| StrategyCheckpoint::GetInstance().SaveGroupInfo(group_info) != SUCCESS) { | |||
| MS_LOG(EXCEPTION) << "Save group info failed"; | |||
| } | |||
| HandleGroupInfo(); | |||
| // handle full split parammeters in grad accumulation, do not contain optimizer-sharding's parameter | |||
| HandleFullySplitParameters(root); | |||
| @@ -67,7 +67,7 @@ TEST_F(TestActivationInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| activation->Init(strategy); | |||
| activation->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = activation->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8, 16}; | |||
| @@ -78,7 +78,7 @@ TEST_F(TestActivationInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| activation->Init(strategy); | |||
| activation->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = activation->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = activation->outputs_tensor_info(); | |||
| @@ -99,7 +99,7 @@ TEST_F(TestActivationInfo, GetTensorLayout1) { | |||
| Strategys str = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| activation->Init(strategy); | |||
| activation->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = activation->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = activation->outputs_tensor_info(); | |||
| @@ -120,7 +120,7 @@ TEST_F(TestActivationInfo, GetForwardOp1) { | |||
| Strategys inputs = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| activation->Init(strategy); | |||
| activation->Init(strategy, nullptr); | |||
| OperatorVector forward_op = activation->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -131,7 +131,7 @@ TEST_F(TestActivationInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{1, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| activation->Init(strategy); | |||
| activation->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = activation->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(0); | |||
| @@ -151,7 +151,7 @@ TEST_F(TestActivationInfo, GetMirrorOPs2) { | |||
| Strategys inputs = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| activation->Init(strategy); | |||
| activation->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = activation->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -164,7 +164,7 @@ TEST_F(TestActivationInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = activation->Init(strategy); | |||
| Status ret = activation->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -173,7 +173,7 @@ TEST_F(TestActivationInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = activation->Init(strategy); | |||
| Status ret = activation->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -81,7 +81,7 @@ TEST_F(TestActivation, test_activation_strategies) { | |||
| ASSERT_NE(sp, nullptr); | |||
| Cost cost = *(swc->cost_list[0]); | |||
| act_ptr_->InitForCostModel(sp); | |||
| act_ptr_->InitForCostModel(sp, nullptr); | |||
| std::vector<TensorInfo> inputs_info = act_ptr_->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs_info = act_ptr_->outputs_tensor_info(); | |||
| ASSERT_DOUBLE_EQ(act_ptr_->operator_cost()->GetComputationCost(inputs_info, outputs_info, sp->GetInputStage()), | |||
| @@ -106,7 +106,7 @@ TEST_F(TestActivation, test_softmax_strategies) { | |||
| Dimensions input0_stra = stra[0]; | |||
| ASSERT_GT(input0_stra.size(), 2); | |||
| ASSERT_EQ(input0_stra[2], 1); | |||
| soft_ptr_->InitForCostModel(sp); | |||
| soft_ptr_->InitForCostModel(sp, nullptr); | |||
| std::vector<TensorInfo> inputs_info = soft_ptr_->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs_info = soft_ptr_->outputs_tensor_info(); | |||
| ASSERT_DOUBLE_EQ(soft_ptr_->operator_cost()->GetComputationCost(inputs_info, outputs_info, sp->GetInputStage()), | |||
| @@ -66,7 +66,7 @@ TEST_F(TestGeLUInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| gelu->Init(strategy); | |||
| gelu->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = gelu->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 1, 16}; | |||
| @@ -77,7 +77,7 @@ TEST_F(TestGeLUInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| gelu->Init(strategy); | |||
| gelu->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = gelu->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = gelu->outputs_tensor_info(); | |||
| @@ -98,7 +98,7 @@ TEST_F(TestGeLUInfo, GetTensorLayout1) { | |||
| Strategys str = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| gelu->Init(strategy); | |||
| gelu->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = gelu->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = gelu->outputs_tensor_info(); | |||
| @@ -119,7 +119,7 @@ TEST_F(TestGeLUInfo, GetForwardOp1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| gelu->Init(strategy); | |||
| gelu->Init(strategy, nullptr); | |||
| OperatorVector forward_op = gelu->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -130,7 +130,7 @@ TEST_F(TestGeLUInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| gelu->Init(strategy); | |||
| gelu->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = gelu->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -143,7 +143,7 @@ TEST_F(TestGeLUInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = gelu->Init(strategy); | |||
| Status ret = gelu->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -152,7 +152,7 @@ TEST_F(TestGeLUInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = gelu->Init(strategy); | |||
| Status ret = gelu->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -161,7 +161,7 @@ TEST_F(TestGeLUInfo, CheckStrategy3) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = gelu->Init(strategy); | |||
| Status ret = gelu->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| @@ -67,7 +67,7 @@ TEST_F(TestL2NormalizeInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{4, 1, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| norm->Init(strategy); | |||
| norm->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = norm->dev_matrix_shape(); | |||
| Shape expect = {4, 1, 8}; | |||
| @@ -78,7 +78,7 @@ TEST_F(TestL2NormalizeInfo, InferSliceShape1) { | |||
| Strategys str = {{4, 1, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| norm->Init(strategy); | |||
| norm->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = norm->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = norm->outputs_tensor_info(); | |||
| @@ -99,7 +99,7 @@ TEST_F(TestL2NormalizeInfo, GetTensorLayout1) { | |||
| Strategys str = {{4, 1, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| norm->Init(strategy); | |||
| norm->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = norm->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = norm->outputs_tensor_info(); | |||
| @@ -120,7 +120,7 @@ TEST_F(TestL2NormalizeInfo, GetForwardOp1) { | |||
| Strategys inputs = {{4, 1, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| norm->Init(strategy); | |||
| norm->Init(strategy, nullptr); | |||
| OperatorVector forward_op = norm->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -131,7 +131,7 @@ TEST_F(TestL2NormalizeInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{4, 1, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| norm->Init(strategy); | |||
| norm->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = norm->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -143,7 +143,7 @@ TEST_F(TestL2NormalizeInfo, CheckStrategy1) { | |||
| Strategys inputs = {{4, 1, 8}, {4, 1, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = norm->Init(strategy); | |||
| Status ret = norm->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -151,7 +151,7 @@ TEST_F(TestL2NormalizeInfo, CheckStrategy2) { | |||
| Strategys inputs = {{4, 2, 3}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = norm->Init(strategy); | |||
| Status ret = norm->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -159,7 +159,7 @@ TEST_F(TestL2NormalizeInfo, CheckStrategy3) { | |||
| Strategys inputs = {{4, 2, 3, 4}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = norm->Init(strategy); | |||
| Status ret = norm->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -167,7 +167,7 @@ TEST_F(TestL2NormalizeInfo, CheckStrategy4) { | |||
| Strategys inputs = {{4, 1, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = norm->Init(strategy); | |||
| Status ret = norm->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| @@ -175,7 +175,7 @@ TEST_F(TestL2NormalizeInfo, mirror_ops) { | |||
| Strategys inputs = {{2, 1, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| norm->Init(strategy); | |||
| norm->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = norm->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(0); | |||
| @@ -67,7 +67,7 @@ TEST_F(TestLogSoftmaxInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| log_softmax->Init(strategy); | |||
| log_softmax->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = log_softmax->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 1, 16}; | |||
| @@ -78,7 +78,7 @@ TEST_F(TestLogSoftmaxInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| log_softmax->Init(strategy); | |||
| log_softmax->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = log_softmax->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = log_softmax->outputs_tensor_info(); | |||
| @@ -99,7 +99,7 @@ TEST_F(TestLogSoftmaxInfo, GetTensorLayout1) { | |||
| Strategys str = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| log_softmax->Init(strategy); | |||
| log_softmax->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = log_softmax->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = log_softmax->outputs_tensor_info(); | |||
| @@ -120,7 +120,7 @@ TEST_F(TestLogSoftmaxInfo, GetForwardOp1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| log_softmax->Init(strategy); | |||
| log_softmax->Init(strategy, nullptr); | |||
| OperatorVector forward_op = log_softmax->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -131,7 +131,7 @@ TEST_F(TestLogSoftmaxInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| log_softmax->Init(strategy); | |||
| log_softmax->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = log_softmax->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -144,7 +144,7 @@ TEST_F(TestLogSoftmaxInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = log_softmax->Init(strategy); | |||
| Status ret = log_softmax->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -153,7 +153,7 @@ TEST_F(TestLogSoftmaxInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = log_softmax->Init(strategy); | |||
| Status ret = log_softmax->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -162,7 +162,7 @@ TEST_F(TestLogSoftmaxInfo, CheckStrategy3) { | |||
| Strategys inputs = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = log_softmax->Init(strategy); | |||
| Status ret = log_softmax->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -170,7 +170,7 @@ TEST_F(TestLogSoftmaxInfo, GetDeviceList1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| log_softmax->Init(strategy); | |||
| log_softmax->Init(strategy, nullptr); | |||
| RankList dev_list = log_softmax->stage_device_list(); | |||
| ASSERT_EQ(dev_list.size(), 128); | |||
| } | |||
| @@ -97,7 +97,7 @@ TEST_F(TestMatmulInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = matmul1->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8, 16, 1}; | |||
| @@ -108,7 +108,7 @@ TEST_F(TestMatmulInfo, InferDevMatrixShape2) { | |||
| Strategys inputs = {{2, 4, 8, 8}, {2, 4, 8, 2}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = matmul1->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8, 8, 2}; | |||
| @@ -120,7 +120,7 @@ TEST_F(TestMatmulInfo, InferDevMatrixShape3) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul2->Init(strategy); | |||
| matmul2->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = matmul2->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8, 16, 1}; | |||
| @@ -132,7 +132,7 @@ TEST_F(TestMatmulInfo, InferDevMatrixShape4) { | |||
| Strategys inputs = {{2, 4, 8, 8}, {2, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul2->Init(strategy); | |||
| matmul2->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = matmul2->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8, 8, 2}; | |||
| @@ -144,7 +144,7 @@ TEST_F(TestMatmulInfo, InferDevMatrixShape5) { | |||
| Strategys inputs = {{8, 16}, {2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul3->Init(strategy); | |||
| matmul3->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = matmul3->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8, 16, 1}; | |||
| @@ -156,7 +156,7 @@ TEST_F(TestMatmulInfo, InferDevMatrixShape6) { | |||
| Strategys inputs = {{8, 8}, {2, 4, 2, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul3->Init(strategy); | |||
| matmul3->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = matmul3->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8, 8, 2}; | |||
| @@ -167,7 +167,7 @@ TEST_F(TestMatmulInfo, InferTensorMap1) { | |||
| Strategys str = {{2, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = matmul1->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = matmul1->outputs_tensor_info(); | |||
| @@ -193,7 +193,7 @@ TEST_F(TestMatmulInfo, InferTensorMap2) { | |||
| Strategys str = {{2, 4, 8, 16}, {1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| matmul2->Init(strategy); | |||
| matmul2->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = matmul2->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = matmul2->outputs_tensor_info(); | |||
| @@ -219,7 +219,7 @@ TEST_F(TestMatmulInfo, InferTensorMap3) { | |||
| Strategys str = {{8, 16}, {2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| matmul3->Init(strategy); | |||
| matmul3->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = matmul3->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = matmul3->outputs_tensor_info(); | |||
| @@ -244,7 +244,7 @@ TEST_F(TestMatmulInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = matmul1->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = matmul1->outputs_tensor_info(); | |||
| @@ -270,7 +270,7 @@ TEST_F(TestMatmulInfo, InferSliceShape2) { | |||
| Strategys str = {{2, 4, 8, 16}, {1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| matmul2->Init(strategy); | |||
| matmul2->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = matmul2->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = matmul2->outputs_tensor_info(); | |||
| @@ -296,7 +296,7 @@ TEST_F(TestMatmulInfo, InferSliceShape3) { | |||
| Strategys str = {{8, 16}, {2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| matmul3->Init(strategy); | |||
| matmul3->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = matmul3->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = matmul3->outputs_tensor_info(); | |||
| @@ -322,7 +322,7 @@ TEST_F(TestMatmulInfo, GetTensorLayout3) { | |||
| Strategys str = {{8, 16}, {2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| matmul3->Init(strategy); | |||
| matmul3->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = matmul3->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = matmul3->outputs_tensor_info(); | |||
| @@ -347,7 +347,7 @@ TEST_F(TestMatmulInfo, GetForwardOp1) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| OperatorVector forward_op = matmul1->forward_op(); | |||
| OperatorArgs operator_args = forward_op.at(0).second; | |||
| @@ -373,7 +373,7 @@ TEST_F(TestMatmulInfo, GetForwardOp2) { | |||
| Strategys inputs = {{2, 4, 8, 1}, {2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| OperatorVector forward_op = matmul1->forward_op(); | |||
| ASSERT_EQ(forward_op.size(), 0); | |||
| @@ -383,7 +383,7 @@ TEST_F(TestMatmulInfo, GetVirtualDivOp1) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| OperatorVector virtual_div_op = matmul1->virtual_div_op(); | |||
| OperatorArgs operator_args = virtual_div_op.at(0).second; | |||
| @@ -402,7 +402,7 @@ TEST_F(TestMatmulInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = matmul1->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(1); | |||
| @@ -422,7 +422,7 @@ TEST_F(TestMatmulInfo, GetMirrorOPs2) { | |||
| Strategys inputs = {{2, 4, 1, 16}, {8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul2->Init(strategy); | |||
| matmul2->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = matmul2->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(1); | |||
| @@ -442,7 +442,7 @@ TEST_F(TestMatmulInfo, GetMirrorOPs3) { | |||
| Strategys inputs = {{8, 16}, {2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul3->Init(strategy); | |||
| matmul3->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = matmul3->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(1); | |||
| @@ -460,7 +460,7 @@ TEST_F(TestMatmulInfo, GetMirrorOPs4) { | |||
| Strategys inputs = {{2, 4, 1, 16}, {2, 4, 16, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = matmul1->mirror_ops(); | |||
| ASSERT_EQ(mirror_ops.size(), 2); | |||
| @@ -471,8 +471,8 @@ TEST_F(TestMatmulInfo, InitTwice) { | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| // init twice | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy); | |||
| matmul1->Init(strategy, nullptr); | |||
| matmul1->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = matmul1->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(1); | |||
| @@ -492,7 +492,7 @@ TEST_F(TestMatmulInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = matmul1->Init(strategy); | |||
| Status ret = matmul1->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -501,7 +501,7 @@ TEST_F(TestMatmulInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = matmul1->Init(strategy); | |||
| Status ret = matmul1->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -510,7 +510,7 @@ TEST_F(TestMatmulInfo, CheckStrategy3) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {2, 4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = matmul1->Init(strategy); | |||
| Status ret = matmul1->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -519,7 +519,7 @@ TEST_F(TestMatmulInfo, CheckStrategy4) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {2, 3, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = matmul1->Init(strategy); | |||
| Status ret = matmul1->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -528,7 +528,7 @@ TEST_F(TestMatmulInfo, CheckStrategy5) { | |||
| Strategys inputs = {{0, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = matmul1->Init(strategy); | |||
| Status ret = matmul1->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -537,7 +537,7 @@ TEST_F(TestMatmulInfo, CheckStrategy6) { | |||
| Strategys inputs = {{-1, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = matmul1->Init(strategy); | |||
| Status ret = matmul1->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -546,7 +546,7 @@ TEST_F(TestMatmulInfo, CheckStrategy7) { | |||
| Strategys inputs = {{4, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = matmul1->Init(strategy); | |||
| Status ret = matmul1->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -555,7 +555,7 @@ TEST_F(TestMatmulInfo, InitFailed) { | |||
| Strategys inputs = {{4, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = matmul4->Init(strategy); | |||
| Status ret = matmul4->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -566,7 +566,7 @@ TEST_F(TestMatmulInfo, test_GenerateStrategies1) { | |||
| for (const auto& swc : sc) { | |||
| StrategyPtr sp = swc->strategy_ptr; | |||
| Cost cost = *(swc->cost_list[0]); | |||
| matmul1->InitForCostModel(sp); | |||
| matmul1->InitForCostModel(sp, nullptr); | |||
| std::vector<TensorInfo> inputs_info = matmul1->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs_info = matmul1->outputs_tensor_info(); | |||
| ASSERT_DOUBLE_EQ(matmul1->operator_cost()->GetComputationCost(inputs_info, outputs_info, sp->GetInputStage()), | |||
| @@ -582,7 +582,7 @@ TEST_F(TestMatmulInfo, test_GenerateStrategies2) { | |||
| for (const auto& swc : sc) { | |||
| StrategyPtr sp = swc->strategy_ptr; | |||
| Cost cost = *(swc->cost_list[0]); | |||
| matmul3->InitForCostModel(sp); | |||
| matmul3->InitForCostModel(sp, nullptr); | |||
| std::vector<TensorInfo> inputs_info = matmul3->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs_info = matmul3->outputs_tensor_info(); | |||
| @@ -67,7 +67,7 @@ TEST_F(TestOneHotInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{8, 1}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status status = onehot_info->Init(strategy); | |||
| Status status = onehot_info->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| Shape dev_matrix_shape = onehot_info->dev_matrix_shape(); | |||
| @@ -79,7 +79,7 @@ TEST_F(TestOneHotInfo, InferDevMatrixShape2) { | |||
| Strategys inputs = {{4, 1}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status status = onehot_info->Init(strategy); | |||
| Status status = onehot_info->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| Shape dev_matrix_shape = onehot_info->dev_matrix_shape(); | |||
| @@ -91,7 +91,7 @@ TEST_F(TestOneHotInfo, InferDevMatrixShape3) { | |||
| Strategys inputs = {{4, 2}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status status = onehot_info->Init(strategy); | |||
| Status status = onehot_info->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| Shape dev_matrix_shape = onehot_info->dev_matrix_shape(); | |||
| @@ -103,7 +103,7 @@ TEST_F(TestOneHotInfo, InferTensorMap2) { | |||
| Strategys str = {{8, 1}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| Status status = onehot_info->Init(strategy); | |||
| Status status = onehot_info->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| std::vector<TensorInfo> inputs = onehot_info->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = onehot_info->outputs_tensor_info(); | |||
| @@ -125,7 +125,7 @@ TEST_F(TestOneHotInfo, InferSliceShape1) { | |||
| Strategys str = {{8, 1}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| Status status = onehot_info->Init(strategy); | |||
| Status status = onehot_info->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| std::vector<TensorInfo> inputs = onehot_info->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = onehot_info->outputs_tensor_info(); | |||
| @@ -147,7 +147,7 @@ TEST_F(TestOneHotInfo, InferSliceShape2) { | |||
| Strategys str = {{4, 2}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| Status status = onehot_info->Init(strategy); | |||
| Status status = onehot_info->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| std::vector<TensorInfo> inputs = onehot_info->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = onehot_info->outputs_tensor_info(); | |||
| @@ -169,7 +169,7 @@ TEST_F(TestOneHotInfo, InferSliceShape3) { | |||
| Strategys str = {{2, 2}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| Status status = onehot_info->Init(strategy); | |||
| Status status = onehot_info->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| std::vector<TensorInfo> inputs = onehot_info->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = onehot_info->outputs_tensor_info(); | |||
| @@ -191,7 +191,7 @@ TEST_F(TestOneHotInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{8, 1}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status status = onehot_info->Init(strategy); | |||
| Status status = onehot_info->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| MirrorOps mirror_ops = onehot_info->mirror_ops(); | |||
| @@ -202,7 +202,7 @@ TEST_F(TestOneHotInfo, CheckStrategy1) { | |||
| Strategys inputs = {{16}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = onehot_info->Init(strategy); | |||
| Status ret = onehot_info->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| } // namespace parallel | |||
| @@ -67,7 +67,7 @@ TEST_F(TestOneHotInfo2, InferDevMatrixShape1) { | |||
| Strategys inputs = {{1, 8}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status status = onehot_info2->Init(strategy); | |||
| Status status = onehot_info2->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| Shape dev_matrix_shape = onehot_info2->dev_matrix_shape(); | |||
| @@ -79,7 +79,7 @@ TEST_F(TestOneHotInfo2, InferDevMatrixShape2) { | |||
| Strategys inputs = {{1, 4}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status status = onehot_info2->Init(strategy); | |||
| Status status = onehot_info2->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| Shape dev_matrix_shape = onehot_info2->dev_matrix_shape(); | |||
| @@ -91,7 +91,7 @@ TEST_F(TestOneHotInfo2, InferDevMatrixShape3) { | |||
| Strategys inputs = {{2, 4}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status status = onehot_info2->Init(strategy); | |||
| Status status = onehot_info2->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| Shape dev_matrix_shape = onehot_info2->dev_matrix_shape(); | |||
| @@ -103,7 +103,7 @@ TEST_F(TestOneHotInfo2, InferTensorMap2) { | |||
| Strategys str = {{1, 8}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| Status status = onehot_info2->Init(strategy); | |||
| Status status = onehot_info2->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| std::vector<TensorInfo> inputs = onehot_info2->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = onehot_info2->outputs_tensor_info(); | |||
| @@ -125,7 +125,7 @@ TEST_F(TestOneHotInfo2, InferSliceShape1) { | |||
| Strategys str = {{1, 8}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| Status status = onehot_info2->Init(strategy); | |||
| Status status = onehot_info2->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| std::vector<TensorInfo> inputs = onehot_info2->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = onehot_info2->outputs_tensor_info(); | |||
| @@ -147,7 +147,7 @@ TEST_F(TestOneHotInfo2, InferSliceShape2) { | |||
| Strategys str = {{2, 4}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| Status status = onehot_info2->Init(strategy); | |||
| Status status = onehot_info2->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| std::vector<TensorInfo> inputs = onehot_info2->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = onehot_info2->outputs_tensor_info(); | |||
| @@ -169,7 +169,7 @@ TEST_F(TestOneHotInfo2, InferSliceShape3) { | |||
| Strategys str = {{2, 2}, {}, {}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| Status status = onehot_info2->Init(strategy); | |||
| Status status = onehot_info2->Init(strategy, nullptr); | |||
| ASSERT_EQ(status, SUCCESS); | |||
| std::vector<TensorInfo> inputs = onehot_info2->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = onehot_info2->outputs_tensor_info(); | |||
| @@ -66,7 +66,7 @@ TEST_F(TestPowInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| pow->Init(strategy); | |||
| pow->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = pow->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8}; | |||
| @@ -77,7 +77,7 @@ TEST_F(TestPowInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| pow->Init(strategy); | |||
| pow->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = pow->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = pow->outputs_tensor_info(); | |||
| @@ -98,7 +98,7 @@ TEST_F(TestPowInfo, GetTensorLayout1) { | |||
| Strategys str = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| pow->Init(strategy); | |||
| pow->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = pow->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = pow->outputs_tensor_info(); | |||
| @@ -119,7 +119,7 @@ TEST_F(TestPowInfo, GetForwardOp1) { | |||
| Strategys inputs = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| pow->Init(strategy); | |||
| pow->Init(strategy, nullptr); | |||
| OperatorVector forward_op = pow->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -130,7 +130,7 @@ TEST_F(TestPowInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| pow->Init(strategy); | |||
| pow->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = pow->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -142,7 +142,7 @@ TEST_F(TestPowInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = pow->Init(strategy); | |||
| Status ret = pow->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -150,7 +150,7 @@ TEST_F(TestPowInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = pow->Init(strategy); | |||
| Status ret = pow->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -158,7 +158,7 @@ TEST_F(TestPowInfo, CheckStrategy3) { | |||
| Strategys inputs = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = pow->Init(strategy); | |||
| Status ret = pow->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| @@ -67,7 +67,7 @@ TEST_F(TestPReLUInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 1, 8, 16}, {1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| prelu->Init(strategy); | |||
| prelu->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = prelu->dev_matrix_shape(); | |||
| Shape expect = {2, 1, 8, 16, 4}; | |||
| @@ -78,7 +78,7 @@ TEST_F(TestPReLUInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 1, 8, 16}, {1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| prelu->Init(strategy); | |||
| prelu->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = prelu->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = prelu->outputs_tensor_info(); | |||
| @@ -101,7 +101,7 @@ TEST_F(TestPReLUInfo, GetTensorLayout1) { | |||
| Strategys str = {{2, 1, 8, 16}, {1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| prelu->Init(strategy); | |||
| prelu->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = prelu->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = prelu->outputs_tensor_info(); | |||
| @@ -124,7 +124,7 @@ TEST_F(TestPReLUInfo, GetTensorLayout1) { | |||
| TEST_F(TestPReLUInfo, GetMirrorOPs1) { | |||
| Strategys str = {{2, 1, 2, 2}, {1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| prelu->Init(strategy); | |||
| prelu->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = prelu->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(1); | |||
| OperatorArgs operator_args = mirror_op.at(0).second; | |||
| @@ -141,14 +141,14 @@ TEST_F(TestPReLUInfo, CheckStrategy1) { | |||
| // Success: {{2,1,8,16},{1}} | |||
| Strategys inputs = {{2, 1, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = prelu->Init(strategy); | |||
| Status ret = prelu->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| TEST_F(TestPReLUInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8, 16}, {4}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = prelu->Init(strategy); | |||
| Status ret = prelu->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| @@ -172,7 +172,7 @@ TEST_F(TestPReLUInfo, InferDevMatrixShape_2d1) { | |||
| Strategys inputs = {{128, 1}, {1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| prelu_2d->Init(strategy); | |||
| prelu_2d->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = prelu_2d->dev_matrix_shape(); | |||
| Shape expect = {128, 1, 8}; | |||
| @@ -183,7 +183,7 @@ TEST_F(TestPReLUInfo, InferSliceShape_2d1) { | |||
| Strategys str = {{128, 1}, {1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| prelu_2d->Init(strategy); | |||
| prelu_2d->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = prelu_2d->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = prelu_2d->outputs_tensor_info(); | |||
| @@ -206,7 +206,7 @@ TEST_F(TestPReLUInfo, GetTensorLayout_2d1) { | |||
| Strategys str = {{128, 1}, {1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| prelu_2d->Init(strategy); | |||
| prelu_2d->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = prelu_2d->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = prelu_2d->outputs_tensor_info(); | |||
| @@ -229,7 +229,7 @@ TEST_F(TestPReLUInfo, GetTensorLayout_2d1) { | |||
| TEST_F(TestPReLUInfo, GetMirrorOPs_2d1) { | |||
| Strategys str = {{128, 1}, {1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| prelu_2d->Init(strategy); | |||
| prelu_2d->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = prelu_2d->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(1); | |||
| OperatorArgs operator_args = mirror_op.at(0).second; | |||
| @@ -246,14 +246,14 @@ TEST_F(TestPReLUInfo, CheckStrategy_2d1) { | |||
| // Success: {{2,1,8,16},{1}} | |||
| Strategys inputs = {{128, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = prelu_2d->Init(strategy); | |||
| Status ret = prelu_2d->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| TEST_F(TestPReLUInfo, CheckStrategy_2d2) { | |||
| Strategys inputs = {{128, 4}, {4}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = prelu_2d->Init(strategy); | |||
| Status ret = prelu_2d->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| @@ -71,7 +71,7 @@ TEST_F(TestReduceSumInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| reduce_sum->Init(strategy); | |||
| reduce_sum->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = reduce_sum->dev_matrix_shape(); | |||
| Shape expect = {4, 8, 1}; | |||
| @@ -82,7 +82,7 @@ TEST_F(TestReduceSumInfo, InferSliceShape1) { | |||
| Strategys str = {{4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| reduce_sum->Init(strategy); | |||
| reduce_sum->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = reduce_sum->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = reduce_sum->outputs_tensor_info(); | |||
| @@ -103,7 +103,7 @@ TEST_F(TestReduceSumInfo, GetTensorLayout1) { | |||
| Strategys str = {{4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| reduce_sum->Init(strategy); | |||
| reduce_sum->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = reduce_sum->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = reduce_sum->outputs_tensor_info(); | |||
| @@ -124,7 +124,7 @@ TEST_F(TestReduceSumInfo, GetForwardOp1) { | |||
| Strategys inputs = {{4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| reduce_sum->Init(strategy); | |||
| reduce_sum->Init(strategy, nullptr); | |||
| OperatorVector forward_op = reduce_sum->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -135,7 +135,7 @@ TEST_F(TestReduceSumInfo, GetForwardOp2) { | |||
| Strategys inputs = {{4, 4, 2}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| reduce_sum->Init(strategy); | |||
| reduce_sum->Init(strategy, nullptr); | |||
| OperatorVector forward_op = reduce_sum->forward_op(); | |||
| OperatorArgs operator_args = forward_op.at(0).second; | |||
| OperatorAttrs operator_attrs = operator_args.first; | |||
| @@ -159,7 +159,7 @@ TEST_F(TestReduceSumInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| reduce_sum->Init(strategy); | |||
| reduce_sum->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = reduce_sum->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -171,7 +171,7 @@ TEST_F(TestReduceSumInfo, GetMirrorOPs2) { | |||
| Strategys inputs = {{4, 4, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| reduce_sum->Init(strategy); | |||
| reduce_sum->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = reduce_sum->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(0); | |||
| OperatorArgs operator_args = mirror_op.at(0).second; | |||
| @@ -190,7 +190,7 @@ TEST_F(TestReduceSumInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = reduce_sum->Init(strategy); | |||
| Status ret = reduce_sum->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -198,7 +198,7 @@ TEST_F(TestReduceSumInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = reduce_sum->Init(strategy); | |||
| Status ret = reduce_sum->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -206,7 +206,7 @@ TEST_F(TestReduceSumInfo, CheckStrategy3) { | |||
| Strategys inputs = {{4, 4, 2}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = reduce_sum->Init(strategy); | |||
| Status ret = reduce_sum->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| @@ -214,7 +214,7 @@ TEST_F(TestReduceSumInfo, CheckStrategy4) { | |||
| Strategys inputs = {{4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = reduce_sum->Init(strategy); | |||
| Status ret = reduce_sum->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| } // namespace parallel | |||
| @@ -71,7 +71,7 @@ TEST_F(TestReshapeInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{4, 1, 1, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| reshape->Init(strategy); | |||
| reshape->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = reshape->dev_matrix_shape(); | |||
| Shape expect = {4, 1, 1, 1, 8}; | |||
| @@ -82,7 +82,7 @@ TEST_F(TestReshapeInfo, InferDevMatrixShape2) { | |||
| Strategys inputs = {{32, 1, 1, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| reshape->Init(strategy); | |||
| reshape->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = reshape->dev_matrix_shape(); | |||
| Shape expect = {32, 1, 1, 1}; | |||
| @@ -93,7 +93,7 @@ TEST_F(TestReshapeInfo, InferSliceShape1) { | |||
| Strategys str = {{4, 1, 1, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| reshape->Init(strategy); | |||
| reshape->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = reshape->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = reshape->outputs_tensor_info(); | |||
| @@ -114,7 +114,7 @@ TEST_F(TestReshapeInfo, InferSliceShape2) { | |||
| Strategys str = {{32, 1, 1, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| reshape->Init(strategy); | |||
| reshape->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = reshape->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = reshape->outputs_tensor_info(); | |||
| @@ -135,7 +135,7 @@ TEST_F(TestReshapeInfo, GetTensorLayout1) { | |||
| Strategys str = {{4, 1, 1, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| reshape->Init(strategy); | |||
| reshape->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = reshape->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = reshape->outputs_tensor_info(); | |||
| @@ -156,7 +156,7 @@ TEST_F(TestReshapeInfo, GetTensorLayout2) { | |||
| Strategys str = {{32, 1, 1, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| reshape->Init(strategy); | |||
| reshape->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = reshape->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = reshape->outputs_tensor_info(); | |||
| @@ -177,7 +177,7 @@ TEST_F(TestReshapeInfo, GetForwardOp1) { | |||
| Strategys inputs = {{4, 1, 1, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| reshape->Init(strategy); | |||
| reshape->Init(strategy, nullptr); | |||
| OperatorVector forward_op = reshape->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -188,7 +188,7 @@ TEST_F(TestReshapeInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{4, 1, 1, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| reshape->Init(strategy); | |||
| reshape->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = reshape->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -200,7 +200,7 @@ TEST_F(TestReshapeInfo, CheckStrategy1) { | |||
| Strategys inputs = {{1, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = reshape->Init(strategy); | |||
| Status ret = reshape->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -208,7 +208,7 @@ TEST_F(TestReshapeInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = reshape->Init(strategy); | |||
| Status ret = reshape->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -216,7 +216,7 @@ TEST_F(TestReshapeInfo, CheckStrategy3) { | |||
| Strategys inputs = {{4, 1, 1, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = reshape->Init(strategy); | |||
| Status ret = reshape->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| } // namespace parallel | |||
| @@ -67,7 +67,7 @@ TEST_F(TestSoftmaxLoss, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 8, 1}, {2, 4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| loss->Init(strategy); | |||
| loss->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = loss->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8, 1}; | |||
| @@ -78,7 +78,7 @@ TEST_F(TestSoftmaxLoss, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 8, 1}, {2, 4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| loss->Init(strategy); | |||
| loss->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = loss->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = loss->outputs_tensor_info(); | |||
| @@ -107,7 +107,7 @@ TEST_F(TestSoftmaxLoss, GetTensorLayout1) { | |||
| Strategys str = {{2, 4, 8, 1}, {2, 4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| loss->Init(strategy); | |||
| loss->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = loss->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = loss->outputs_tensor_info(); | |||
| @@ -136,7 +136,7 @@ TEST_F(TestSoftmaxLoss, GetForwardOp1) { | |||
| Strategys inputs = {{2, 4, 8, 1}, {2, 4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| loss->Init(strategy); | |||
| loss->Init(strategy, nullptr); | |||
| OperatorVector forward_op = loss->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -147,7 +147,7 @@ TEST_F(TestSoftmaxLoss, GetMirrorOPs1) { | |||
| Strategys inputs = {{2, 4, 8, 1}, {2, 4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| loss->Init(strategy); | |||
| loss->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = loss->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -159,7 +159,7 @@ TEST_F(TestSoftmaxLoss, GetVirtualDivOPs1) { | |||
| Strategys inputs = {{1, 4, 8, 1}, {1, 4, 8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| loss->Init(strategy); | |||
| loss->Init(strategy, nullptr); | |||
| OperatorVector virtual_div_op = loss->virtual_div_op(); | |||
| OperatorArgs operator_args = virtual_div_op.at(0).second; | |||
| @@ -179,7 +179,7 @@ TEST_F(TestSoftmaxLoss, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = loss->Init(strategy); | |||
| Status ret = loss->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -188,7 +188,7 @@ TEST_F(TestSoftmaxLoss, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = loss->Init(strategy); | |||
| Status ret = loss->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -71,7 +71,7 @@ TEST_F(TestSoftmaxInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| softmax->Init(strategy); | |||
| softmax->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = softmax->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 1, 16}; | |||
| @@ -82,7 +82,7 @@ TEST_F(TestSoftmaxInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| softmax->Init(strategy); | |||
| softmax->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = softmax->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = softmax->outputs_tensor_info(); | |||
| @@ -103,7 +103,7 @@ TEST_F(TestSoftmaxInfo, GetTensorLayout1) { | |||
| Strategys str = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| softmax->Init(strategy); | |||
| softmax->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = softmax->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = softmax->outputs_tensor_info(); | |||
| @@ -124,7 +124,7 @@ TEST_F(TestSoftmaxInfo, GetForwardOp1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| softmax->Init(strategy); | |||
| softmax->Init(strategy, nullptr); | |||
| OperatorVector forward_op = softmax->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -135,7 +135,7 @@ TEST_F(TestSoftmaxInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| softmax->Init(strategy); | |||
| softmax->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = softmax->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -148,7 +148,7 @@ TEST_F(TestSoftmaxInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = softmax->Init(strategy); | |||
| Status ret = softmax->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -157,7 +157,7 @@ TEST_F(TestSoftmaxInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = softmax->Init(strategy); | |||
| Status ret = softmax->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -166,7 +166,7 @@ TEST_F(TestSoftmaxInfo, CheckStrategy3) { | |||
| Strategys inputs = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = softmax->Init(strategy); | |||
| Status ret = softmax->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -175,7 +175,7 @@ TEST_F(TestSoftmaxInfo, InitFailed1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = softmax2->Init(strategy); | |||
| Status ret = softmax2->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -184,7 +184,7 @@ TEST_F(TestSoftmaxInfo, InitFailed2) { | |||
| Strategys inputs = {{2, 4, 1, 100}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = softmax2->Init(strategy); | |||
| Status ret = softmax2->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -66,7 +66,7 @@ TEST_F(TestTanhInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| tanh->Init(strategy); | |||
| tanh->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = tanh->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 1, 16}; | |||
| @@ -77,7 +77,7 @@ TEST_F(TestTanhInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| tanh->Init(strategy); | |||
| tanh->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = tanh->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = tanh->outputs_tensor_info(); | |||
| @@ -98,7 +98,7 @@ TEST_F(TestTanhInfo, GetTensorLayout1) { | |||
| Strategys str = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| tanh->Init(strategy); | |||
| tanh->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = tanh->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = tanh->outputs_tensor_info(); | |||
| @@ -119,7 +119,7 @@ TEST_F(TestTanhInfo, GetForwardOp1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| tanh->Init(strategy); | |||
| tanh->Init(strategy, nullptr); | |||
| OperatorVector forward_op = tanh->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -130,7 +130,7 @@ TEST_F(TestTanhInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| tanh->Init(strategy); | |||
| tanh->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = tanh->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -143,7 +143,7 @@ TEST_F(TestTanhInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = tanh->Init(strategy); | |||
| Status ret = tanh->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -152,7 +152,7 @@ TEST_F(TestTanhInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = tanh->Init(strategy); | |||
| Status ret = tanh->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -161,7 +161,7 @@ TEST_F(TestTanhInfo, CheckStrategy3) { | |||
| Strategys inputs = {{2, 4, 1, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = tanh->Init(strategy); | |||
| Status ret = tanh->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| @@ -69,7 +69,7 @@ TEST_F(TestTensorAddInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 4}, {2, 4, 4}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| tensor_add->Init(strategy); | |||
| tensor_add->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = tensor_add->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 4}; | |||
| @@ -80,7 +80,7 @@ TEST_F(TestTensorAddInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 4}, {2, 4, 4}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| tensor_add->Init(strategy); | |||
| tensor_add->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = tensor_add->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = tensor_add->outputs_tensor_info(); | |||
| @@ -104,7 +104,7 @@ TEST_F(TestTensorAddInfo, GetTensorLayout1) { | |||
| Strategys str = {{2, 4, 4}, {2, 4, 4}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| tensor_add->Init(strategy); | |||
| tensor_add->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = tensor_add->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = tensor_add->outputs_tensor_info(); | |||
| @@ -128,7 +128,7 @@ TEST_F(TestTensorAddInfo, GetForwardOp1) { | |||
| Strategys inputs = {{2, 4, 4}, {2, 4, 4}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| tensor_add->Init(strategy); | |||
| tensor_add->Init(strategy, nullptr); | |||
| OperatorVector forward_op = tensor_add->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -139,7 +139,7 @@ TEST_F(TestTensorAddInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{2, 4, 4}, {2, 4, 4}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| tensor_add->Init(strategy); | |||
| tensor_add->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = tensor_add->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -151,7 +151,7 @@ TEST_F(TestTensorAddInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 4, 4}, {2, 6, 4}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = tensor_add->Init(strategy); | |||
| Status ret = tensor_add->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -159,7 +159,7 @@ TEST_F(TestTensorAddInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = tensor_add->Init(strategy); | |||
| Status ret = tensor_add->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -167,7 +167,7 @@ TEST_F(TestTensorAddInfo, CheckStrategy3) { | |||
| Strategys inputs = {{2, 4, 6}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = tensor_add->Init(strategy); | |||
| Status ret = tensor_add->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -175,7 +175,7 @@ TEST_F(TestTensorAddInfo, CheckStrategy4) { | |||
| Strategys inputs = {{2, 4, 4}, {2, 4, 4}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = tensor_add->Init(strategy); | |||
| Status ret = tensor_add->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| @@ -185,7 +185,7 @@ TEST_F(TestTensorAddInfo, GenerateStrategies) { | |||
| for (auto& swc : sc) { | |||
| StrategyPtr sp = swc->strategy_ptr; | |||
| Cost cost = *(swc->cost_list[0]); | |||
| tensor_add->InitForCostModel(sp); | |||
| tensor_add->InitForCostModel(sp, nullptr); | |||
| std::vector<TensorInfo> inputs_info = tensor_add->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs_info = tensor_add->outputs_tensor_info(); | |||
| double memory_cost0 = tensor_add->operator_cost()->GetComputationCost(inputs_info, outputs_info, sp->GetInputStage()); | |||
| @@ -207,7 +207,7 @@ TEST_F(TestTensorAddInfo, GenerateStrategies1) { | |||
| for (auto& swc : sc) { | |||
| StrategyPtr sp = swc->strategy_ptr; | |||
| Cost cost = *(swc->cost_list[0]); | |||
| tensor_add1->InitForCostModel(sp); | |||
| tensor_add1->InitForCostModel(sp, nullptr); | |||
| std::vector<TensorInfo> inputs_info = tensor_add1->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs_info = tensor_add1->outputs_tensor_info(); | |||
| double memory_cost0 = tensor_add1->operator_cost()->GetComputationCost(inputs_info, outputs_info, sp->GetInputStage()); | |||
| @@ -227,7 +227,7 @@ TEST_F(TestTensorAddInfo, mirror_ops) { | |||
| Strategys inputs = {{1, 8}, {4, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| tensor_add1->Init(strategy); | |||
| tensor_add1->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = tensor_add1->mirror_ops(); | |||
| OperatorVector mirror_op = mirror_ops.at(1); | |||
| @@ -68,7 +68,7 @@ TEST_F(TestTmpIdentityInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| identity_ptr->Init(strategy); | |||
| identity_ptr->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = identity_ptr->dev_matrix_shape(); | |||
| Shape expect = {2, 4, 8, 16}; | |||
| @@ -79,7 +79,7 @@ TEST_F(TestTmpIdentityInfo, InferSliceShape1) { | |||
| Strategys str = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| identity_ptr->Init(strategy); | |||
| identity_ptr->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = identity_ptr->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = identity_ptr->outputs_tensor_info(); | |||
| @@ -100,7 +100,7 @@ TEST_F(TestTmpIdentityInfo, GetTensorLayout1) { | |||
| Strategys str = {{2, 4, 8, 16}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| identity_ptr->Init(strategy); | |||
| identity_ptr->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = identity_ptr->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = identity_ptr->outputs_tensor_info(); | |||
| @@ -122,7 +122,7 @@ TEST_F(TestTmpIdentityInfo, CheckStrategy1) { | |||
| Strategys inputs = {{2, 2, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = identity_ptr->Init(strategy); | |||
| Status ret = identity_ptr->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -131,7 +131,7 @@ TEST_F(TestTmpIdentityInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = identity_ptr->Init(strategy); | |||
| Status ret = identity_ptr->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -142,7 +142,7 @@ TEST_F(TestTmpIdentityInfo, test_generate_strategies) { | |||
| StrategyPtr sp = swc->strategy_ptr; | |||
| Cost cost = *(swc->cost_list[0]); | |||
| identity_ptr->Init(sp); | |||
| identity_ptr->Init(sp, nullptr); | |||
| std::vector<TensorInfo> inputs_info = identity_ptr->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs_info = identity_ptr->outputs_tensor_info(); | |||
| ASSERT_DOUBLE_EQ(identity_ptr->operator_cost()->GetComputationCost(inputs_info, outputs_info, sp->GetInputStage()), | |||
| @@ -71,7 +71,7 @@ TEST_F(TestTransposeInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| transpose->Init(strategy); | |||
| transpose->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = transpose->dev_matrix_shape(); | |||
| Shape expect = {4, 8}; | |||
| @@ -82,7 +82,7 @@ TEST_F(TestTransposeInfo, InferDevMatrixShape2) { | |||
| Strategys inputs = {{4, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| transpose->Init(strategy); | |||
| transpose->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = transpose->dev_matrix_shape(); | |||
| Shape expect = {4, 1, 8}; | |||
| @@ -93,7 +93,7 @@ TEST_F(TestTransposeInfo, InferSliceShape1) { | |||
| Strategys str = {{4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| transpose->Init(strategy); | |||
| transpose->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = transpose->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = transpose->outputs_tensor_info(); | |||
| @@ -114,7 +114,7 @@ TEST_F(TestTransposeInfo, GetTensorLayout1) { | |||
| Strategys str = {{4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| transpose->Init(strategy); | |||
| transpose->Init(strategy, nullptr); | |||
| std::vector<TensorInfo> inputs = transpose->inputs_tensor_info(); | |||
| std::vector<TensorInfo> outputs = transpose->outputs_tensor_info(); | |||
| @@ -135,7 +135,7 @@ TEST_F(TestTransposeInfo, GetForwardOp1) { | |||
| Strategys inputs = {{4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| transpose->Init(strategy); | |||
| transpose->Init(strategy, nullptr); | |||
| OperatorVector forward_op = transpose->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -146,7 +146,7 @@ TEST_F(TestTransposeInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| transpose->Init(strategy); | |||
| transpose->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = transpose->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -158,7 +158,7 @@ TEST_F(TestTransposeInfo, CheckStrategy1) { | |||
| Strategys inputs = {{1, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = transpose->Init(strategy); | |||
| Status ret = transpose->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -166,7 +166,7 @@ TEST_F(TestTransposeInfo, CheckStrategy2) { | |||
| Strategys inputs = {{2, 4, 8}, {2, 4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = transpose->Init(strategy); | |||
| Status ret = transpose->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, FAILED); | |||
| } | |||
| @@ -174,7 +174,7 @@ TEST_F(TestTransposeInfo, CheckStrategy3) { | |||
| Strategys inputs = {{4, 8}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| Status ret = transpose->Init(strategy); | |||
| Status ret = transpose->Init(strategy, nullptr); | |||
| ASSERT_EQ(ret, SUCCESS); | |||
| } | |||
| @@ -357,7 +357,7 @@ TEST_F(TestStepParallel, OperatorInstance) { | |||
| std::vector<Shapes> shape = {inputs_shape, outputs_shape}; | |||
| TOTAL_OPS = 0; | |||
| OperatorInfoPtr matmul_info = OperatorInstance(prim, attrs, shape); | |||
| matmul_info->Init(strategyPtr); | |||
| matmul_info->Init(strategyPtr, nullptr); | |||
| std::string name_expect = "MatMulInfo00"; | |||
| std::string name_test = matmul_info->name(); | |||
| ASSERT_EQ(name_expect, name_test); | |||
| @@ -511,7 +511,7 @@ TEST_F(TestStepParallel, GetTensorInLayout) { | |||
| Shapes outputs_shape = std::vector<Shape>{{64, 64}}; | |||
| std::vector<Shapes> shape = {inputs_shape, outputs_shape}; | |||
| OperatorInfoPtr matmul_info = OperatorInstance(prim, attrs, shape); | |||
| matmul_info->Init(strategyPtr); | |||
| matmul_info->Init(strategyPtr, nullptr); | |||
| node->set_user_data<OperatorInfo>(matmul_info); | |||
| OperatorInfoPtr distribute_operator_pre = node->user_data<OperatorInfo>(); | |||
| TensorLayout tensorlayout_e; | |||
| @@ -64,7 +64,7 @@ void TestConstructOperator::SetUp() { | |||
| Strategys str = {{2, 4, 8, 16}, {2, 4, 16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, str); | |||
| matmul->Init(strategy); | |||
| matmul->Init(strategy, nullptr); | |||
| Shape tensor_shape = {512, 1024}; | |||
| Shape dev_matrix_shape = {2, 4, 8, 16, 1}; | |||
| RankList used_dev_list = g_device_manager->GetDeviceListByStageId(0); | |||
| @@ -64,7 +64,7 @@ void TestVirtualDatasetInfo::SetUp() { | |||
| TEST_F(TestVirtualDatasetInfo, InferDevMatrixShape1) { | |||
| Strategys inputs = {{16, 1}, {16, 1}, {16, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| virtual_dataset->Init(strategy); | |||
| virtual_dataset->Init(strategy, nullptr); | |||
| Shape dev_matrix_shape = virtual_dataset->dev_matrix_shape(); | |||
| Shape expect = {16, 1}; | |||
| @@ -75,7 +75,7 @@ TEST_F(TestVirtualDatasetInfo, GetForwardOp1) { | |||
| Strategys inputs = {{8, 1}, {8, 1}, {8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| virtual_dataset->Init(strategy); | |||
| virtual_dataset->Init(strategy, nullptr); | |||
| OperatorVector forward_op = virtual_dataset->forward_op(); | |||
| size_t size = forward_op.size(); | |||
| @@ -86,7 +86,7 @@ TEST_F(TestVirtualDatasetInfo, GetMirrorOPs1) { | |||
| Strategys inputs = {{8, 1}, {8, 1}, {8, 1}}; | |||
| StrategyPtr strategy = NewStrategy(0, inputs); | |||
| virtual_dataset->Init(strategy); | |||
| virtual_dataset->Init(strategy, nullptr); | |||
| MirrorOps mirror_ops = virtual_dataset->mirror_ops(); | |||
| size_t size = mirror_ops.size(); | |||
| @@ -1,4 +1,4 @@ | |||
| # Copyright 2019 Huawei Technologies Co., Ltd | |||
| # Copyright 2021 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. | |||
| @@ -127,13 +127,17 @@ def test_two_matmul_repeated_calculation2(): | |||
| compile_net(net, x, y, b) | |||
| def test_matmul_forward_reduce_scatter(): | |||
| def test_matmul_output_strategy_reduce_scatter(): | |||
| """ | |||
| Feature: test output strategy for matmul operator | |||
| Description: transpose_b is false, set output strategy and use reduce scatter | |||
| Expectation: compile success | |||
| """ | |||
| class Net(nn.Cell): | |||
| def __init__(self, strategy1, strategy2): | |||
| def __init__(self, matmul_in_strategy, matmul_out_strategy, mul_strategy): | |||
| super().__init__() | |||
| self.matmul = P.MatMul().shard(strategy1) | |||
| self.matmul.add_prim_attr("forward_reduce_scatter", True) | |||
| self.mul = P.Mul().shard(strategy2) | |||
| self.matmul = P.MatMul().shard(matmul_in_strategy, matmul_out_strategy) | |||
| self.mul = P.Mul().shard(mul_strategy) | |||
| def construct(self, x, y, b): | |||
| out = self.matmul(x, y) | |||
| @@ -141,9 +145,10 @@ def test_matmul_forward_reduce_scatter(): | |||
| return out | |||
| context.set_auto_parallel_context(parallel_mode="semi_auto_parallel", device_num=8, global_rank=0) | |||
| strategy1 = ((2, 2), (2, 2)) | |||
| strategy2 = ((4, 2), (4, 2)) | |||
| net = GradWrap(NetWithLoss(Net(strategy1, strategy2))) | |||
| matmul_in_strategy = ((2, 2), (2, 2)) | |||
| matmul_out_strategy = ((4, 2),) | |||
| mul_strategy = ((4, 2), (4, 2)) | |||
| net = GradWrap(NetWithLoss(Net(matmul_in_strategy, matmul_out_strategy, mul_strategy))) | |||
| x = Tensor(np.ones([128, 32]), dtype=ms.float32) | |||
| y = Tensor(np.ones([32, 64]), dtype=ms.float32) | |||
| @@ -151,13 +156,17 @@ def test_matmul_forward_reduce_scatter(): | |||
| compile_net(net, x, y, b) | |||
| def test_matmul_forward_reduce_scatter_transpose(): | |||
| def test_matmul_output_strategy_reduce_scatter_transpose(): | |||
| """ | |||
| Feature: test output strategy for matmul operator | |||
| Description: transpose_b is true, set output strategy and use reduce scatter | |||
| Expectation: compile success | |||
| """ | |||
| class Net(nn.Cell): | |||
| def __init__(self, strategy1, strategy2): | |||
| def __init__(self, matmul_in_strategy, matmul_out_strategy, mul_strategy): | |||
| super().__init__() | |||
| self.matmul = P.MatMul(transpose_b=True).shard(strategy1) | |||
| self.matmul.add_prim_attr("forward_reduce_scatter", True) | |||
| self.mul = P.Mul().shard(strategy2) | |||
| self.matmul = P.MatMul(transpose_b=True).shard(matmul_in_strategy, matmul_out_strategy) | |||
| self.mul = P.Mul().shard(mul_strategy) | |||
| def construct(self, x, y, b): | |||
| out = self.matmul(x, y) | |||
| @@ -165,9 +174,184 @@ def test_matmul_forward_reduce_scatter_transpose(): | |||
| return out | |||
| context.set_auto_parallel_context(parallel_mode="semi_auto_parallel", device_num=16, global_rank=0) | |||
| strategy1 = ((2, 4), (2, 4)) | |||
| strategy2 = ((8, 2), (8, 2)) | |||
| net = GradWrap(NetWithLoss(Net(strategy1, strategy2))) | |||
| matmul_in_strategy = ((2, 4), (2, 4)) | |||
| matmul_out_strategy = ((8, 2),) | |||
| mul_strategy = ((8, 2), (8, 2)) | |||
| net = GradWrap(NetWithLoss(Net(matmul_in_strategy, matmul_out_strategy, mul_strategy))) | |||
| x = Tensor(np.ones([128, 32]), dtype=ms.float32) | |||
| y = Tensor(np.ones([64, 32]), dtype=ms.float32) | |||
| b = Tensor(np.ones([128, 64]), dtype=ms.float32) | |||
| compile_net(net, x, y, b) | |||
| def test_matmul_output_strategy_all_reduce(): | |||
| """ | |||
| Feature: test output strategy for matmul operator | |||
| Description: transpose_b is false, set output strategy and use all reduce | |||
| Expectation: compile success | |||
| """ | |||
| class Net(nn.Cell): | |||
| def __init__(self, matmul_in_strategy, matmul_out_strategy, mul_strategy): | |||
| super().__init__() | |||
| self.matmul = P.MatMul().shard(matmul_in_strategy, matmul_out_strategy) | |||
| self.mul = P.Mul().shard(mul_strategy) | |||
| def construct(self, x, y, b): | |||
| out = self.matmul(x, y) | |||
| out = self.mul(out, b) | |||
| return out | |||
| context.set_auto_parallel_context(parallel_mode="semi_auto_parallel", device_num=8, global_rank=0) | |||
| matmul_in_strategy = ((2, 2), (2, 2)) | |||
| matmul_out_strategy = ((2, 2),) | |||
| mul_strategy = ((4, 2), (4, 2)) | |||
| net = GradWrap(NetWithLoss(Net(matmul_in_strategy, matmul_out_strategy, mul_strategy))) | |||
| x = Tensor(np.ones([128, 32]), dtype=ms.float32) | |||
| y = Tensor(np.ones([32, 64]), dtype=ms.float32) | |||
| b = Tensor(np.ones([128, 64]), dtype=ms.float32) | |||
| compile_net(net, x, y, b) | |||
| def test_matmul_output_strategy_all_reduce_transpose(): | |||
| """ | |||
| Feature: test output strategy for matmul operator | |||
| Description: transpose_b is true, set output strategy and use all reduce | |||
| Expectation: compile success | |||
| """ | |||
| class Net(nn.Cell): | |||
| def __init__(self, matmul_in_strategy, matmul_out_strategy, mul_strategy): | |||
| super().__init__() | |||
| self.matmul = P.MatMul(transpose_b=True).shard(matmul_in_strategy, matmul_out_strategy) | |||
| self.mul = P.Mul().shard(mul_strategy) | |||
| def construct(self, x, y, b): | |||
| out = self.matmul(x, y) | |||
| out = self.mul(out, b) | |||
| return out | |||
| context.set_auto_parallel_context(parallel_mode="semi_auto_parallel", device_num=8, global_rank=0) | |||
| matmul_in_strategy = ((2, 2), (2, 2)) | |||
| matmul_out_strategy = ((2, 2),) | |||
| mul_strategy = ((4, 2), (4, 2)) | |||
| net = GradWrap(NetWithLoss(Net(matmul_in_strategy, matmul_out_strategy, mul_strategy))) | |||
| x = Tensor(np.ones([128, 32]), dtype=ms.float32) | |||
| y = Tensor(np.ones([64, 32]), dtype=ms.float32) | |||
| b = Tensor(np.ones([128, 64]), dtype=ms.float32) | |||
| compile_net(net, x, y, b) | |||
| def test_matmul_output_strategy_reduce_scatter_repeat_calc(): | |||
| """ | |||
| Feature: test output strategy for matmul operator | |||
| Description: transpose_b is false, set output strategy use reduce scatter and repeated calculation | |||
| Expectation: compile success | |||
| """ | |||
| class Net(nn.Cell): | |||
| def __init__(self, matmul_in_strategy, matmul_out_strategy, mul_strategy): | |||
| super().__init__() | |||
| self.matmul = P.MatMul().shard(matmul_in_strategy, matmul_out_strategy) | |||
| self.mul = P.Mul().shard(mul_strategy) | |||
| def construct(self, x, y, b): | |||
| out = self.matmul(x, y) | |||
| out = self.mul(out, b) | |||
| return out | |||
| context.set_auto_parallel_context(parallel_mode="semi_auto_parallel", device_num=16, global_rank=0) | |||
| matmul_in_strategy = ((2, 2), (2, 2)) | |||
| matmul_out_strategy = ((4, 2),) | |||
| mul_strategy = ((4, 2), (4, 2)) | |||
| net = GradWrap(NetWithLoss(Net(matmul_in_strategy, matmul_out_strategy, mul_strategy))) | |||
| x = Tensor(np.ones([128, 32]), dtype=ms.float32) | |||
| y = Tensor(np.ones([32, 64]), dtype=ms.float32) | |||
| b = Tensor(np.ones([128, 64]), dtype=ms.float32) | |||
| compile_net(net, x, y, b) | |||
| def test_matmul_output_strategy_reduce_scatter_transpose_repeat_calc(): | |||
| """ | |||
| Feature: test output strategy for matmul operator | |||
| Description: transpose_b is true, set output strategy use reduce scatter and repeated calculation | |||
| Expectation: compile success | |||
| """ | |||
| class Net(nn.Cell): | |||
| def __init__(self, matmul_in_strategy, matmul_out_strategy, mul_strategy): | |||
| super().__init__() | |||
| self.matmul = P.MatMul(transpose_b=True).shard(matmul_in_strategy, matmul_out_strategy) | |||
| self.mul = P.Mul().shard(mul_strategy) | |||
| def construct(self, x, y, b): | |||
| out = self.matmul(x, y) | |||
| out = self.mul(out, b) | |||
| return out | |||
| context.set_auto_parallel_context(parallel_mode="semi_auto_parallel", device_num=32, global_rank=0) | |||
| matmul_in_strategy = ((2, 4), (2, 4)) | |||
| matmul_out_strategy = ((8, 2),) | |||
| mul_strategy = ((8, 2), (8, 2)) | |||
| net = GradWrap(NetWithLoss(Net(matmul_in_strategy, matmul_out_strategy, mul_strategy))) | |||
| x = Tensor(np.ones([128, 32]), dtype=ms.float32) | |||
| y = Tensor(np.ones([64, 32]), dtype=ms.float32) | |||
| b = Tensor(np.ones([128, 64]), dtype=ms.float32) | |||
| compile_net(net, x, y, b) | |||
| def test_matmul_output_strategy_all_reduce_repeat_calc(): | |||
| """ | |||
| Feature: test output strategy for matmul operator | |||
| Description: transpose_b is false, set output strategy use all reduce and repeated calculation | |||
| Expectation: compile success | |||
| """ | |||
| class Net(nn.Cell): | |||
| def __init__(self, matmul_in_strategy, matmul_out_strategy, mul_strategy): | |||
| super().__init__() | |||
| self.matmul = P.MatMul().shard(matmul_in_strategy, matmul_out_strategy) | |||
| self.mul = P.Mul().shard(mul_strategy) | |||
| def construct(self, x, y, b): | |||
| out = self.matmul(x, y) | |||
| out = self.mul(out, b) | |||
| return out | |||
| context.set_auto_parallel_context(parallel_mode="semi_auto_parallel", device_num=16, global_rank=0) | |||
| matmul_in_strategy = ((2, 2), (2, 2)) | |||
| matmul_out_strategy = ((2, 2),) | |||
| mul_strategy = ((4, 2), (4, 2)) | |||
| net = GradWrap(NetWithLoss(Net(matmul_in_strategy, matmul_out_strategy, mul_strategy))) | |||
| x = Tensor(np.ones([128, 32]), dtype=ms.float32) | |||
| y = Tensor(np.ones([32, 64]), dtype=ms.float32) | |||
| b = Tensor(np.ones([128, 64]), dtype=ms.float32) | |||
| compile_net(net, x, y, b) | |||
| def test_matmul_output_strategy_all_reduce_transpose_repeat_calc(): | |||
| """ | |||
| Feature: test output strategy for matmul operator | |||
| Description: transpose_b is true, set output strategy use all reduce and repeated calculation | |||
| Expectation: compile success | |||
| """ | |||
| class Net(nn.Cell): | |||
| def __init__(self, matmul_in_strategy, matmul_out_strategy, mul_strategy): | |||
| super().__init__() | |||
| self.matmul = P.MatMul(transpose_b=True).shard(matmul_in_strategy, matmul_out_strategy) | |||
| self.mul = P.Mul().shard(mul_strategy) | |||
| def construct(self, x, y, b): | |||
| out = self.matmul(x, y) | |||
| out = self.mul(out, b) | |||
| return out | |||
| context.set_auto_parallel_context(parallel_mode="semi_auto_parallel", device_num=16, global_rank=0) | |||
| matmul_in_strategy = ((2, 2), (2, 2)) | |||
| matmul_out_strategy = ((2, 2),) | |||
| mul_strategy = ((4, 2), (4, 2)) | |||
| net = GradWrap(NetWithLoss(Net(matmul_in_strategy, matmul_out_strategy, mul_strategy))) | |||
| x = Tensor(np.ones([128, 32]), dtype=ms.float32) | |||
| y = Tensor(np.ones([64, 32]), dtype=ms.float32) | |||