Download app.py from aaloksan/kernel: direct link, hf CLI and curl.
- Browser
- Download file 3.76 kB
-
https://huggingface.co/spaces/aaloksan/kernel/resolve/main/app.py
- Command line
-
hf download hf://spaces/aaloksan/kernel/app.py
-
curl -L -o app.py https://huggingface.co/spaces/aaloksan/kernel/resolve/main/app.py
3.76 kB
| import os | |
| from dotenv import load_dotenv | |
| from typing import Iterator, Tuple | |
| from env_server import KernelOptimization_env, TASKS, app as openenv_app | |
| from openai import OpenAI | |
| from models import Action | |
| import gradio as gr | |
| import traceback | |
| import uvicorn | |
| from fastapi.responses import RedirectResponse | |
| load_dotenv() | |
| def task_baseline_code(task_id: str) -> str: | |
| return TASKS[task_id]["baseline_code"] | |
| def extract_code(text: str) -> str: | |
| if "```" not in text: | |
| return text | |
| start = text.find("```") | |
| end = text.rfind("```") | |
| chunk = text[start + 3 : end] | |
| if chunk.startswith("cuda") or chunk.startswith("cpp"): | |
| return chunk.split("\n", 1)[1] | |
| return chunk | |
| def ui(task_id:str, kernel_code: str, max_steps:int, openai_api_key:str)-> Iterator[Tuple[str,str]]: | |
| log= [] | |
| env=KernelOptimization_env() | |
| api_key = openai_api_key or os.getenv("OPENAI_API_KEY") | |
| if not api_key: | |
| yield "ERROR: Missing OPENAI_API_KEY", "" | |
| return | |
| model = os.getenv("MODEL_NAME", "llama-3.2-3b") | |
| client = OpenAI(api_key=api_key, base_url=os.getenv("API_BASE_URL", "https://api.openai.com/v1")) | |
| obs = env.reset(task_id=task_id)["observation"] | |
| if kernel_code and kernel_code.strip(): | |
| custom_code = kernel_code.strip() | |
| env.state.best_code = custom_code | |
| obs["current_best_code"] = custom_code | |
| best_code = obs["current_best_code"] | |
| log.append(f"Task: {obs['task_name']}") | |
| for _ in range(max_steps): | |
| try: | |
| prompt = f"Optimize CUDA code:\n{obs['current_best_code']}\nPending checks: {obs['pending_checks']}\nReturn code only." | |
| res = client.chat.completions.create( | |
| model=model, | |
| temperature=0.0, | |
| messages=[ | |
| {"role": "system", "content": "Return only optimized CUDA code."}, | |
| {"role": "user", "content": prompt}, | |
| ], | |
| ) | |
| raw = (res.choices[0].message.content or "").strip() | |
| code = extract_code(raw).strip() or obs["current_best_code"] | |
| step = env.step(Action(optimized_code=code, strategy="ui_proposed")) | |
| obs = step.observation.model_dump() | |
| best_code = obs["current_best_code"] | |
| log.append(f"step={obs['step_count']} reward={step.reward.value:.3f} speedup={obs['current_best_speedup']:.3f}x") | |
| yield "\n".join(log), best_code | |
| if step.done: | |
| break | |
| except Exception as e: | |
| yield f"{chr(10).join(log)}\nERROR: {e}\n{traceback.format_exc()}", best_code | |
| return | |
| with gr.Blocks(title="CUDA Kernel Optimizer") as demo: | |
| gr.Markdown("CUDA Kernel Optimizer - OpenEnv-aligned workflow") | |
| task = gr.Dropdown(choices=list(TASKS.keys()), value="vector_add_easy", label="Task") | |
| kernel_input = gr.Code( | |
| label="Kernel Code (editable, used as optimization input)", | |
| language="cpp", | |
| lines=16, | |
| value=TASKS["vector_add_easy"]["baseline_code"], | |
| ) | |
| steps = gr.Slider(minimum=1, maximum=12, value=6, step=1, label="Max Steps") | |
| key = gr.Textbox(label="OpenAI API Key", type="password", placeholder="sk-...") | |
| run = gr.Button("Run Optimization", variant="primary") | |
| logs = gr.Textbox(label="Logs", lines=14) | |
| code = gr.Code(label="Best Code", language="cpp", lines=16) | |
| task.change(task_baseline_code, inputs=[task], outputs=[kernel_input]) | |
| run.click(ui, inputs=[task, kernel_input, steps, key], outputs=[logs, code]) | |
| app = gr.mount_gradio_app(openenv_app, demo, path="/ui") | |
| def root(): | |
| return RedirectResponse(url="/ui") | |
| if __name__ == "__main__": | |
| uvicorn.run("app:app", host="0.0.0.0", port=int(os.getenv("PORT", "7860"))) | |