Skip to content

heiheiha798/AICAS

Repository files navigation

技术方案报告

0. Update

2026-06-28

注:本repo对于参赛毫无价值,请使用Spec Decode,对着TextVQA炼丹吧

1. 研究背景

本项目面向视觉语言模型(VLM)的高效推理优化,目标是在不改变模型架构、不依赖外部服务、不引入额外第三方包的前提下,降低端到端推理时延并提升生成阶段的执行效率。针对 VLM 推理链路长、跨模态模块多、prefill 与 decode 阶段热点差异明显的特点,我们将优化重点放在 kernel 融合、缓存复用、控制流压缩和运行时接管上。

2. 相关工作

VLM 推理优化通常包含三个层面:

  • 框架层优化:减少 Python 热路径中的调度和对象构造开销
  • 算子层优化:对高频热点算子做融合或替换,减少中间张量与 launch 开销
  • 运行时优化:通过静态缓存、图捕获和 C++ runtime 接管稳定路径

本项目的实现思路与常见高性能推理系统一致,即尽量减少小 kernel 碎片、降低 host 参与度,并在满足比赛约束的前提下使用 Triton、自定义 CUDA/C++ 扩展和 C++ runtime 完成优化。

3. 方法设计

3.1 整体设计

优化实现主要分布在以下三个位置:

  • evaluation_wrapper.py
  • cpp_runtime
  • kernels/

三部分的职责划分如下:

  • evaluation_wrapper.py 负责模型加载、运行时开关管理、monkey patch 与主推理流程装配
  • kernels/ 提供自定义 Triton/CUDA kernel,用于替换热点算子
  • cpp_runtime/ 提供 C++ runtime bridge,用于承接部分 prefill 热路径和运行时控制逻辑

3.2 evaluation 层优化

evaluation_wrapper.py 中的核心工作是把热点路径上的默认实现替换为更轻量的执行方案,并将多个优化统一纳入同一套环境变量和运行时控制逻辑中。主要优化包括:

  • 启用 fp16 prefill / decode 优化路径
  • 为视觉 prefill 中间结果建立 cache,减少重复构造
  • 对 connector 路径的 scatter 和索引逻辑做快路径处理
  • 对 text prefill mask 构造做快路径处理
  • 对 decode 阶段的 rope、position advance、kv update 等高频小操作做融合
  • 对 prefill 阶段仅保留必要 logits,减少无用输出张量
  • 启用 CUDA Graph,用于压缩稳定 decode 路径中的调度开销

这一层的目标是减少高层框架开销,把原本分散的小操作尽可能组合为更稳定、可复用的执行流程。

3.3 kernels 层优化

kernels/ 中主要实现了多类热点算子的融合与替换,重点围绕以下路径展开:

  • fused decode rmsnorm + rope
  • fused kv update
  • fused prefill qk + rope + kv update
  • fused RMSNorm
  • fused add + RMSNorm
  • fused interlayer add + RMSNorm
  • fused MLP SwiGLU
  • fused vision rotary
  • fused vision add + layernorm
  • fused text deepstack

这些 kernel 的共同目标是:

  • 减少 kernel launch 次数
  • 减少中间张量落地
  • 降低显存读写次数
  • 压缩 decode 和 prefill 中的高频 elementwise / 小粒度计算开销

在实现上,项目优先使用当前环境中已有的 Triton 与自定义 CUDA/C++ 扩展能力,而不是引入额外外部库。

3.4 C++ runtime 优化

cpp_runtime/ 的主要作用是把部分原本由 Python 驱动的 prefill 热路径下沉到 C++ 侧,减少 Python 调度参与度。当前这部分工作主要包括:

  • 提供 C++ runtime bridge 并在 Python 侧统一加载
  • 为 prefill 文本路径提供 C++ runtime stub
  • 通过预编译 .so 或按需在线重编译的方式加载 runtime
  • 将稳定且结构固定的 prefill 侧逻辑交给 C++ 运行时执行

这一层的核心目标不是更换模型算子语义,而是减少高层控制流和运行时管理造成的额外开销。

在运行时加载策略上,默认行为为优先加载已经存在的 .so 文件;如果产物缺失,会从源码自动编译一次。显式设置 AICAS_CPP_RUNTIME_FORCE_REBUILD=1 时会忽略已有产物并强制重编译。该设计用于区分开发态与提交态:本地开发可以强制重编译验证最新修改,提交环境优先走预编译产物,缺失时也不会直接因为 .so 不存在而失败。

4. 实验设置

项目通过 run.sh 启动 benchmark,运行环境使用 CUDA 单卡推理,核心依赖由 requirements.txt 管理。模型加载、kernel patch、CUDA Graph 和 C++ runtime bridge 的启用逻辑均由 evaluation_wrapper.py 统一控制。本地执行 run.sh 时可以通过环境变量控制 C++ runtime 是否重编译;提交时不依赖 run.sh,默认优先加载预编译 .so,必要时自动编译。

5. 结论

本项目围绕 evaluation_wrapper.pykernels/cpp_runtime/ 三个层面构建了一套面向 VLM 推理的软硬件协同优化方案。方案的核心思路是:

  • 用 kernel 融合解决高频小算子碎片化问题
  • 用缓存和快路径减少 prefill 阶段的重复工作
  • 用 CUDA Graph 与 C++ runtime 压缩运行时调度成本

About

IEEE AICAS 2026 Grand Challenge - 面向AI芯片的VLM高效推理与优化 - 初赛rank16;复赛rank10

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors