| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 3 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 3 个月前 | ||
| 1 个月前 |
SwiGLU样例
概述
本样例在大语言模型和混合专家(MoE)场景下,基于SwiGLU高阶API对两个输入Tensor按元素做SwiGLU计算。SwiGLU是采用Swish作为激活函数的GLU变体,计算公式为 dst_i = src0_i ⊗ Swish(src1_i),其中 Swish(x) = x/(1+e^(-βx))。该API常用于LLM中的门控前馈网络(FFN),支持float/half/bfloat16_t等数据类型。本样例使用float数据类型,输入Tensor元素个数为32,beta值为1,完成SwiGLU激活计算。
支持的产品
- Ascend 950PR/Ascend 950DT
- Atlas A3 训练系列产品/Atlas A3 推理系列产品
- Atlas A2 训练系列产品/Atlas A2 推理系列产品
目录结构介绍
├── swiglu
│ ├── scripts
│ │ ├── gen_data.py // 输入数据和真值数据生成脚本
│ ├── CMakeLists.txt // 编译工程文件(支持 -DCMAKE_ASC_RUN_MODE、-DCMAKE_ASC_ARCHITECTURES)
│ ├── data_utils.h // 数据读入写出函数
│ └── swiglu.asc // Ascend C样例实现 & 调用(含Tiling机制)
样例描述
-
样例功能:
SwiGLU是采用Swish作为激活函数的GLU变体。计算公式如下:
dstTensori=(srcTensor0i)⨂Swish(srcTensor1i)dstTensor_i=(srcTensor0_i)\bigotimes Swish(srcTensor1_i)
其中Swish激活函数的计算公式如下(β为常量):
Swish(x)=x/(1+e(−βx))Swish(x)=x/(1 + e^{(-\beta x)})
-
样例规格:
表1:样例规格表 样例类型 swiglu 样例输入 name shape data type format src0 [1, 32] float ND src1 [1, 32] float ND 样例输出 dst [1, 32] float ND 核函数名 swiglu_custom -
样例实现:
本样例实现的是固定shape的样例,输入元素个数为32。通过Tiling机制将计算参数(dataLength、sharedTmpBufferSize)从Host端传递到Device端,支持灵活配置计算规模。-
Kernel实现
核心计算步骤:将输入数据从GM搬运到UB后,调用AscendC::SwiGLU完成SwiGLU计算,再将结果搬回Global Memory。 -
Tiling实现
临时空间处理:通过AscendC::GetSwiGLUMaxMinTmpSize获取所需临时空间大小,由Tiling传递到Kernel端。当临时空间大于0时,使用开发者提供的buffer;否则由框架自动申请。 -
调用实现
使用内核调用符<<<>>>调用核函数,传入src0、src1、dst、workspace和tiling参数。
-
编译运行
在本样例根目录下执行如下步骤,编译并执行样例。
-
配置环境变量
请根据当前环境上CANN开发套件包的安装方式,选择对应配置环境变量的命令。
-
默认路径,root用户安装CANN软件包
source /usr/local/Ascend/cann/set_env.sh -
默认路径,非root用户安装CANN软件包
source $HOME/Ascend/cann/set_env.sh -
指定路径install_path,安装CANN软件包
source ${install_path}/cann/set_env.sh
-
-
样例执行
默认模式(dav-2201架构):
mkdir -p build && cd build; cmake -DCMAKE_ASC_ARCHITECTURES=dav-2201 ..; make -j; python3 ../scripts/gen_data.py ./demo使用CPU调试或NPU仿真模式时,添加
-DCMAKE_ASC_RUN_MODE=cpu或-DCMAKE_ASC_RUN_MODE=sim参数即可。示例如下:
cmake -DCMAKE_ASC_RUN_MODE=cpu -DCMAKE_ASC_ARCHITECTURES=dav-2201 ..; make -j; # cpu调试模式 cmake -DCMAKE_ASC_RUN_MODE=sim -DCMAKE_ASC_ARCHITECTURES=dav-2201 ..; make -j; # NPU仿真模式注意: 切换编译模式前需清理cmake缓存,可在build目录下执行
rm CMakeCache.txt后重新cmake。 -
编译选项说明
表2:编译选项说明 选项 可选值 说明 CMAKE_ASC_RUN_MODE npu(默认)、cpu、sim 运行模式:NPU运行、CPU调试、NPU仿真 CMAKE_ASC_ARCHITECTURES dav-2201(默认)、dav-3510 NPU架构:dav-2201对应Atlas A2/A3系列,dav-3510对应Ascend 950PR/Ascend 950DT -
执行结果
执行结果如下,说明精度对比成功。
test pass!