-
Notifications
You must be signed in to change notification settings - Fork 104
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【新算子】- logcumsumexp 算子开发 #1006
Comments
@shouhoo 麻烦更新进展 |
已提交PR,等待评审中。如有其它需要提交的内容请回复。 |
已重新提交PR: |
算子参数注册提交,请通过 |
https://github.com/Cambricon/mlu-ops/pull/1027/files 中包含文档与代码,是否已完成测试,可以review? |
comments已查阅,下周会统一解决并更新 |
代码修改内容: |
修改完成,请再次评审。 |
comments处理完毕,准备测试报告中 |
Logcumsumexp测试报告测试环境:tesla V100:GPU名称:Tesla V100-SXM2-16GB CUDA版本:12.1 Pytorch版本:2.2.1 MLU 372MLU名称:MLU370-X4[mtp_372.42] mluop版本:1.1.1 驱动版本:5.10.10 数据测试:典型规模:硬件时间小于GPU15倍为合格,小于10倍为良好。 FP32:
FP16:
其他规模(正确性检验):FP32:
测试结果分析:精度局限由于FP16在精度上的局限性,“[9388608]dim = 0"、“[4194304]dim = 0"、“[1048576]dim = 0"三个典型规模无法达到精度要求。使用__mluop_exp()_和__mluop_log()_的高精度模式并没有解决,误差的来源主要来自FP16的有效数字有限无法承受过多的累加。 在dimOneKernel下,每个nram每次计算累加的最大规模为36,864个半精度浮点数,计算过程中视为128×288的矩阵,于是连续累加次数最多为288,并不多。因此我们可以认为精度问题很难用改进算法的方式来处理了。 经过测试,能满足精度的最大规模约为[55000]。 性能分析典型测例中,大部分测例规模较小,无法充分利用带宽和算力,这里重点分析FP32的“[9388608]dim = 0"测例。数据如下(ComputeForce:1.024e+12 (op/s),IoBandWidth :307.2 (GB/s)):
可以看出,算子为memory bound。随着规模进一步增大,IO效率能达到50%左右。限制IO效率的主要因素是cores之间的同步和clusters之间的同步,由于cores和clusters间的数据依赖无法避免,效率很难进一步提升。 其他算法由于算法中涉及到大量逐行累加,前后指令存在大量数据依赖,无法形成指令级流水。因此尝试了Blelloch算法以代替算法中的逐行累加。以下为部分测例改用Blelloch后的硬件时间:
可以看到,只有在axis_size较小的第三个测例,blelloch算法获得了与逐行累加接近的效率,而其他测例里均有明显的劣势。虽然blelloch能避免一部分数据依赖,但其计算量明显更大,遂放弃。 |
开发计划可参考以下节点:
The text was updated successfully, but these errors were encountered: