# cann-var-sequence-gemm **Repository Path**: ascend/cann-var-sequence-gemm ## Basic Information - **Project Name**: cann-var-sequence-gemm - **Description**: 基于昇腾CANN异构计算架构,使用Ascend C进行不同长度序列下LLMs推理中GEMM优化算法研究及优化实现。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 122 - **Forks**: 4 - **Created**: 2025-03-05 - **Last Updated**: 2025-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cann-var-sequence-gemm #### 介绍 基于昇腾CANN异构计算架构,使用Ascend C进行不同长度序列下LLMs推理中GEMM优化算法研究及优化实现。 #### 软件架构 软件架构说明 #### 安装教程 1. 安装CANN环境 2. 安装python运行环境 #### 使用说明 当前目录为`cann-var-sequence-gemm`文件夹所在目录。 ##### 1 BatchGemm **用于验证算法功能、测试算法性能。** 参数说明 * zeroPaddingM、zeroPaddingN、zeroPaddingK为零填充后矩阵维度,当前场景下所计算有效数据维度与零填充数据维度相同; * batchCount为批量数。 ###### 1.1 逐指令执行验证功能 **进入目录** ```shell cd ./test/BatchGemm ``` **编译指令** customName为本次编译用于执行批量测试的可执行文件名; ```shell ./batchgemm_make.sh customName ``` **测试数据生成** 生成测试数据,最终数据生成至 ./test/BatchGemm/data 文件夹下。 ```shell python3 test_gen_data.py 0 0 0 zeroPaddingM zeroPaddingN zeroPaddingK batchCount ``` **执行+验证** 读取 ./test/BatchGemm/data 文件夹下数据,并验证结果; deviceId为运行的NPU卡号。 ```shell ./batchgemm deviceId 0 0 zeroPaddingM zeroPaddingN zeroPaddingK batchCount ``` ###### 1.2 脚本执行验证功能 测试脚本已经写入以上指令,可直接执行。 deviceId为运行的NPU卡号。 ```shell cd ./test/BatchGemm/single_test ./batchgemm_run.sh deviceId 0 0 zeroPaddingM zeroPaddingN zeroPaddingK batchCount ``` ###### 1.3 批量测试 1000组随机shape数据输入数据已存入 ./test/BatchGemm/batch_test/input_params,最终结果输出至./test/BatchGemm/batch_test/output_result。 customName为本次编译用于执行批量测试的可执行文件名; deviceId为运行的NPU卡号。 **性能测试** ```shell cd ./test/BatchGemm/batch_test ./batch_test.sh deviceId customName 0 ``` **功能测试** ```shell cd ./test/BatchGemm/batch_test ./batch_test.sh deviceId customName 1 ``` ##### 2 LLMsGEMM_batch_QKT、LLMsGEMM_batch_QKTV、LLMsGEMM_batch_QKTVP **将算法置于单个应用场景。** zeroPaddingM、zeroPaddingN、zeroPaddingK为零填充后矩阵维度,各场景下有效数据维度大小为M、N、K: * M∈[0, zeroPaddingM]; * N、K维度 * QKT: N = M, K = zeroPaddingK; * QKTV: K = M, N = zeroPaddingK; * QKTVParameter: K = zeroPaddingK, N = zeroPaddingN; batchCount为批量数。 ###### 2.1 逐指令执行 **进入目录(以batch QKT任务为例)** ```shell cd ./test/LLMsGEMM_batch_QKT ``` **编译指令** ```shell ./make ``` **数据生成(以batch QKT任务为例)** 生成测试数据,最终数据生成至 ./test/LLMsGEMM_batch_QKT/data 文件夹下。 ```shell python3 test_gen_data.py 1 0 0 zeroPaddingM zeroPaddingN zeroPaddingK batchCount # QKT 任务 python3 test_gen_data.py 2 0 0 zeroPaddingM zeroPaddingN zeroPaddingK batchCount # QKTV 任务 python3 test_gen_data.py 3 0 0 zeroPaddingM zeroPaddingN zeroPaddingK batchCount # QKTVP 任务 ``` **执行+验证(以batch QKT任务为例)** 读取 ./test/LLMsGEMM_batch_QKT/data 文件夹下数据,并验证结果; deviceId为运行的NPU卡号。 ```shell ./LLMsGEMM_batch_QKT deviceId 0 0 zeroPaddingM zeroPaddingN zeroPaddingK batchCount ``` ###### 2.2 脚本执行 测试脚本已经写入以上指令,可直接执行。 deviceId为运行的NPU卡号。 ```shell cd ./test/LLMsGEMM_batch_QKT/single_test ./single_run.sh deviceId 0 0 zeroPaddingM zeroPaddingN zeroPaddingK batchCount ``` ##### 3 LLMsGEMM_whole_task **将算法置于完整应用场景。** 各个任务零填充后数据维度: * QKT: Q[M, K], KT[K, M] * QKTV: QKT[M, M], V[M, K] * QKTVParameters: QKTV[M, K], P[K, N] 有效文本长度为0-M **进入目录(以batch QKT任务为例)** ```shell cd ./test/LLMsGEMM_whole_task ``` **编译指令** ```shell ./make ``` **数据生成** ```shell python3 whole_gen_data.py M N K batchCount ``` **执行+验证** ```shell ./LLMsGEMM_whole_task_main M N K batchCount ``` #### 贡献者 * 陆璐 * 张羽 * 古钟书 * 王远飞 * 郑俊成 * 李扬睿 * 曹哲铭 #### 贡献者单位 * 华南理工大学 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)