Loading...
Searching...
No Matches
opennn::AttentionOperator Struct Reference

#include <opennn/network/operators/attention_operator.h>

Inheritance diagram for opennn::AttentionOperator:
opennn::Operator

Classes

struct  SdpaBf16Pack
 

Public Member Functions

void set (Index, Index, Index, Index, CausalMask, Type)
 
vector< TensorSpec > forward_scratch_specs (Index) const
 
TensorSpec backward_scratch_spec (Index) const
 
vector< TensorSpec > sdpa_gradient_scratch_specs (Index) const
 
TensorSpec sdpa_qkv_pack_spec (Index) const
 
vector< TensorSpec > sdpa_state_specs (Index) const
 
void forward_propagate (ForwardPropagation &, size_t, ForwardPropagationMode) override
 
void back_propagate (ForwardPropagation &, BackPropagation &, size_t) const override
 
void concatenate_output_heads (ForwardPropagation &, size_t) const
 
void split_output_delta (ForwardPropagation &, BackPropagation &, size_t) const
 
 AttentionOperator ()
 
 ~AttentionOperator () override
 
 AttentionOperator (AttentionOperator &&) noexcept
 
AttentionOperator & operator= (AttentionOperator &&) noexcept
 
 AttentionOperator (const AttentionOperator &)=delete
 
AttentionOperator & operator= (const AttentionOperator &)=delete
 
- Public Member Functions inherited from opennn::Operator
virtual ~Operator ()=default
 
virtual vector< TensorSpec > parameter_specs () const
 
virtual vector< TensorSpec > state_specs () const
 
virtual vector< SlotQuantization > parameter_quantization () const
 
virtual vector< ParameterSlot > parameter_slots ()
 
virtual void link_parameters (span< const TensorView > views)
 
virtual void link_gradients (span< const TensorView > views)
 
virtual void link_states (span< const TensorView >)
 
virtual void link_parameter_scales (span< const TensorView >)
 
bool link_slots (span< const TensorView > views, TensorView *ParameterSlot::*member)
 
virtual void initialize_states ()
 
virtual void set_weights_dtype (Type new_weights_dtype)
 
virtual void set_parameters_random ()
 
virtual void set_parameters_glorot ()
 
virtual void set_parameters_pytorch ()
 
virtual void to_JSON (JsonWriter &) const
 
virtual void from_JSON (const Json *)
 
virtual void load_state_from_JSON (const Json *)
 
TensorView & get_input (ForwardPropagation &forward_propagation, size_t layer, size_t slot_index=0) const noexcept
 
vector< TensorView > & get_inputs (ForwardPropagation &forward_propagation, size_t layer) const noexcept
 
TensorView & get_output (ForwardPropagation &forward_propagation, size_t layer, size_t slot_index=0) const noexcept
 
TensorView & get_output_delta (BackPropagation &back_propagation, size_t layer, size_t slot_index=0) const noexcept
 
TensorView & get_input_delta (BackPropagation &back_propagation, size_t layer, size_t slot_index=0) const noexcept
 

Static Public Member Functions

static bool sdpa_supported (Type, Device)
 

Public Attributes

Index heads_number = 0
 
Index head_dimension = 0
 
Index query_sequence_length = 0
 
Index source_sequence_length = 0
 
bool use_causal_mask = false
 
bool use_sdpa = false
 
bool interleaved_heads = false
 
bool zero_padded_queries = false
 
MatrixR causal_mask
 
DropoutOperator dropout
 
size_t scratch_slot = 0
 
size_t attention_output_slot = 0
 
size_t concatenated_output_delta_slot = 0
 
size_t sdpa_gradient_slot = 0
 
size_t sdpa_qkv_pack_slot = 0
 
size_t sdpa_state_slot = 0
 
size_t dropout_mask_slot = 0
 
- Public Attributes inherited from opennn::Operator
Type compute_dtype = Type::FP32
 
Type weights_dtype = Type::FP32
 
vector< size_t > input_slots = {0}
 
vector< size_t > output_slots = {1}
 
vector< size_t > input_delta_slots = {1}
 
vector< size_t > output_delta_slots = {0}
 

Static Public Attributes

static constexpr size_t sdpa_scratch_slots_count = 8
 
static constexpr size_t sdpa_state_slots_count = 4
 

Constructor & Destructor Documentation

◆ AttentionOperator() [1/3]

opennn::AttentionOperator::AttentionOperator ( )

◆ ~AttentionOperator()

opennn::AttentionOperator::~AttentionOperator ( )
override

◆ AttentionOperator() [2/3]

opennn::AttentionOperator::AttentionOperator ( AttentionOperator && )
noexcept

◆ AttentionOperator() [3/3]

opennn::AttentionOperator::AttentionOperator ( const AttentionOperator & )
delete

Member Function Documentation

◆ back_propagate()

void opennn::AttentionOperator::back_propagate ( ForwardPropagation & ,
BackPropagation & ,
size_t  ) const
overridevirtual

Reimplemented from opennn::Operator.

◆ backward_scratch_spec()

TensorSpec opennn::AttentionOperator::backward_scratch_spec ( Index ) const

◆ concatenate_output_heads()

void opennn::AttentionOperator::concatenate_output_heads ( ForwardPropagation & ,
size_t  ) const

◆ forward_propagate()

void opennn::AttentionOperator::forward_propagate ( ForwardPropagation & ,
size_t ,
ForwardPropagationMode  )
overridevirtual

Reimplemented from opennn::Operator.

◆ forward_scratch_specs()

vector< TensorSpec > opennn::AttentionOperator::forward_scratch_specs ( Index ) const

◆ operator=() [1/2]

AttentionOperator & opennn::AttentionOperator::operator= ( AttentionOperator && )
noexcept

◆ operator=() [2/2]

AttentionOperator & opennn::AttentionOperator::operator= ( const AttentionOperator & )
delete

◆ sdpa_gradient_scratch_specs()

vector< TensorSpec > opennn::AttentionOperator::sdpa_gradient_scratch_specs ( Index ) const

◆ sdpa_qkv_pack_spec()

TensorSpec opennn::AttentionOperator::sdpa_qkv_pack_spec ( Index ) const

◆ sdpa_state_specs()

vector< TensorSpec > opennn::AttentionOperator::sdpa_state_specs ( Index ) const

◆ sdpa_supported()

static bool opennn::AttentionOperator::sdpa_supported ( Type ,
Device  )
static

◆ set()

void opennn::AttentionOperator::set ( Index ,
Index ,
Index ,
Index ,
CausalMask ,
Type  )

◆ split_output_delta()

void opennn::AttentionOperator::split_output_delta ( ForwardPropagation & ,
BackPropagation & ,
size_t  ) const

Member Data Documentation

◆ attention_output_slot

size_t opennn::AttentionOperator::attention_output_slot = 0

◆ causal_mask

MatrixR opennn::AttentionOperator::causal_mask

◆ concatenated_output_delta_slot

size_t opennn::AttentionOperator::concatenated_output_delta_slot = 0

◆ dropout

DropoutOperator opennn::AttentionOperator::dropout

◆ dropout_mask_slot

size_t opennn::AttentionOperator::dropout_mask_slot = 0

◆ head_dimension

Index opennn::AttentionOperator::head_dimension = 0

◆ heads_number

Index opennn::AttentionOperator::heads_number = 0

◆ interleaved_heads

bool opennn::AttentionOperator::interleaved_heads = false

◆ query_sequence_length

Index opennn::AttentionOperator::query_sequence_length = 0

◆ scratch_slot

size_t opennn::AttentionOperator::scratch_slot = 0

◆ sdpa_gradient_slot

size_t opennn::AttentionOperator::sdpa_gradient_slot = 0

◆ sdpa_qkv_pack_slot

size_t opennn::AttentionOperator::sdpa_qkv_pack_slot = 0

◆ sdpa_scratch_slots_count

size_t opennn::AttentionOperator::sdpa_scratch_slots_count = 8
staticconstexpr

◆ sdpa_state_slot

size_t opennn::AttentionOperator::sdpa_state_slot = 0

◆ sdpa_state_slots_count

size_t opennn::AttentionOperator::sdpa_state_slots_count = 4
staticconstexpr

◆ source_sequence_length

Index opennn::AttentionOperator::source_sequence_length = 0

◆ use_causal_mask

bool opennn::AttentionOperator::use_causal_mask = false

◆ use_sdpa

bool opennn::AttentionOperator::use_sdpa = false

◆ zero_padded_queries

bool opennn::AttentionOperator::zero_padded_queries = false