YMRohit's picture
Rebuild run and verify docs
1ed61a1
|
Raw
History Blame Contribute Delete
7.74 kB

A newer version of the Gradio SDK is available: 6.20.0

Upgrade

Run and verify OUROBOROS Kernel Mint

This Space has three useful execution paths:

  • Space Local mode: MiniCPM5-1B GGUF runs with llama.cpp inside the Space, then the in-process referee checks and times the candidate on the Space GPU.
  • Space Pro mode: the Qwen3.6-27B smith runs through the Modal backend, then the same referee contract is applied before returning a result.
  • Your machine: clone the Space or the GitHub repo, run the 1B or 27B model yourself, then send the generated Triton source through the referee.

A result only matters after the referee compiles the kernel, checks allclose against PyTorch, and times it against PyTorch eager, torch.compile, and torch.compile max-autotune.

1. Run the Space locally

Use this path when you want the same UI on your own CUDA machine.

git clone https://huggingface.co/spaces/build-small-hackathon/ouroboros-kernel-mint
cd ouroboros-kernel-mint
python -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txt
python app.py

Open http://localhost:7860, then use Local (offline) in the Build or Expert tab. When not running on Hugging Face ZeroGPU, the spaces.GPU decorator becomes a no-op and the app uses your attached GPU directly.

Useful local knobs:

LOCAL_GGUF_REPO=YMRohit/ouroboros-kernelsmith-minicpm5-1b-GGUF
LOCAL_GGUF_FALLBACK_REPO=openbmb/MiniCPM5-1B-GGUF
LOCAL_GGUF_QUANTS=Q5_K_M,Q4_K_M,Q8_0
LOCAL_LLAMA_GPU_LAYERS=-1
LOCAL_LLAMA_CTX=4096
LOCAL_MAX_TOKENS=768
python app.py

2. Run the 1B GGUF smith directly

This mirrors Space Local mode. It is the simplest way to run the small model without Modal.

python -m pip install torch triton huggingface_hub \
  --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu130 \
  llama-cpp-python==0.3.28
from huggingface_hub import HfApi, hf_hub_download
from llama_cpp import Llama

repo = "YMRohit/ouroboros-kernelsmith-minicpm5-1b-GGUF"
files = [f for f in HfApi().list_repo_files(repo) if f.lower().endswith(".gguf")]
filename = next((f for f in files if "Q5_K_M" in f), files[0])
gguf = hf_hub_download(repo, filename=filename)

llm = Llama(model_path=gguf, n_ctx=4096, n_gpu_layers=-1)

system = "You are an expert GPU kernel engineer. Output only one fenced python code block."
user = "Write a fused Triton kernel for row-wise softmax. Use stable max-subtraction. Return run(x)."
prompt = (
    f"<|im_start|>system\n{system}<|im_end|>\n"
    f"<|im_start|>user\n{user}<|im_end|>\n"
    "<|im_start|>assistant\n```python\n"
)
out = llm.create_completion(prompt, max_tokens=768, temperature=0.7, top_p=0.97)
print(out["choices"][0]["text"])

3. Run the 1B PEFT adapter

Use this path when you want the LoRA adapter instead of the GGUF export.

python -m pip install torch transformers peft accelerate triton
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

tok = AutoTokenizer.from_pretrained("openbmb/MiniCPM5-1B", trust_remote_code=True)
base = AutoModelForCausalLM.from_pretrained(
    "openbmb/MiniCPM5-1B",
    trust_remote_code=True,
    torch_dtype="auto",
    device_map="auto",
)
model = PeftModel.from_pretrained(base, "YMRohit/ouroboros-kernelsmith-minicpm5-1b")
model.eval()

4. Run the 27B adapter locally

The 27B smith is the stronger Qwen3.6-27B run behind the 76 verified compiler-beating kernels. It uses the same prompt contract, but it is not a laptop path. The training run used Modal H200s and peaked around 110 GB VRAM. For local inference, expect a large GPU, multi-GPU device_map="auto", or your own quantization setup.

python -m pip install torch transformers peft accelerate triton
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

tok = AutoTokenizer.from_pretrained("Qwen/Qwen3.6-27B", trust_remote_code=True)
base = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3.6-27B",
    trust_remote_code=True,
    torch_dtype="auto",
    device_map="auto",
)
model = PeftModel.from_pretrained(base, "YMRohit/ouroboros-kernelsmith-qwen3.6-27b")
model.eval()

If that is too large for your machine, use Pro in the Space. It calls the hosted 27B backend and still runs the same compile/correctness/timing referee before returning a verdict.

5. Prompt contract

The smith is not being used as a general coding assistant. Keep the prompt narrow:

  • ask for exactly one operation,
  • name the input tensors and tensor order,
  • require one fenced Python code block,
  • require one run(...) entry point,
  • require fp32 accumulation for reductions,
  • forbid prose outside the code block,
  • verify the output before trusting it.

System prompt:

You are an expert GPU kernel engineer. Write a single correct, fast Triton kernel.
Output ONLY one fenced python code block defining run(*inputs) and its @triton.jit
kernel. Accumulate reductions in float32. No prose.

User template:

Operation: add_rmsnorm_gelu
Inputs: x, residual, weight. Each row is one transformer hidden state.
Reference: y = gelu(rmsnorm(x + residual, weight)).
Return: one fenced python block with imports, one @triton.jit kernel, and run(x, residual, weight).
Target: correct vs PyTorch first, then faster than torch.compile max-autotune.

Example: residual RMSNorm plus GELU.

Write a fused Triton kernel for add_rmsnorm_gelu.
Inputs are x, residual, and weight, all CUDA tensors.
Compute RMSNorm over each row after x + residual, multiply by weight, then apply GELU.
Use fp32 accumulation for the row reduction.
Return exactly one fenced python code block with run(x, residual, weight).

Example: stable softmax.

Write a fused Triton kernel for row-wise softmax.
Input x is a CUDA tensor shaped [M, N].
Use the stable max-subtraction form.
Return exactly one fenced python code block with run(x).
Do not include explanation text outside the code block.

Example: SwiGLU.

Write a fused Triton kernel for swiglu.
Inputs are gate and up tensors with the same shape.
Compute silu(gate) * up elementwise.
Return exactly one fenced python code block with run(gate, up).
Keep the launch grid simple and contiguous-row friendly.

6. Verify a generated kernel

Save the model output as candidate.py, then run it through the referee. The public helper signature is:

evaluate_inprocess_full(kernel_src, spec_name, n_shapes=2, n_iters=30)

Minimal check:

git clone https://github.com/ymrohit/ouroboros-kernelsmith.git
cd ouroboros-kernelsmith
python -m pip install torch triton numpy
import pathlib
import sys

sys.path.insert(0, "referee")
from harness import evaluate_inprocess_full

kernel_src = pathlib.Path("candidate.py").read_text()
result = evaluate_inprocess_full(kernel_src, "add_rmsnorm_gelu", n_shapes=2, n_iters=30)
print(result.to_dict())

Submission-grade output has:

  • status == "ok",
  • correct == True,
  • nonzero eager, compile, and max-autotune timings,
  • speedup_maxauto > 1.0 if claiming a compiler-beating result.

7. Backend endpoints

The live Space already has these defaults wired in app.py:

1B Modal backend:  https://ymrohit--ouroboros-kernel-mint-mint-mint.modal.run
27B Modal backend: https://ymrohit--ouroboros-kernel-mint-pro-mint-mint.modal.run
ops menu:          https://ymrohit--ouroboros-kernel-mint-ops.modal.run
leaderboard:       https://ymrohit--ouroboros-kernel-mint-leaderboard.modal.run

The backend can scale to zero, so the first non-local mint of a session can take about 90 seconds while the model wakes up. The recorded replay in the Space is a real earlier verified mint, not a mockup.