--- license: other license_name: per-artifact license_link: https://huggingface.co/Pegainfer/kern-qwen38-sm103/blob/main/README.md tags: - kern - cuda - cubin - sm103 - qwen3.8 --- # kern-qwen38-sm103 Kernel artifacts and manifests for running **Qwen3.8-27B** (plain decode and its DFlash2 speculative draft) on one **GB300 (sm_103a)** with [kern](https://github.com/pegainfer-project/kern), a model-agnostic GPU runtime. The runtime contains no model; everything it needs to know about this one is in the manifest. ## Layout - `cubins/-.cubin` — every device module the manifests pin, one flat content-addressed directory. The runtime resolves modules by sha256 only; the name is a label and the sha prefix keeps every version of a kernel side by side. New builds are added, nothing is renamed or removed. - `manifests/qwen3.8-27b.json` — the decode manifest (`prefill`, `decode`, `decode_batch` programs; full attention on TRTLLM-GEN, GDN layers on vLLM's Triton kernels plus kern's fused decode kernels). `decode` and `decode_batch` declare `graph` (driven through a captured CUDA graph); `prefill` runs launch by launch, up to 8192 tokens a chunk (`tokens`). - `manifests/qwen3.8-27b-dflash2.json` — the same model with its DFlash2 draft: draft, verify and round programs, zero extra runtime code. Both manifests match `examples/` in the kern repository at the commit named in each upload's commit message. They are manifest schema 5 and need kern v0.2.0 or newer (`curl -fsSL https://kern-baa.pages.dev/install.sh | sh` installs `kern` and `kern-serve` together); v0.1.0 refuses the file. ## Not hosted here - **Weights and tokenizer.** They are the models' own Hugging Face checkpoints, unmodified: [Qwen/Qwen3.8-27B](https://huggingface.co/Qwen/Qwen3.8-27B) and, for the draft, [incoai/Qwen3.8-27B-DFlash2](https://huggingface.co/incoai/Qwen3.8-27B-DFlash2). Each weight buffer in the manifest names the checkpoint tensors (or the rectangles of them) that fill it, so the runtime assembles qkv / gate_up and the draft's fused buffers straight from the safetensors shards, and a `load` program computes the rest (rope tables, Gemma norm offsets) on the device. ## Run ```bash hf download Pegainfer/kern-qwen38-sm103 --local-dir kern-qwen38 hf download Qwen/Qwen3.8-27B --local-dir qwen3.8-27b # the weights, as published kern run --manifest kern-qwen38/manifests/qwen3.8-27b.json \ --kernels kern-qwen38/cubins \ --weights qwen3.8-27b \ --gpu 0 --prompt "The capital of France is" --steps 32 ``` For the speculative manifest add the draft checkpoint as a second `--weights` (`hf download incoai/Qwen3.8-27B-DFlash2 --local-dir dflash2`, then `--weights qwen3.8-27b --weights dflash2`); its 8-row draft / verify round is the default step. The same three flags serve it over an OpenAI-compatible endpoint: ```bash kern-serve --manifest kern-qwen38/manifests/qwen3.8-27b.json --kernels kern-qwen38/cubins \ --weights qwen3.8-27b --served-model-name qwen3.8-27b ``` `kern test --reference ` attests one manifest against another on logits; `kern bench` measures programs in isolation. ## Provenance and licenses | artifacts | origin | license | |---|---|---| | `argmax`, `attn_prep`, `copy_rows`, `dflash_conv`, `dflash_select`, `embedding`, `gdn_advance`, `gdn_decode`, `gemm16`, `gemma_rms_norm`, `line_copy`, `sigmoid_mul`, `silu_mul`, `spec_round`, `topk_row`, `weight_prep` | kern's handwritten kernels, `tools/kernels-src/*.cu` in the kern repo, `nvcc -cubin -arch=sm_103a` | same as kern | | `chunk_h`, `chunk_o`, `cumsum`, `kkt`, `recompute`, `solve_tril`, `post_conv`, `conv_fwd`, `conv_update_spec`, `recurrent_spec`, `layer_norm`, `mrope`, `cache`, `reduce`, `unified`, `unified_noncausal`, `d_cache`, `d_rms_norm`, `d_rope`, `vllm_activation` | captured from vLLM 0.28's Triton JIT and CUDA extension on GB300 (the GDN ops are the flash-linear-attention kernels vLLM vendors) | Apache-2.0 (vLLM); the vendored FLA ops are MIT | | `fmhaSm100fKernel_…SwapsAbForGen` (×2), `fmhaSm103aKernel_…PersistentContext` | NVIDIA TensorRT-LLM's generated attention kernels (trtllm-gen), copied byte for byte from NVIDIA's public artifactory pin `158f6fa11ef139a098cfddcdddce73ca99d164ad/fmha/trtllm-gen/` (the same files FlashInfer downloads and ships in `flashinfer-cubin`, and TensorRT-LLM checks into its tree); sha256 pinned in the kern repo's `tools/trtllm-gen/artifacts.json` | Apache-2.0: the `LICENSE` NVIDIA publishes next to the cubins, copied to `licenses/LICENSE.trtllm-gen.txt` | Toolchain of the handwritten kernels the base manifest pins (`attn_prep`, `gdn_decode`, `gemm16`, `gemma_rms_norm-92dda…`, `sigmoid_mul-2b07…`, `silu_mul`, `weight_prep`): CUDA 13.0 nvcc (`cuda_13.0.r13.0/compiler.36424714_0`). A different nvcc yields a different cubin and therefore a different sha; the manifest pins the build that was present when it was generated, and whether two builds agree numerically is `kern test`'s verdict, not the name's. The older handwritten builds were made before the toolchain was recorded.