Skip to main content

CUDA kernel library for Kestrel

Project description

kestrel-kernels

Precompiled CUDA kernels for Kestrel, a high-performance inference engine for Moondream, the world's most efficient vision-language model.

License: These kernels are provided for use with Kestrel only. Other use is not permitted.

These kernels target NVIDIA Ampere/Ada/Hopper GPUs (SM80/SM86/SM89/SM90) and are distributed as precompiled shared libraries for fast installation without CUDA compilation.

Kernel Library

CUDA Kernels (compiled via CMake)

These kernels are implemented in CUDA C++ and compiled during wheel build.

activation - GELU Residual Activation

Computes GELU(h) * (g + 1) fused gated activation used in MoE expert layers. The input tensor is split in half: h passes through GELU, g acts as a gate with +1 bias.

Tokens CUDA PyTorch (eager) Compile vs PyTorch
1 3.8 us 64 us 63 us 17x
64 2.9 us 49 us 69 us 17x
740 3.5 us 49 us 68 us 14x
1024 3.9 us 49 us 68 us 13x
2048 5.1 us 49 us 68 us 10x

PyTorch eager launches separate kernels for slice, erf, multiply, and add, with intermediate tensors hitting global memory. Our kernel fuses everything into a single pass. torch.compile is slower than eager here, likely because the dynamic x[:, :hidden] slicing prevents effective fusion.

fused_linear_residual - Linear + Bias + Residual

Fused out = x @ W.T + bias + residual using cuBLASLt epilogues.

Crops Tokens CUDA PyTorch (eager) vs PyTorch
1 729 9.0 us 24 us 2.7x
2 1458 12 us 24 us 2.0x
4 2916 16 us 29 us 1.8x
8 5832 46 us 50 us 1.1x
13 9477 44 us 77 us 1.7x

cuBLASLt epilogues fuse bias addition and residual into the matmul, avoiding extra kernel launches and memory traffic.

fused_mlp - Fused MLP with cuBLASLt

Fused out = residual + gelu(x @ W1.T + b1) @ W2.T + b2 using cuBLASLt epilogues.

Crops Tokens CUDA PyTorch (eager) vs PyTorch
1 729 43 us 56 us 1.3x
2 1458 72 us 89 us 1.2x
4 2916 97 us 124 us 1.3x
8 5832 214 us 259 us 1.2x
13 9477 283 us 379 us 1.3x

MLP is matmul-dominated so the speedup is modest. The gain comes from fusing GELU and residual add into cuBLASLt epilogues.

kv_cache_write - KV Cache Write with FP8 Quantization

Writes BF16 key/value tensors to FP8 paged KV cache with quantization.

Tokens Kestrel vLLM PyTorch (eager) vs vLLM vs PyTorch
1 3.7 us 4.9 us 67 us 1.3x 18x
8 3.5 us 4.8 us 35 us 1.4x 10x
64 3.7 us 4.8 us 35 us 1.3x 9x
256 4.1 us 4.8 us 36 us 1.2x 9x
1024 8.6 us 9.7 us 51 us 1.1x 6x
4096 31 us 46 us 124 us 1.5x 4x

Fused K/V processing and optimized vectorization provide 1.1-1.5x speedup over vLLM's implementation.

layernorm_cuda - Fast LayerNorm Forward

Optimized LayerNorm forward pass for common hidden dimensions.

Vision Encoder (N=1152):

Crops Tokens CUDA PyTorch (eager) vs PyTorch
1 729 3.9 us 8.4 us 2.2x
2 1458 4.2 us 8.4 us 2.0x
4 2916 5.5 us 10 us 1.8x
8 5832 8.3 us 18 us 2.1x
13 9477 18 us 28 us 1.6x

Text Decoder (N=2048):

Context Tokens CUDA PyTorch (eager) vs PyTorch
decode 1 4.2 us 8.4 us 2.0x
prefill 740 3.7 us 8.4 us 2.3x

Specialized kernels for N=1152 and N=2048 use 4 rows/block with warp-only reductions, avoiding shared memory overhead. Two epilogue strategies trade register pressure vs memory bandwidth.

moe_sum - MoE Output Summation

Sums the weighted outputs from top-k MoE experts back into a single hidden state per token. Computes out[t] = sum(expert_outputs[t, 0:k]) where each token selects k=8 experts.

Context Tokens CUDA PyTorch (eager) vs PyTorch
decode 1 3.0 us 5.6 us 1.9x
batch 4 4 3.0 us 5.4 us 1.8x
batch 16 16 2.9 us 5.3 us 1.8x
prefill 740 5.5 us 10 us 1.9x
long 1024 10 us 15 us 1.5x

Vectorized 16-byte loads (8 bf16 at once), fully unrolled k=8 reduction. FP32 accumulation provides better numerical stability than bf16 accumulation. Note: vLLM has a similar kernel, but only supports topk=2,3,4 and falls back to PyTorch for topk=8.

rotary_embedding - Rotary Position Embedding

Applies rotary position embedding to query and key tensors (n_heads=32, head_dim=64).

Context Tokens Kestrel vLLM PyTorch (eager) vs vLLM vs PyTorch
decode 1 3.3 us 4.9 us 118 us 1.5x 36x
batch 4 4 3.1 us 4.5 us 117 us 1.5x 38x
batch 16 16 3.1 us 4.7 us 117 us 1.5x 38x
prefill 740 5.0 us 8.0 us 119 us 1.6x 24x

Vectorized bfloat162 pair processing, shared memory caching of cos/sin values, FP32 math for numerical stability. Split-head kernel for decode increases SM utilization on small batch sizes.

fp8_quant - FP8 Quantization

Converts BF16 tensors to FP8 (e4m3fn) with per-row dynamic scale computation. Used for quantizing MoE activations before FP8 GEMM.

Context Rows CUDA PyTorch (eager) vs PyTorch
decode 8 3.1 us 53 us 17x
batch 4 32 3.1 us 52 us 17x
batch 16 128 3.1 us 52 us 17x
prefill 5920 6.6 us 67 us 10x

Two kernel variants: warp-per-row for large batches (better SM utilization), block-per-row for small batches. Vectorized 16-byte loads/stores, fused absmax reduction.

tau_tail - TAU Attention Scaling

Applies per-head TAU scaling to Q and V in packed QKV. Computes scale = tanh(tok_linear) + tau_pos_table[position] then scales each head: Q *= scale_q, V *= scale_v.

Context Tokens CUDA PyTorch (eager) vs PyTorch
decode 1 4.6 us 45 us 10x
batch 4 4 4.4 us 46 us 10x
batch 16 16 9.0 us 88 us 10x
prefill 740 6.5 us 63 us 10x

CuTe DSL Kernels (precompiled for wheel distribution)

These kernels are written in NVIDIA CuTe DSL (Python) and precompiled to .so files during wheel build. The kernel source templates are excluded from wheel distribution.

Current runtime status:

  • Production runtime for these kernels still uses the CuTe-generated AOT shared library path, loaded through the existing tvm_ffi wrapper.
  • We now have a DLPack-based direct-cubin topk path in the source tree that does not use cutlass, libcute_dsl_runtime, or tvm_ffi in the migrated hot path.
  • That path builds the kernel on Linux, ships the emitted cubin plus manifest, and launches it through _pybridge using the DLPack C exchange API for tensor and stream interop.
  • On B200 (sm100), the preallocated topk direct-cubin path is now at parity or better than the current production-style precompiled path:
    • batch 257: 6.77 us direct cubin vs 7.24 us existing precompiled path
    • topk_fwd, batch 257: 8.95 us direct cubin vs 9.79 us existing precompiled path
  • On the Windows L4 dev host, the same Linux-built sm89 cubin ran successfully through the rebuilt _pybridge path with correct results and correct non-default stream behavior.
  • The long-term runtime direction is now: Linux-only CuTe builders, bundled cubin artifacts, _pybridge launchers, and torch-c-dlpack-ext as the dependency that guarantees the DLPack C exchange API is available for runtime interop.

Design notes for the ongoing refactor live in docs/CUTE_RUNTIME_REFACTOR_DESIGN.md.

topk - Bitonic Top-K Selection

GPU top-k selection using bitonic sort network with optional fused softmax.

Context Tokens Kestrel Quack PyTorch (eager) vs Quack vs PyTorch
decode 1 23 us 29 us 17 us 1.3x 0.8x
batch 16 16 22 us 27 us 17 us 1.2x 0.8x
prefill 740 22 us 28 us 17 us 1.2x 0.7x

Note: Currently slower than PyTorch for N=64, k=8. PyTorch uses radix-based QuickSelect which is more efficient for small N. Algorithm should be revisited.

An experimental direct-cubin runtime also exists for topk in the source tree. It demonstrates that this CuTe kernel can be built on Linux and run through our own native launcher on both Linux and Windows without a runtime dependency on cutlass or tvm_ffi.

Python API:

from kestrel_kernels.topk import topk_fwd

values, indices = topk_fwd(scores, k=8, softmax=True)

sampling - Top-p Token Sampling

CuTe DSL rejection-based top-p sampler for probability tensors.

Runtime dispatch uses the CuTe kernel path by default on CUDA, with fallback retained for unsupported cases and runtime errors.

Benchmarks below are H100 (sm90) dispatch-like timings (uniform generation + kernel launch), measured with heavy warmup and interleaved randomized runs:

Shape (batch, vocab) Kestrel CuTe FlashInfer vs FlashInfer
(1, 51200) 17.37 us 20.78 us 1.20x
(4, 51200) 21.17 us 21.84 us 1.03x
(128, 51200) 38.96 us 42.44 us 1.09x
(32, 1024) 15.25 us 20.50 us 1.34x

Python API:

from kestrel_kernels.sampling import top_p_sampling_from_probs

sampled_ids = top_p_sampling_from_probs(probs, top_p, generator=generator)

cute_moe - MoE Matrix Multiplications

Grouped GEMM kernels for Mixture-of-Experts layers, written in CuTe DSL for H100 (SM90). Supports BF16 and FP8 (W8A8) precision with both warp-level and WGMMA variants, automatically selected based on batch size.

FP8 W8A8 Full MoE Layer (up + activation + down + sum, E=64, k=8, with CUDA Graphs):

Context Tokens Kestrel vLLM (Triton) vs vLLM
decode 1 29 us 51 us 1.72x
batch 4 4 79 us 103 us 1.30x
batch 16 16 146 us 169 us 1.16x
prefill 740 245 us 481 us 1.96x

Python API:

from kestrel_kernels import (
    invoke_cute_moe_up,
    invoke_cute_moe_down,
    invoke_cute_moe_up_fp8,
    invoke_cute_moe_down_fp8,
)

# BF16 up projection
out_up = invoke_cute_moe_up(
    hidden_states, w1, w2,
    topk_weights, topk_ids,
    sorted_token_ids, expert_ids, num_tokens_post_pad,
)

# BF16 down projection
out_down = invoke_cute_moe_down(
    moe_out, w3,
    topk_weights, topk_ids,
    sorted_token_ids, expert_ids, num_tokens_post_pad,
)

moe_align - MoE Token Alignment

Prepares sorted token indices for block-sparse MoE operations. Given topk_ids, outputs sorted token IDs grouped by expert for block-sparse matmul.

Context Tokens Kestrel vLLM vs vLLM
decode 1 6.7 us 9.8 us 1.5x
batch 4 4 6.5 us 9.8 us 1.5x
batch 16 16 7.0 us 10 us 1.4x
prefill 740 12 us 9.2 us 0.8x
long 1024 12 us 9.5 us 0.8x

Uses optimized single-CTA shared-memory histogram for decode (numel < 1024). Prefill path needs optimization.

Python API:

from kestrel_kernels.moe_align import moe_align_block_size

moe_align_block_size(
    topk_ids, num_experts, block_size,
    sorted_token_ids, expert_ids, num_tokens_post_pad,
    expert_map,  # optional for expert parallelism
)

gelu_residual - GELU Residual Activation (CuTe DSL)

CuTe DSL implementation of GELU residual activation for BF16. Computes GELU(h) * (g + 1) fused gated activation used in MoE expert layers. Uses vectorized memory access and streaming stores.

Context Rows CuTe CUDA PyTorch vs CUDA vs PyTorch
decode 8 2.3 us 2.5 us 7.5 us 1.10x 3.3x
batch 4 32 2.4 us 3.0 us 8.6 us 1.24x 3.6x
batch 16 128 2.6 us 2.9 us 8.9 us 1.09x 3.4x
prefill 5920 9.9 us 11.2 us 55.9 us 1.14x 5.6x

fp8_quant_cute - FP8 Quantization (CuTe DSL)

CuTe DSL implementation of FP8 row-wise quantization. Converts BF16 tensors to FP8 (e4m3fn) with per-row dynamic scaling.

hidden=1024 (MoE down projection input):

Context Rows CuTe CUDA vs CUDA
decode 8 2.5 us 2.7 us 1.09x
batch 4 32 2.8 us 3.0 us 1.07x
batch 16 128 2.8 us 3.0 us 1.08x
prefill 5920 5.3 us 6.6 us 1.23x

hidden=2048 (MoE up projection input):

Context Rows CuTe CUDA vs CUDA
decode 8 2.6 us 2.7 us 1.02x
batch 4 32 2.9 us 3.0 us 1.04x
batch 16 128 2.9 us 3.0 us 1.04x
prefill 5920 8.2 us 10.7 us 1.31x

flash_attn - Flash Attention (Prefill & Decode)

Flash Attention kernels written in CuTe DSL, with a dedicated decode path optimized for paged FP8 KV cache. 1.3-2.5x faster than FlashInfer on typical Moondream workloads.

  • FP8 KV cache with per-tensor scaling
  • Paged KV (page_size=1) for fine-grained memory management
  • CUDA graph compatible
  • Causal and prefix-LM masking, variable-length sequences, GQA/MQA

FP8 KV Paged Decode (with CUDA Graphs):

Batch KV Len Kestrel FlashInfer vs FlashInfer
1 740 9.6 us 12.9 us 1.34x
1 1024 8.7 us 13.1 us 1.50x
4 740 17.1 us 23.9 us 1.40x
8 512 10.0 us 25.2 us 2.51x
16 256 9.6 us 17.6 us 1.83x
32 128 11.8 us 26.5 us 2.24x

FP8 KV Paged Prefill:

Seq Len Kestrel FlashInfer vs FlashInfer
740 19.9 us 47.6 us 2.40x
1024 27.3 us 58.9 us 2.16x

Python API:

kestrel-kernels is shipped as an inference-only backend for Moondream/kestrel; flash_attn has a single forward entry point. Pass fixed-length tensors with seqlen_q / seqlen_k implicit in the shape, or paged/varlen tensors with page_table / seqused_k / cu_seqlens_*.

from kestrel_kernels.flash_attn.cute.interface import _flash_attn_fwd

# Fixed-length attention
out, _ = _flash_attn_fwd(q, k, v, causal=True)

# Paged / variable-length (one call handles both — pass whichever kwargs apply)
out, _ = _flash_attn_fwd(
    q, k, v,
    page_table=page_table,
    seqused_k=seqused_k,
    causal=True,
)

Autograd wrappers (flash_attn_func / flash_attn_varlen_func) and the backward pass were deleted — this package no longer supports training.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

kestrel_kernels-0.4.4-cp314-cp314-win_amd64.whl (43.7 MB view details)

Uploaded CPython 3.14Windows x86-64

kestrel_kernels-0.4.4-cp314-cp314-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl (17.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ ARM64manylinux: glibc 2.35+ ARM64

kestrel_kernels-0.4.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl (41.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.31+ x86-64

kestrel_kernels-0.4.4-cp313-cp313-win_amd64.whl (43.3 MB view details)

Uploaded CPython 3.13Windows x86-64

kestrel_kernels-0.4.4-cp313-cp313-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl (17.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ ARM64manylinux: glibc 2.35+ ARM64

kestrel_kernels-0.4.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl (41.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.31+ x86-64

kestrel_kernels-0.4.4-cp312-cp312-win_amd64.whl (43.3 MB view details)

Uploaded CPython 3.12Windows x86-64

kestrel_kernels-0.4.4-cp312-cp312-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl (17.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ ARM64manylinux: glibc 2.35+ ARM64

kestrel_kernels-0.4.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl (41.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.31+ x86-64

kestrel_kernels-0.4.4-cp311-cp311-win_amd64.whl (43.3 MB view details)

Uploaded CPython 3.11Windows x86-64

kestrel_kernels-0.4.4-cp311-cp311-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl (17.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ ARM64manylinux: glibc 2.35+ ARM64

kestrel_kernels-0.4.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl (41.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.31+ x86-64

kestrel_kernels-0.4.4-cp310-cp310-win_amd64.whl (43.3 MB view details)

Uploaded CPython 3.10Windows x86-64

kestrel_kernels-0.4.4-cp310-cp310-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl (17.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ ARM64manylinux: glibc 2.35+ ARM64

kestrel_kernels-0.4.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl (41.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.31+ x86-64

File details

Details for the file kestrel_kernels-0.4.4-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 0fb289d7f428a0f1622803b29d0e9265b62a32624899fa1b8b722b972f9c78d4
MD5 1072a2a21675223271d7d05b004e4d9b
BLAKE2b-256 244e3f256c2fe0efe69f4a3e83b73392455d96d663e6d0b6188ca2ab035ccdd3

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp314-cp314-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp314-cp314-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 744c7db931ccb16d71b0a042ca20293a6368c0f21e28c7556c606d13645be619
MD5 477f2a3fcbddd35b35f3e1d33722c9f9
BLAKE2b-256 800c3b6d7a6048b295c45dff145fcfa7eff4639f0f56855a3a68df117dff7720

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 4537180ab9e8bc7fba84858216d425c818b559d804816866d6e17421a93d4a0e
MD5 9c1bc4af88fd92ed2e8a43755c8b6686
BLAKE2b-256 3383a8f450c66509fa7d9c0f43b517a6fd2ed145d25b09cd76cd0f0735649d1a

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b67b6704038d04a42ccc00286f31ce769ea80b789bf8e2b6e5c7bbaf6fee31b5
MD5 0c3393af93848d41bf9e3fd810310917
BLAKE2b-256 1de64a626219096b43051b694e25bf56f468a2d591e16ed8ac225a9c76a5e706

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp313-cp313-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp313-cp313-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 e255a9f4b35612b2870632f3f77aa78acd69ba9e613a31a32415e8de97e7f812
MD5 3653a0fefb08770482ffb37a5bf555f1
BLAKE2b-256 6796e97e1cfab349a6bc9d6ae274aa6c6bddb6f910bbf6393d910fe21a0abd96

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 665aef98f9628c53cbbadd4b2130d4fd2a5a23f627b5a118cdb4a2aae64cab1f
MD5 c10783108e2922d0e729f51b3b467598
BLAKE2b-256 409ed20c40c01f15b31d21af199cebe1a0b79a82153dfff5ea7070e7d78b02e3

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 27fc4566cc507c07a946107bea6e2e3fdf0f812a00acedd7b69d1698735eb8cb
MD5 5c18a83cf2a0b8ec1683fee814b6571c
BLAKE2b-256 e17e9620cd53097a02862931f16b3782c57db9306ba316258b20ecce27d59cc8

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp312-cp312-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp312-cp312-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 1c49a194dafb2eecb12fc3c1688a41685ea45bd47a5bef4345a63cb178592e2c
MD5 ef7bf1067086edebdb5bb51ade77c5dd
BLAKE2b-256 a71482fafdd404fd36fedb5b7fdfef37c1b9cb95948239237746a1c1a99c34d9

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 1c66d6e8d277240be8245449d96c17e79d372084d8a0e330603767615374249e
MD5 292172c94d499bf68f152c669882e12a
BLAKE2b-256 b61b80e71994e2eb557759efb7c91a0de281cf77e989ac41b5a6be63492acb50

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 df5262371e9d758b7e30aab3039989c8b597bc596ce0fb852693a1780fcc7174
MD5 9ff6aec21483b64427cfe5413c7807c9
BLAKE2b-256 504b5e8187a9cb834fe1cce38934dd795b90b9e3e022eb279f4ff4e979f95db8

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp311-cp311-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp311-cp311-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 f3996e33a4942cde0b9149f98c6571f1070bad9d343d2d20ae76af1622ea4f2b
MD5 796f7d0f6348011187536c2316acf710
BLAKE2b-256 2c05a4a0029f62aa3fc1c047561c420de888ac3ba4935f026835e6af6f03d2d4

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 1427c50bd4e2f7e75fa3609fc821b44ecd9848703924edd376a033c1e4b18fcd
MD5 d895b0d9249c66e035aeb77debc46e1d
BLAKE2b-256 e32ef97d9c5a9ad7ad90ead1f62942d19890358f613f8de59c6a5da585ef4313

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f09374d47cdfb2a61bea6d63ad21523836cd462ac99ef6ca3fd514e98b0b1032
MD5 f8a0b9d4ee68213ed21946f97b5ec6ff
BLAKE2b-256 c0c7ada0d2ace653fb3b9bab334d8540a93626980651f622d1b1d77a7bcefba1

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp310-cp310-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp310-cp310-manylinux_2_34_aarch64.manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 ebadcc2514e0dc7b10b27546dc5d7c4f03a5fb56c6103d0c6b07ee820a7b9a40
MD5 bab2b159cd98236798ec388412d4bbaf
BLAKE2b-256 05d1ef6c911bf255277345442766484ac2a72e873c64cb68dea88dae0614d48c

See more details on using hashes here.

File details

Details for the file kestrel_kernels-0.4.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for kestrel_kernels-0.4.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 3f629fe8f6ad2a397a3a82f4da1bb63a8ec4c9bf9b7c9150cfe94f07ea3901e8
MD5 fb67fff5f41407ead7b46294dec205ac
BLAKE2b-256 e9282be653933b65deabc4bb21d364fa5250ddb0a05a55c38b7a9beef49ce93e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page