Skip to content
HYGON-AIPublic

About

Lightop是一个自研的融合算子库,提供了大量的自研算子,用来加速模型的推理和训练。

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Lightop

简介

Lightop是一个自研的融合算子库,提供了大量的自研算子,用来加速模型的推理和训练。

这些算子通常从torch里面获取,然后进行性能优化,常见的norm类算子比torch native有2-5倍的性能提升。

许可证

Lightop 使用 Apache License 2.0。完整许可证文本见根目录的 LICENSE。

本仓库还包含从第三方项目复制或适配的源码。第三方组件仍受其各自的版权和许可证约束,来源、版本证据、许可证和本仓库中的路径见 THIRD_PARTY_NOTICES.md。

安装

环境依赖: pytorch1.10 \ pytorch1.13 \ pytorch2.0 \ pytorch2.1 \ pytoch2.3

dtk22.04 \ dtk22.10 \ dtk23.04 \ dtk23.10 \ dtk24.04

安装脚本:

python3 setup.py install

对于23.10之前的dtk由于不支持928,因此需要去掉928代码,使用下面的编译命令:

PYTORCH_ROCM_ARCH='gfx906;gfx926' python3 setup.py install

编译安装包:

python3 setup.py install bdist_wheel

编译好之后,安装包在dist目录

算子介绍

核心算子

核心算子主要包括quant_gemm、moe_gemm,具体算子类型和开发负责人如下:

算子开发负责人性能表
gemm_w8a8郑光飞 谢松林 马翔
moe_gemm_w8a8杨亿男 罗尧https://r0ddbu55vzx.feishu.cn/sheets/Fr3wsNhrmh777xtl7v4cOodjnH0?sheet=ClHIQQ
moe_gemm_w4a8王安全 刘振成 桂中化
moe_gemmm_w4a16刘振成

测试方法:

cd ./test

benchmark_test_kernel.sh

生成对应的算子性能和精度表格

torch算子

主要对应的torch的原生算子,以下时间均为单次前向传播和反向传播的总时间,包括了CPU时间和GPU时间。测试环境:pytorch1.13, dtk23.04, 10.6.10.67服务器z100计算卡。

算子测试size优化前优化后性能提升使用说明
droppath128,3136,960.84ms0.74ms13.5%Swin-Transformer
ln_droppath128, 3136, 9615.7ms4.06ms287%Swin-Transformer. droppath(ln(input))
layernorm1, 2048, 30720.58ms0.32ms81.3%NLP类
ln_dropout1, 2048, 30720.78ms0.42ms85.7%NLP类。例如transformer,bert。 ln(dropout(input))
ln_add_dropout1, 2048, 30720.97ms0.47ms106%NLP类。例如transformer,bert。 ln(dropout(input)+residual)
ln_add_dropout_bias1, 2048, 30721.16ms0.53ms119%NLP类。例如transformer,bert。 ln(dropout(input+bias)+residual)
rmsnorm1, 2048, 30721.28ms0.29ms341%NLP类。例如llama
rn_dropout1, 2048, 30721.51ms0.38ms297%NLP类。例如llama。 rn(dropout(input))
rn_add_dropout1, 2048, 30721.68ms0.45ms273%NLP类。例如llama。 rn(dropout(input)+residual)
rn_add_dropout_bias1, 2048, 30721.88ms0.51ms268%NLP类。例如llama。rn(dropout(input+bias)+residual)
groupnorm2,640,8,80.037ms0.017ms116%NLP类cv类
celu_gn2,640,8,80.048ms0.015ms219%NLP类cv类gn。例如x-linear。 gn(celu(input))
gn_silu2,640,8,80.080ms0.015ms420%NLP类cv类。例如:SD。 silu(gn(input))
add_dropout1, 2048, 30720.49ms0.38ms28.9%NLP类.dropout(input)+residual
bias_dropout_add1, 2048, 30720.69ms0.43ms60.5%NLP类.dropout(input+bias)+residual
bias_gelu1, 2048, 30720.38ms0.27ms40.7%NLP类,gelu(input+bias)
bias_swiglu2, 2048, 5120.50ms0.28ms78.5%NLP类SwiGLU(input+bias)
FusedScaleMask SoftmaxDropout2,16,128,1280.26ms0.34ms30.7%NLP类.
bn_act/bn_relu4,10,128,1280.56ms0.33ms69.7%CNN,如resnet,都会使用BN。act支持relu,softrelu,abs,power,clipped_relu,leaky_relu,silu_sigmoid,tanh等激活函数。bn_relu是bn_act的特例,减少一个参数,调用更方便。对于bn 2d,推荐NCHW维度中N*H*W>20000,此算子对于小size性能较差。
softmax512,40960.23ms0.16ms43.8%一般分类模型的结尾会有softmax层。推荐size:第一维度大于300,第二维度大于等于1024小于等于4096。
loss_ctc120,60,2404.51ms1.14ms396%语音文本等RNN网络的输出层
loss_rnnt10,30,21,400016.52ms2.93ms429%语音文本等RNN网络的输出层

测试方式:

  • 进入test文件夹

  • 运行任意一个测试脚本,例如:python3 test_ln_add_dropout.py

  • 运行python3 all_test.py可以测试全部脚本

  • 测试模型时,参考测试脚本里调用算子的方法。

  • 若无test文件夹,则运行以下指令验证是否安装成功:

python -c "import lightop; print(lightop.__version__)",若成功打印版本信息则安装成功。

About

Lightop是一个自研的融合算子库,提供了大量的自研算子,用来加速模型的推理和训练。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages