# Kernel-Gen **Repository Path**: zhenghaoq/kernel-gen ## Basic Information - **Project Name**: Kernel-Gen - **Description**: kernel-gen - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-03-13 - **Last Updated**: 2025-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Kernel-Gen 框架使用手册 V0.0.2 ## 1. 项目流程 ![image-20250313161332644](./images/project_plan.png) ## 2. 当前进度 ### 2.1 已完成内容 #### 2.1.1 框架开发 - `Ascend C` 编译框架搭建; - 奖励机制设计; - 自动匹配算子和统一编译的开发; #### 2.1.2 数据准备 ##### 2.1.2.1 SFT数据准备( `QA pair` 准备) - 根据章节内容生成大量问题; - 使用 `LLM` 根据问题判断需要的章节; - 使用 `LLM` 根据给定内容生成思维链和答案; ##### 2.1.2.2 RAG数据准备 - 使用LLM根据任务判断需要的章节; - 使用LLM根据给定内容生成 `Ascend C` 代码; ### 2.2 遗留问题 #### 2.2.1 框架开发 自动匹配算子和统一编译的遗留问题: - 当前自适应的匹配过程不能判断出 `ascend c` 代码中的每个入参是 `input` 还是 `output` ,这会导致不能自动化生成 `verifier/verifier.py` 中的 `call_curr_op` 接口函数的入参和调用方法。后续考虑把这块接口调用的自动化单独写成一个文件,标杆接口调用也要自动化,单独写成一个文件, `verifier/verifier.py` 只负责对 `call_curr_op` 和 `golden_curr_op` 进行调用和计算当前 `ascend c` 代码的得分; - 在测试用例中,标准 `input` 如何通过规则匹配的方法自动职别并被写出; - 标准 `blockDim` 怎么给定未知,工作机理带明确(有一些设置限制和规则); - 当前使用kernel直调的方法来搭建 `Ascend C` 代码,因此 `tiling` 结构体当前通过在 `curr_op_tiling.h` 中给定,需要 `LLM` 来生成,这一点还需要修改 `prompt` 来达到; - ~~在 `curr_op_tiling.h` 中,由于 Ascend C kernel 代码和 pybind 代码的编译方法的差异,一个能获取 `kernel_operator.h` 里的变量,一个不能,因此需要通过编译宏 `ASCENDC_MODULE_OPERATOR_H` 来控制手动定义需要的来自于 `kernel_operator.h` 里的变量。**这个方法能保证编译通过,但是很不优雅,后续需要想办法优化和改进**;~~ 已优雅 #### 2.2.2 数据准备 - 文档原文中有很多存在章节之间的 `reference`,`LLM` 识别出章节序号并提取对应内容,但不会提取原文对应章节中 `refer` 的对应章节的内容; - 存在很多冗余知识,比如我们需要的是 `kernel` 直调的 `Ascend C` 代码,而不是 `host` 和 `kernel` 分离的 `Ascend C` 代码,说明第七章可能不需要,第八章才是需要的,而第七章可能反而造成模型生成的代码的结构和预期输出的结果不匹配; - 高阶 `API` 需要删掉; - 调整流程中所有的 `prompts` ; ## 3. 使用方法 ### 3.1 SFT QA 数据生成 1. 在 `data/questions.json` 里修改问题; 2. 执行如下代码: ```shell cd data python generate_think_answer.py ``` 3. 在 `./data/think_ans.json` 文件中找到生成的所有问题的思维链和答案; ### 3.2 RAG 结果生成 1. 在 `data/tasks.json` 里修改任务; 2. 执行如下代码: ```shell cd data python generate_codes_with_rag.py ``` 3. 在 `./data/generated_ascend_codes/` 目录下找到生成的所有任务的 Ascend C 代码; ### 3.2 验证 RAG 生成的 Ascend C 代码的编译 执行如下代码,会自动编译 `./data/generated_ascend_codes/` 目录下的所有 `.cpp` 文件: ```bash cd data python verify_generated_codes.sh ``` > 自动执行代码结果还未开发出来,目前只能自动验证代码的编译! ### 3.3 验证通用 Ascend C 代码的编译 运行方法:把需要进行打分的 `ascendc cpp` 文件当作入参传递给 `run.sh` 并使用 `bash` 执行。(注意:当前 `verifier/verifier.py` 中仍然需要手动修改对应 `run_curr_op` 和 `golden_curr_op` 的入参和使用方式) ```bash bash run.sh ./examples/custom_sinh/custom_sinh.cpp ``` > 在编译完成之后,如果需要执行算子来测试精度性能,需要手动修改 `verifier.py` 中的测试用例,修改之后执行如下代码: > > ```{bash} > cd build > python ../verifier/verifier.py > ```