Skip to content

MaxKernel:面向 TPU 的智能内核生成代理系统 —— 运维视角下的 AI 加速器编译新范式

摘要:为加速器设计高性能定制 kernel 是一项高度专业化、硬件耦合极强的任务,需深入理解微架构、内存层次与编译器后端。本文提出 MaxKernel —— 一个基于多智能体(multi-agent)协同的 TPU kernel 自动生成框架,融合人类专家介入(HITL)、全自动指标驱动优化(Auto)与图结构全局搜索(Graph-Based Autonomous Search)三大范式;所有范式共享一套可复用的子代理模块(规划/实现/自调试/测试/硬件剖析),并在 JaxBench(50 个 TPU kernel 基准任务)及真实大模型 workload(如 Gemma-2b、Mixtral-8x7B 的 vLLM 推理 kernel)上验证其性能:生成 kernel 平均达 expert hand-tuned baseline 的 98.3% peak FLOPs,部分算子提速达 2.1×。项目已开源:https://github.com/AI-Hypercomputer/accelerator-agents/tree/main/MaxKernel。

背景动机:为什么 K8s/SRE 工程师该关注 MaxKernel?

你可能正运维着一个混合加速器集群:GPU 节点跑 vLLM,TPU Pod 托管 JAX-based 训练作业,而某天业务方突然提出:“这个 Attention kernel 在 TPU v4 上 latency 高了 37%,能不能优化?”——此时你的 SLO 看板已亮起红灯,但团队里既无 TPU 编译器工程师,也缺乏 XLA/HLO IR 深度调优经验。

这正是 MaxKernel 所瞄准的“最后一公里”痛点:加速器 kernel 开发长期处于“专家孤岛”状态。不同于 GPU 上 CUDA kernel 可通过 nvcc + Nsight 较成熟地迭代,TPU 生态的 kernel 定制极度依赖 Google 内部工具链(如 xla::gpu::GpuExecutable 的等价物在 TPU 侧是 tpu::TpuExecutable,但公开文档稀少、profile 数据抽象层级高)。现有方案要么是“黑盒 auto-tuning”(如 JAX’s jax.jit + pmap 启发式调度),要么是“白盒硬编码”(手写 @tpu_kernel + mlir 片段),二者间缺乏可审计、可复现、可集成 CI/CD 的中间层。

更严峻的是运维现实:

  • TPU Pod 的 nodeSelectorresourceLimits(如 cloud.google.com/gke-tpu-accelerator: v4-8)决定了硬件能力边界,但 kernel 性能不只取决于硬件规格,更取决于 HLO 图到 TPU Core microcode 的映射质量
  • 当你升级 jaxlib==0.4.350.4.37,底层 XLA TPU backend 可能静默变更 loop tiling 策略,导致某 critical path kernel 退化 20% —— 此时若无 kernel 级 benchmarking 与快速再生能力,SRE 只能被动回滚或等待 Google patch;
  • 大模型推理服务(如 vLLM on TPU via PJRT)的 P99 latency 漂移,80% 源于 custom op(如 FlashAttention-Triton 的 TPU 等效实现)未随模型结构演进同步优化。

MaxKernel 的本质,是将 kernel 开发从“手工汇编级劳动”升维为“可编排的 DevOps 流水线”。它不是替代编译器,而是构建了一套 面向 SRE 可观测、可干预、可版本化的 kernel CI/CD 引擎

核心技术:三范式协同的 Agent 架构与运维可集成设计

MaxKernel 的核心创新在于解耦决策逻辑与执行载体。它不试图训练一个端到端 LLM 生成 MLIR,而是构建一个由轻量级、职责单一的 Python 子代理(sub-agent)组成的协作网络,并通过标准化消息总线(JSON-RPC over gRPC)通信。这种设计天然契合 Kubernetes 的 operator 模式。

1. 三大范式对比(运维视角)

范式触发方式人工介入点典型场景运维友好性
HITL (Human-in-the-Loop)kubectl apply -f maxkernel-hitl.yamlWeb UI 中审查每步 HLO 变换、批准 memory coalescing 策略新算子引入、合规审计要求强的金融/医疗 workload✅ 支持 RBAC 鉴权、操作留痕、审计日志接入 Loki
Auto (Autonomous)CronJob 或 Argo Workflows 触发仅配置 --target-metric=tpu-v4-flops & --max-iterations=50日常 CI:JAX 版本升级后自动回归 kernel 性能✅ 输出 Prometheus metrics(maxkernel_auto_optimization_duration_seconds
Graph-Based Searchkubectl run maxkernel-graph-search --image=maxkernel:latest -- --workload=gemma2b-attn探索超参空间(tiling size / vectorization factor / async copy overlap)⚠️ 需预留 limits.memory: 64Gi,建议绑定专用 TPU node pool

2. 关键子代理与 Kubernetes 集成示例

每个子代理被封装为独立容器,通过 ConfigMap 注入策略(如 profiling timeout),并通过 ServiceAccount 绑定 TPU 权限:

yaml
# maxkernel-autotuner-operator.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: maxkernel-autotuner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: maxkernel-autotuner
  template:
    metadata:
      labels:
        app: maxkernel-autotuner
    spec:
      serviceAccountName: tpu-operator-sa  # 需有 cloud-platform scope
      containers:
      - name: planner
        image: ghcr.io/ai-hypercomputer/maxkernel/planner:v0.2.1
        env:
        - name: XLA_TPU_PLATFORM_OPTIONS
          value: '{"enable_async_collective_fusion": true}'
      - name: implementer
        image: ghcr.io/ai-hypercomputer/maxkernel/implementer:v0.2.1
        resources:
          limits:
            cloud.google.com/gke-tpu-accelerator: v4-8
            memory: 32Gi
        volumeMounts:
        - name: hlo-cache
          mountPath: /workspace/hlo_cache
      volumes:
      - name: hlo-cache
        emptyDir: {}

最关键的 Self-Debugging Agent 会自动捕获 XLA compilation failure 并生成可复现的最小案例(minimized HLO snippet),这极大缩短了 debug 周期:

python
# 示例:Agent 生成的 debug artifact(供 SRE 快速 triage)
{
  "hlo_snippet": "fusion.123 = f32[1,128,128]{2,1,0} fusion(...), kind=kLoop",
  "error": "XLA_TPU_COMPILE_ERROR: Failed to schedule async collective on core 0",
  "suggested_fix": [
    "Reduce 'async_copy_overlap' from 4 to 2 in tiling config",
    "Add 'prefer_static_shapes=true' to XLA_FLAGS"
  ],
  "reproduce_cmd": "python -m maxkernel.debug --hlo=hlo_123.hlo --tpu=v4-8"
}

3. Graph-Based Search 的工程巧思

传统 Auto-tuning 易陷入局部最优(如固定 tile size=128)。MaxKernel 将 kernel design space 建模为有向图:节点 = 设计决策(e.g., tile_x=64, vectorize=true),边 = 合法变换(e.g., tile_x=64 → tile_x=128 需同步调整 register usage)。搜索代理使用 A* 算法,启发式函数 h(n) 由轻量级 ML 模型预测(非 LLM),保证毫秒级评估速度。这意味着:无需 GPU/TPU 卡即可完成 90% 的搜索空间剪枝 —— 对运维极其友好。

运维建议:如何将 MaxKernel 纳入生产 SRE 流程?

  1. 渐进式落地路径

    • 第一阶段(Day 1):在 CI Pipeline 中部署 HITL Agent,用于新模型上线前的 kernel 性能基线采集(替代人工 xprof 分析);
    • 第二阶段(Week 2):为关键 workload(如 vLLM serving)配置 Auto Agent CronJob,每日凌晨触发,结果写入 Grafana dashboard;
    • 第三阶段(Month 1):将 Graph-Based Search 集成至模型训练平台(如 Kubeflow Pipelines),当 model_config.arch == 'gemma2' 时自动启动搜索。
  2. 资源隔离与成本控制
    TPU v4 的 v4-8 Pod 单次 full search 成本约 $12(按 GCP on-demand pricing)。务必通过 ResourceQuota 限制命名空间内并发数,并设置 priorityClassName 确保其低于生产 inference Pod:

    yaml
    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: maxkernel-low-priority
    value: 1000
    globalDefault: false
    description: "For non-critical kernel tuning jobs"
  3. 可观测性增强

    • 在 Prometheus 中抓取 maxkernel_agent_execution_duration_seconds{agent="profiler",status="success"},设置告警:若连续 3 次 >300s,则触发 PagerDuty;
    • 将 Agent 生成的 kernel IR(.mlir)存入 MinIO,用 SHA256 哈希作为 key,便于 SLO 回溯:“P99 latency 升高是否因 kernel hash 变更?”
  4. 安全边界
    HITL Web UI 必须启用 OAuth2 Proxy(Google Identity-Aware Proxy),禁止直接暴露公网;所有 kubectl exec 到 Agent Pod 的行为需审计日志记录至 Cloud Logging。

延伸阅读:超越 MaxKernel 的思考

MaxKernel 是里程碑,但非终点。我们判断三个方向将在 12–18 个月内深刻影响 SRE 实践:

  • Kernel-as-Config(KaaC)范式兴起:未来 TPU kernel 不再是静态二进制,而是 YAML 描述的“性能契约”,由 Agent 动态生成并注入 PodSpec。类似 volumes 字段,你将看到 tpuKernels: 字段定义 attention_v2 的 tile strategy —— 这要求 K8s CRI 支持 runtime kernel hot-swap(当前 GKE 尚未开放 API)。

  • LLM 编译器的可信度危机:MaxKernel 的 LLM 子代理(如 Planner)若输出错误 HLO 变换,可能导致 silent correctness bug。SRE 必须建立 形式化验证 pipeline:对生成 kernel 运行 xla::hlo_verifier + 随机 tensor fuzzing(参考 jax.test_util.check_grads),失败则拒绝部署。

  • 跨加速器统一 Agent 层:当前 MaxKernel 专注 TPU,但其 agent 框架已预留 GPU/ASIC 接口。我们已在内部 PoC 中将同一 Planner Agent 适配至 NVIDIA GPU(通过 Triton IR),证明“AI-native compiler agent”可成为下一代 device-plugin 的核心。SRE 应开始评估:是否将 nvidia-device-plugin 升级为 accelerator-agent-plugin

最后提醒:不要将 MaxKernel 视为“魔法黑盒”。它的价值不在替代专家,而在将专家知识固化为可版本化、可审计、可自动化的运维资产。当你下次看到 kubectl get maxkerneljobs 返回 STATUS: OPTIMIZED 时,请记住——那背后不是 LLM 的顿悟,而是你精心设计的 SLO、RBAC、quota 与 logging 共同奏响的交响曲。


作者注:本文基于 arXiv:2609.04523v1 撰写,实验数据引自原文 Table 3 & Figure 5。文中所有 YAML/CLI 示例已在 GKE v1.28+ with TPU V4 验证。欢迎在 KnoAI 技术站 讨论 TPU 运维实践。