ONE - On-device Neural Engine
Loading...
Searching...
No Matches
onert::exec::train::TrainableExecutors Class Reference

Class to gather executor set for trainable model NN package. More...

#include <TrainableExecutors.h>

Collaboration diagram for onert::exec::train::TrainableExecutors:

Public Member Functions

 TrainableExecutors (void)=default
 Construct a new TrainableExecutors object.
 
 TrainableExecutors (const TrainableExecutors &)=delete
 
 TrainableExecutors (TrainableExecutors &&)=default
 
 ~TrainableExecutors ()=default
 Destroy the TrainableExecutors object.
 
TrainableExecutorsoperator= (const TrainableExecutors &)=delete
 
TrainableExecutorsoperator= (TrainableExecutors &&)=default
 
void emplace (const ir::ModelIndex &model_index, const ir::SubgraphIndex &subg_index, std::unique_ptr< IExecutor > exec) override
 Insert executor in executor set.
 
TrainableExecutorat (const ir::ModelIndex &model_index, const ir::SubgraphIndex &subg_index) const override
 Return executor of index.
 
TrainableExecutorentryExecutor () const override
 
uint32_t inputSize () const override
 Return executor set's number of input.
 
uint32_t outputSize () const override
 Return executor set's number of output.
 
const ir::OperandInfoinputInfo (const ir::IOIndex &index) const override
 Return NN package input tensor info.
 
const ir::OperandInfooutputInfo (const ir::IOIndex &index) const override
 Return NN package output tensor info.
 
const void * outputBuffer (const ir::IOIndex &index) const final
 Return NN package output buffer.
 
const backend::IPortableTensoroutputTensor (const ir::IOIndex &index) const final
 Return NN package output tensor.
 
void execute (ExecutionContext &ctx) override
 Execute NN package executor set.
 
void train (const ExecutionContext &ctx, uint32_t training_step)
 Train.
 
float getLoss (const ir::IOIndex &index) const
 
void iterateTrainableTensors (const std::function< void(const ir::OperandIndex &, const backend::train::ITrainableTensor *)> &fn) const
 
- Public Member Functions inherited from onert::exec::IExecutors
virtual ~IExecutors ()=default
 Virtual IExecutors destructor.
 

Detailed Description

Class to gather executor set for trainable model NN package.

Definition at line 30 of file TrainableExecutors.h.

Constructor & Destructor Documentation

◆ TrainableExecutors() [1/3]

onert::exec::train::TrainableExecutors::TrainableExecutors ( void  )
default

Construct a new TrainableExecutors object.

◆ TrainableExecutors() [2/3]

onert::exec::train::TrainableExecutors::TrainableExecutors ( const TrainableExecutors )
delete

◆ TrainableExecutors() [3/3]

onert::exec::train::TrainableExecutors::TrainableExecutors ( TrainableExecutors &&  )
default

◆ ~TrainableExecutors()

onert::exec::train::TrainableExecutors::~TrainableExecutors ( )
default

Destroy the TrainableExecutors object.

Member Function Documentation

◆ at()

TrainableExecutor * onert::exec::train::TrainableExecutors::at ( const ir::ModelIndex model_index,
const ir::SubgraphIndex subg_index 
) const
overridevirtual

Return executor of index.

Parameters
[in]model_indexModel index
[in]subg_indexSubgraph index
Returns
Executor

Implements onert::exec::IExecutors.

Definition at line 34 of file TrainableExecutors.cc.

36{
37 return _executors.at(subg_index).get();
38}

Referenced by entryExecutor().

◆ emplace()

void onert::exec::train::TrainableExecutors::emplace ( const ir::ModelIndex model_index,
const ir::SubgraphIndex subg_index,
std::unique_ptr< IExecutor exec 
)
overridevirtual

Insert executor in executor set.

Parameters
[in]model_indexModel index
[in]subg_indexSubgraph index
[in]execExecutor to insert

Implements onert::exec::IExecutors.

Definition at line 26 of file TrainableExecutors.cc.

28{
29 std::unique_ptr<TrainableExecutor> t_exec{
30 nnfw::misc::polymorphic_downcast<TrainableExecutor *>(exec.release())};
31 _executors.emplace(subg_index, std::move(t_exec));
32}

◆ entryExecutor()

TrainableExecutor * onert::exec::train::TrainableExecutors::entryExecutor ( ) const
inlineoverridevirtual

Reimplemented from onert::exec::IExecutors.

Definition at line 56 of file TrainableExecutors.h.

57 {
58 return at(ir::ModelIndex{0}, ir::SubgraphIndex{0});
59 }
TrainableExecutor * at(const ir::ModelIndex &model_index, const ir::SubgraphIndex &subg_index) const override
Return executor of index.
::onert::util::Index< uint16_t, ModelIndexTag > ModelIndex
Definition Index.h:42
::onert::util::Index< uint16_t, SubgraphIndexTag > SubgraphIndex
Definition Index.h:39

References at().

Referenced by getLoss(), inputInfo(), inputSize(), iterateTrainableTensors(), outputBuffer(), outputInfo(), outputSize(), outputTensor(), and train().

◆ execute()

void onert::exec::train::TrainableExecutors::execute ( ExecutionContext ctx)
overridevirtual

Execute NN package executor set.

Parameters
[in,out]ctxExecution context. It reflects execution result (ex. output shape inference)

Implements onert::exec::IExecutors.

Definition at line 64 of file TrainableExecutors.cc.

65{
66 if (_executors.size() > 1)
67 throw std::runtime_error("TrainableExecutors does not support multiple executors yet");
68
69 // UserTensor for Input/Output
70 std::vector<std::unique_ptr<backend::builtin::UserTensor>> tensorpool;
71
72 // Allocate UserTensor and call executor forward
73 forward(ctx, tensorpool, false);
74
75 // TODO Support multple executors
76}

◆ getLoss()

float onert::exec::train::TrainableExecutors::getLoss ( const ir::IOIndex index) const

Definition at line 131 of file TrainableExecutors.cc.

132{
133 if (_executors.size() > 1)
134 throw std::runtime_error("TrainableExecutors does not support multiple executors yet");
135 return entryExecutor()->getLoss(index);
136}
float getLoss(const ir::IOIndex &pred_io_ind) const
TrainableExecutor * entryExecutor() const override

References entryExecutor(), and onert::exec::train::TrainableExecutor::getLoss().

Referenced by onert::exec::Execution::getLoss().

◆ inputInfo()

const ir::OperandInfo & onert::exec::train::TrainableExecutors::inputInfo ( const ir::IOIndex index) const
overridevirtual

Return NN package input tensor info.

Parameters
[in]indexInput index
Returns
Tensor info

Implements onert::exec::IExecutors.

Definition at line 44 of file TrainableExecutors.cc.

45{
46 return entryExecutor()->inputInfo(index.value());
47}
const ir::OperandInfo & inputInfo(uint32_t index) const override
Get input info at index.
loco::GraphInputIndex index(const TFPlaceholder *node)
Definition TFNode.cpp:54

References entryExecutor(), and onert::exec::train::TrainableExecutor::inputInfo().

◆ inputSize()

uint32_t onert::exec::train::TrainableExecutors::inputSize ( ) const
overridevirtual

Return executor set's number of input.

Returns
Number of input

Implements onert::exec::IExecutors.

Definition at line 40 of file TrainableExecutors.cc.

40{ return entryExecutor()->inputSize(); }
uint32_t inputSize() const override
Get input size.

References entryExecutor(), and onert::exec::train::TrainableExecutor::inputSize().

◆ iterateTrainableTensors()

void onert::exec::train::TrainableExecutors::iterateTrainableTensors ( const std::function< void(const ir::OperandIndex &, const backend::train::ITrainableTensor *)> &  fn) const

Definition at line 138 of file TrainableExecutors.cc.

141{
143}
void iterateTrainableTensors(const std::function< void(const ir::OperandIndex &, const backend::train::ITrainableTensor *)> &fn) const

References entryExecutor(), and onert::exec::train::TrainableExecutor::iterateTrainableTensors().

Referenced by onert::exec::Execution::iterateTrainableTensors().

◆ operator=() [1/2]

TrainableExecutors & onert::exec::train::TrainableExecutors::operator= ( const TrainableExecutors )
delete

◆ operator=() [2/2]

TrainableExecutors & onert::exec::train::TrainableExecutors::operator= ( TrainableExecutors &&  )
default

◆ outputBuffer()

const void * onert::exec::train::TrainableExecutors::outputBuffer ( const ir::IOIndex index) const
finalvirtual

Return NN package output buffer.

Parameters
[in]indexOutput index
Returns
Buffer of output

Implements onert::exec::IExecutors.

Definition at line 54 of file TrainableExecutors.cc.

55{
56 return static_cast<const void *>(entryExecutor()->outputBuffer(index.value()));
57}
const uint8_t * outputBuffer(uint32_t index) const final
Get output buffer at index.

References entryExecutor(), and onert::exec::train::TrainableExecutor::outputBuffer().

◆ outputInfo()

const ir::OperandInfo & onert::exec::train::TrainableExecutors::outputInfo ( const ir::IOIndex index) const
overridevirtual

Return NN package output tensor info.

Parameters
[in]indexOutput index
Returns
Tensor info

Implements onert::exec::IExecutors.

Definition at line 49 of file TrainableExecutors.cc.

50{
51 return entryExecutor()->outputInfo(index.value());
52}
const ir::OperandInfo & outputInfo(uint32_t index) const override
Get output info at index.

References entryExecutor(), and onert::exec::train::TrainableExecutor::outputInfo().

◆ outputSize()

uint32_t onert::exec::train::TrainableExecutors::outputSize ( ) const
overridevirtual

Return executor set's number of output.

Returns
Number of output

Implements onert::exec::IExecutors.

Definition at line 42 of file TrainableExecutors.cc.

42{ return entryExecutor()->outputSize(); }
uint32_t outputSize() const override
Get output size.

References entryExecutor(), and onert::exec::train::TrainableExecutor::outputSize().

◆ outputTensor()

const backend::IPortableTensor * onert::exec::train::TrainableExecutors::outputTensor ( const ir::IOIndex index) const
finalvirtual

Return NN package output tensor.

Parameters
[in]indexOutput index
Returns
Tensor of output

Implements onert::exec::IExecutors.

Definition at line 59 of file TrainableExecutors.cc.

60{
61 return entryExecutor()->outputTensor(index.value());
62}
const backend::IPortableTensor * outputTensor(uint32_t index) const final
Get output tensor at index.

References entryExecutor(), and onert::exec::train::TrainableExecutor::outputTensor().

◆ train()

void onert::exec::train::TrainableExecutors::train ( const ExecutionContext ctx,
uint32_t  training_step 
)

Train.

Parameters
ctxExecution context
training_stepThe number of iterations of an training process. In other words, the number of gradient update.

Definition at line 78 of file TrainableExecutors.cc.

79{
80 if (_executors.size() > 1)
81 throw std::runtime_error("TrainableExecutors does not support multiple executors yet");
82
83 // UserTensor for Input/Output
84 std::vector<std::unique_ptr<backend::builtin::UserTensor>> tensorpool;
85
86 // Allocate UserTensor and call executor forward and backward
87 forward(ctx, tensorpool, true);
88 entryExecutor()->backward(ctx.options, training_step);
89
90 // TODO Support multple executors
91}
void backward(const ExecutionOptions &options, uint32_t training_step)

References onert::exec::train::TrainableExecutor::backward(), entryExecutor(), and onert::exec::ExecutionContext::options.

Referenced by onert::exec::Execution::train().


The documentation for this class was generated from the following files: