[IE][VPU]: Optimize swish layer and remove swish replacement pass (#2993)
* Swish layer optimization * Update VPU firmware 1468
This commit is contained in:
parent
e479b011f5
commit
27c97a037f
@ -19,7 +19,7 @@ set(VPU_SUPPORTED_FIRMWARES usb-ma2x8x pcie-ma248x)
|
|||||||
# Default packages
|
# Default packages
|
||||||
#
|
#
|
||||||
|
|
||||||
set(FIRMWARE_PACKAGE_VERSION 1460)
|
set(FIRMWARE_PACKAGE_VERSION 1468)
|
||||||
set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.2")
|
set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.2")
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -93,7 +93,6 @@ public:
|
|||||||
// Model common adaptation
|
// Model common adaptation
|
||||||
//
|
//
|
||||||
|
|
||||||
Pass::Ptr decomposeSwish();
|
|
||||||
Pass::Ptr eliminateConstConcat();
|
Pass::Ptr eliminateConstConcat();
|
||||||
Pass::Ptr splitGroupedConv();
|
Pass::Ptr splitGroupedConv();
|
||||||
Pass::Ptr splitConv3DInto2D();
|
Pass::Ptr splitConv3DInto2D();
|
||||||
|
@ -87,12 +87,6 @@ PassSet::Ptr PassManager::buildMiddleEnd() {
|
|||||||
// initial dump pass must be the first dump
|
// initial dump pass must be the first dump
|
||||||
ADD_DUMP_PASS("initial");
|
ADD_DUMP_PASS("initial");
|
||||||
|
|
||||||
//
|
|
||||||
// Decompose swish layer to Sigmoid + Multiply
|
|
||||||
//
|
|
||||||
ADD_PASS(decomposeSwish);
|
|
||||||
ADD_DUMP_PASS("decomposeSwish");
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Convert shape notation
|
// Convert shape notation
|
||||||
//
|
//
|
||||||
|
@ -1,79 +0,0 @@
|
|||||||
// Copyright (C) 2018-2020 Intel Corporation
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <vpu/middleend/pass_manager.hpp>
|
|
||||||
#include <vpu/model/data_contents/replicated_data_content.hpp>
|
|
||||||
|
|
||||||
namespace vpu {
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
class PassImpl final : public Pass {
|
|
||||||
public:
|
|
||||||
explicit PassImpl(const StageBuilder::Ptr& stageBuilder) :
|
|
||||||
_stageBuilder(stageBuilder) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void run(const Model& model) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
StageBuilder::Ptr _stageBuilder;
|
|
||||||
};
|
|
||||||
|
|
||||||
void PassImpl::run(const Model& model) {
|
|
||||||
VPU_PROFILE(decomposeSwish);
|
|
||||||
|
|
||||||
for (const auto& swish : model->getStages()) {
|
|
||||||
if (swish->type() != StageType::Swish) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const auto inputData = swish->input(0);
|
|
||||||
const auto outputData = swish->output(0);
|
|
||||||
const auto name = swish->name();
|
|
||||||
const auto& layer = swish->origLayer();
|
|
||||||
const auto beta = swish->attrs().get<float>("beta");
|
|
||||||
|
|
||||||
model->removeStage(swish);
|
|
||||||
auto sigmoidInput = inputData;
|
|
||||||
|
|
||||||
if (beta != 1.0f) {
|
|
||||||
const auto betaDesc = DataDesc(inputData->desc());
|
|
||||||
const auto betaConst = model->addConstData(inputData->name() + "@beta", betaDesc,
|
|
||||||
replicateContent(beta, betaDesc.totalDimSize(), betaDesc));
|
|
||||||
const auto prodOutput = model->addNewData(inputData->name() + "@prod-x-beta", inputData->desc());
|
|
||||||
_stageBuilder->addProdStage(
|
|
||||||
model,
|
|
||||||
name + "@prod-x-beta",
|
|
||||||
layer,
|
|
||||||
inputData,
|
|
||||||
betaConst,
|
|
||||||
prodOutput);
|
|
||||||
sigmoidInput = prodOutput;
|
|
||||||
}
|
|
||||||
const auto sigmoidDesc = inputData->desc();
|
|
||||||
const auto sigmoidOutput = model->addNewData(inputData->name() + "@sigmoid", sigmoidDesc);
|
|
||||||
|
|
||||||
_stageBuilder->addSigmoidStage(
|
|
||||||
model,
|
|
||||||
name + "@sigmoid",
|
|
||||||
layer,
|
|
||||||
{sigmoidInput},
|
|
||||||
{sigmoidOutput});
|
|
||||||
_stageBuilder->addProdStage(
|
|
||||||
model,
|
|
||||||
name + "@prod",
|
|
||||||
layer,
|
|
||||||
inputData,
|
|
||||||
sigmoidOutput,
|
|
||||||
outputData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
Pass::Ptr PassManager::decomposeSwish() {
|
|
||||||
return std::make_shared<PassImpl>(_stageBuilder);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace vpu
|
|
@ -23,6 +23,10 @@ private:
|
|||||||
|
|
||||||
serializer.append(static_cast<float>(beta));
|
serializer.append(static_cast<float>(beta));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StageSHAVEsRequirements getSHAVEsRequirementsImpl() const override {
|
||||||
|
return StageSHAVEsRequirements::NeedMax;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
Loading…
Reference in New Issue
Block a user