ruda_tensor/
expert_projection.rs1use crate::{Backend,moe::MoeExpertStrategy,tensor::{FloatTensor,IntTensor}};
3use core::fmt;
4
5#[derive(Clone,Copy,Debug,PartialEq,Eq)]
7pub struct ExpertProjectionOptions {
8 pub expert_start:usize,
10 pub forward:MoeExpertStrategy,
12 pub backward:MoeExpertStrategy,
14}
15#[derive(Clone,Copy,Debug,PartialEq,Eq)]
17pub struct ExpertProjectionSelection {pub input:bool,pub weights:bool}
18#[derive(Debug)]
20pub struct ExpertProjectionBackward<B:Backend> {pub input:Option<FloatTensor<B>>,pub weights:Option<FloatTensor<B>>}
21pub trait ExpertProjectionOps:Backend {
23 type ExpertProjectionError:fmt::Debug;
25 type ExpertProjectionState:Clone+Send+fmt::Debug+'static;
27 fn expert_projection_forward(input:FloatTensor<Self>,global_ids:IntTensor<Self>,weights:FloatTensor<Self>,options:ExpertProjectionOptions)
29 -> Result<(FloatTensor<Self>,Self::ExpertProjectionState),Self::ExpertProjectionError>;
30 fn expert_projection_backward(state:Self::ExpertProjectionState,gradient:FloatTensor<Self>,selection:ExpertProjectionSelection)
32 -> Result<ExpertProjectionBackward<Self>,Self::ExpertProjectionError>;
33}
34#[derive(Clone,Copy,Debug,PartialEq,Eq)]
36pub struct NativeSwiGluSelection {pub gate:bool,pub up:bool}
37#[derive(Debug)]
39pub struct NativeSwiGluBackward<B:Backend> {pub gate:Option<FloatTensor<B>>,pub up:Option<FloatTensor<B>>}
40pub trait NativeSwiGluOps:Backend {
42 type SwiGluError:fmt::Debug;
44 fn native_swiglu(gate:FloatTensor<Self>,up:FloatTensor<Self>) -> Result<FloatTensor<Self>,Self::SwiGluError>;
46 fn native_swiglu_backward(gate:FloatTensor<Self>,up:FloatTensor<Self>,gradient:FloatTensor<Self>,selection:NativeSwiGluSelection)
48 -> Result<NativeSwiGluBackward<Self>,Self::SwiGluError>;
49}