pub struct Sdpa;Implementations§
Source§impl Sdpa
impl Sdpa
Sourcepub fn run_attention(
&self,
q: &Tensor,
k: &Tensor,
v: &Tensor,
mask: &AttentionMask,
flash_params: Option<&FlashParams>,
sdpa_params: &SdpaParams,
) -> Result<Tensor>
pub fn run_attention( &self, q: &Tensor, k: &Tensor, v: &Tensor, mask: &AttentionMask, flash_params: Option<&FlashParams>, sdpa_params: &SdpaParams, ) -> Result<Tensor>
Computes softmax(QK^T*sqrt(d_k))V
Inputs:
- q: (b_sz, n_attn_heads, q_len, head_dim)
- k: (b_sz, n_kv_heads, q_len, head_dim)
- v: (b_sz, n_kv_heads, q_len, head_dim)
Dispatch attention based on the AttentionMask variant:
AttentionMask::CausalFlash: flash attention withis_causal = trueAttentionMask::None: flash if available (decode), else eager without maskAttentionMask::Custom: eager attention with the explicit mask tensor
Sourcepub fn run_attention_noflash(
&self,
q: &Tensor,
k: &Tensor,
v: &Tensor,
mask: Option<&Tensor>,
sdpa_params: &SdpaParams,
causal: bool,
) -> Result<Tensor>
pub fn run_attention_noflash( &self, q: &Tensor, k: &Tensor, v: &Tensor, mask: Option<&Tensor>, sdpa_params: &SdpaParams, causal: bool, ) -> Result<Tensor>
Same as run_attention, but skips the flash-attention dispatch.
causal tells the Metal SDPA-full kernel to enable its upper-triangle skip (do_causal=true).
Pass true only when the caller’s mask is causal-or-stricter.
Pass false` for bidirectional masks (e.g. vision attention).
Auto Trait Implementations§
impl Freeze for Sdpa
impl RefUnwindSafe for Sdpa
impl Send for Sdpa
impl Sync for Sdpa
impl Unpin for Sdpa
impl UnsafeUnpin for Sdpa
impl UnwindSafe for Sdpa
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for T
impl<T> Downcast for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.