pub(super) static DNN_OP_ROLES: &[DnnOpRole] = &[
DnnOpRole {
contract: crate::core::operation::matrix::ADD,
op_type: DnnOpType::Add,
epilogue: DnnEpilogue::None,
epilogue_required_input: None,
provider_mask: DnnProvider::ResidualNorm.bit(),
},
DnnOpRole {
contract: crate::core::operation::matrix::MUL,
op_type: DnnOpType::Multiply,
epilogue: DnnEpilogue::None,
epilogue_required_input: None,
provider_mask: DnnProvider::GatedFfn.bit(),
},
DnnOpRole {
contract: crate::core::operation::matrix::MAT_MUL_NT,
op_type: DnnOpType::Matmul,
epilogue: DnnEpilogue::None,
epilogue_required_input: None,
provider_mask: DnnProvider::BlasLtEpilogue.bit()
| DnnProvider::QkvProjectionGroup.bit()
| DnnProvider::GatedFfn.bit(),
},
DnnOpRole {
contract: crate::core::operation::ml::LINEAR,
op_type: DnnOpType::Matmul,
epilogue: DnnEpilogue::Bias,
epilogue_required_input: Some(2),
provider_mask: DnnProvider::BlasLtEpilogue.bit()
| DnnProvider::QkvProjectionGroup.bit()
| DnnProvider::GatedFfn.bit(),
},
DnnOpRole {
contract: crate::core::operation::ml::RMS_NORM,
op_type: DnnOpType::RmsNorm,
epilogue: DnnEpilogue::None,
epilogue_required_input: None,
provider_mask: DnnProvider::ResidualNorm.bit(),
},
DnnOpRole {
contract: crate::core::operation::ml::GELU,
op_type: DnnOpType::Gelu,
epilogue: DnnEpilogue::None,
epilogue_required_input: None,
provider_mask: DnnProvider::BlasLtEpilogue.bit(),
},
DnnOpRole {
contract: crate::core::operation::ml::SILU,
op_type: DnnOpType::Silu,
epilogue: DnnEpilogue::None,
epilogue_required_input: None,
provider_mask: DnnProvider::BlasLtEpilogue.bit() | DnnProvider::GatedFfn.bit(),
},
DnnOpRole {
contract: crate::core::operation::ml::RELU,
op_type: DnnOpType::Relu,
epilogue: DnnEpilogue::None,
epilogue_required_input: None,
provider_mask: DnnProvider::BlasLtEpilogue.bit(),
},
DnnOpRole {
contract: crate::core::operation::ml::SWIGLU,
op_type: DnnOpType::GatedMultiply,
epilogue: DnnEpilogue::None,
epilogue_required_input: None,
provider_mask: DnnProvider::GatedFfn.bit(),
},
DnnOpRole {
contract: crate::core::operation::ml::SCALED_DOT_PRODUCT_ATTENTION,
op_type: DnnOpType::ScaledDotProductAttention,
epilogue: DnnEpilogue::None,
epilogue_required_input: None,
provider_mask: DnnProvider::Attention.bit(),
},
];