ONE - On-device Neural Engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
 
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.
 
void execute (const 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.
 
IExecutorentryExecutor () const
 

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
inline

Definition at line 56 of file TrainableExecutors.h.

56{ return at(ir::ModelIndex{0}, ir::SubgraphIndex{0}); }
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(), outputInfo(), outputSize(), and train().

◆ execute()

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

Execute NN package executor set.

Parameters
[in]ctxExecution context

Implements onert::exec::IExecutors.

Definition at line 54 of file TrainableExecutors.cc.

55{
56 if (_executors.size() > 1)
57 throw std::runtime_error("TrainableExecutors does not support multiple executors yet");
58
59 // UserTensor for Input/Output
60 std::vector<std::unique_ptr<backend::builtin::UserTensor>> tensorpool;
61
62 // Allocate UserTensor and call executor forward
63 forward(ctx, tensorpool, false);
64
65 // TODO Support multple executors
66}

◆ getLoss()

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

Definition at line 122 of file TrainableExecutors.cc.

123{
124 if (_executors.size() > 1)
125 throw std::runtime_error("TrainableExecutors does not support multiple executors yet");
126 return entryExecutor()->getLoss(index);
127}
float getLoss(const ir::IOIndex &pred_io_ind) const
TrainableExecutor * entryExecutor() const

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 129 of file TrainableExecutors.cc.

132{
134}
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

◆ 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().

◆ 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 68 of file TrainableExecutors.cc.

69{
70 if (_executors.size() > 1)
71 throw std::runtime_error("TrainableExecutors does not support multiple executors yet");
72
73 // UserTensor for Input/Output
74 std::vector<std::unique_ptr<backend::builtin::UserTensor>> tensorpool;
75
76 // Allocate UserTensor and call executor forward and backward
77 forward(ctx, tensorpool, true);
78 entryExecutor()->backward(ctx.options, training_step);
79
80 // TODO Support multple executors
81}
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: