evofabric.app.kernel_evolve#
- class evofabric.app.kernel_evolve.BaseEvaluator#
Abstract Evaluator of the Kernel Evolution Process
- class evofabric.app.kernel_evolve.GPUEvaluator#
GPU-based Kernel Evolution Evaluator
- class evofabric.app.kernel_evolve.Metrics(speedup: float, original_time: float, optimized_time: float, error: str | None, traceback: str | None)#
Kernel Evolution Indicator Class
- Parameters:
speedup (float) – Speedup Ratio After Kernel Rewrite
original_time (float) – Initial code execution time
optimized_time (float) – Execution time of the optimized generated code
error (str) – Errors generated during the evaluation process
traceback (str) – Evaluation process error tracking information
- class evofabric.app.kernel_evolve.LLMConfig(model_class: str, model_name: str, api_key: str, base_url: str, **kwargs)#
Kernel Evolution LLM Configuration Class
- Parameters:
model_class (str) – Model class name
model_name (str) – Model Name
api_key (str) – Model API Key
base_url (str) – Model’s base URL
**kwargs – Arbitrary keyword arguments
Example Usage:
from evofabric.app.kernel_evolve import LLMConfig LLMConfig( model_class="OpenAIChatClient", model_name='your-model-name', api_key="xxxx", base_url="xxxx", )
- class evofabric.app.kernel_evolve.KernelEvolve(initial_code: str, llm_config: LLMConfig, evaluator: BaseEvaluator)#
Kernel Evolution Controller, for initiating kernel evolution
- Parameters:
initial_code (str) – Operation Code Pending Evolution
llm_config (LLMConfig) – Kernel Evolution LLM Configuration Class
evaluator (BaseEvaluator) – Evaluator implementation for generating kernel code
- evolve()#
Execute self-evolution and return the generated kernel code
- Returns:
flag (boolean): execution success flag
result (str): generated kernel code or error message
- Return type:
tuple
Example Usage:
from evofabric.app.kernel_evolve import BaseEvaluator, LLMConfig from evofabric.app.kernel_evolve.core.controller import KernelEvolve original_code = ''' import torch import torch.nn as nn class Model(nn.Module): """ calculate C = diag(A) * B + D A: (N,) B: (N, M) D: (N, M) C: (N, M) """ def __init__(self, BLOCK_M=128): super(Model, self).__init__() self.BLOCK_M = BLOCK_M def forward(self, A, B, D): return torch.diag(A) @ B + D def get_inputs(): N, M = 4096, 4096 A = torch.randn(N, dtype=torch.float32) B = torch.randn(N, M, dtype=torch.float32) D = torch.randn(N, M, dtype=torch.float32) return [A, B, D] def get_init_inputs(): return [] ''' config = LLMConfig( model_class="PanguClient", model_name='Pangu_38b', api_key="xxxx", base_url="xxxx", default_headers={"csb-token": "xxxx"} ) evaluator = GPUKernelEvaluator() kernel_evolve = KernelEvolve( initial_code=original_code, llm_config=config, evaluator=evaluator) success_flag, result = kernel_evolve.evolve()