1. 项目概述:当大语言模型遇上NPU内核开发
去年在部署Ascend 910B集群时,我遇到了一个典型问题:官方提供的算子库缺少某个特定稀疏矩阵运算的优化实现。传统解决方案要么等待厂商更新,要么投入专人开发——这两种方式都意味着数周甚至数月的延迟。这正是AscendKernelGen项目试图颠覆的现状:通过LLM自动生成可直接运行的NPU计算内核代码。
这个由20位研究者合作完成的系统,针对华为Ascend NPU架构,构建了完整的LLM生成-评估工作流。其核心突破在于将通用大模型的代码生成能力,与特定硬件约束(如内存带宽、计算单元排布)深度融合。实验数据显示,在Level-2复杂度内核生成任务中,其编译通过率从基线模型的0%提升至95.5%(Pass@10),功能正确率达到64.3%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心技术架构解析
2.1 领域自适应训练框架
传统LLM在NPU内核生成任务中表现糟糕的原因主要有三:
- 厂商DSL(如AscendC)的语法规范与通用编程语言差异显著
- 硬件约束条件(如寄存器数量、内存延迟)需要精确建模
- 训练数据极度稀缺(商业NPU的kernel实现通常闭源)
AscendKernelGen的创新在于构建了三级训练体系:
- 基础预训练:在公开的C/C++代码库(如Linux内核、数值计算库)上微调
- 领域适应:使用自建的Ascend-CoT数据集(含12,000个带思维链标注的kernel样本)
- 强化精调:基于NPUKernelBench的编译/执行反馈进行RLHF优化
关键细节:思维链标注包含工程师开发kernel时的典型决策过程,例如:"由于Tensor Core的矩阵尺寸限制,这里需要将128x128矩阵拆分为4个64x64块"。
2.2 执行感知的评估体系
大多数代码生成研究只关注编译通过率,但NPU内核必须满足:
- 功能正确性(数值精度误差<1e-6)
- 性能达标(达到手工优化代码的80%以上)
- 资源约束(寄存器使用不溢出等)
项目组设计的NPUKernelBench包含三个维度测试:
python复制class KernelTestCase:
def __init__(self):
self.compil
