[IE][VPU]: Optimize swish layer and remove swish replacement pass (#2993)

* Swish layer optimization
* Update VPU firmware 1468
This commit is contained in:
Maxim Kurin 2020-11-11 17:40:37 +03:00 committed by GitHub
parent e479b011f5
commit 27c97a037f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 5 additions and 87 deletions

View File

@ -19,7 +19,7 @@ set(VPU_SUPPORTED_FIRMWARES usb-ma2x8x pcie-ma248x)
# Default packages
#
set(FIRMWARE_PACKAGE_VERSION 1460)
set(FIRMWARE_PACKAGE_VERSION 1468)
set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.2")
#

View File

@ -93,7 +93,6 @@ public:
// Model common adaptation
//
Pass::Ptr decomposeSwish();
Pass::Ptr eliminateConstConcat();
Pass::Ptr splitGroupedConv();
Pass::Ptr splitConv3DInto2D();

View File

@ -87,12 +87,6 @@ PassSet::Ptr PassManager::buildMiddleEnd() {
// initial dump pass must be the first dump
ADD_DUMP_PASS("initial");
//
// Decompose swish layer to Sigmoid + Multiply
//
ADD_PASS(decomposeSwish);
ADD_DUMP_PASS("decomposeSwish");
//
// Convert shape notation
//

View File

@ -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

View File

@ -23,6 +23,10 @@ private:
serializer.append(static_cast<float>(beta));
}
StageSHAVEsRequirements getSHAVEsRequirementsImpl() const override {
return StageSHAVEsRequirements::NeedMax;
}
};
} // namespace