一、定义
- 对算子的理解
- 算子检测指标与工具
- 自定义cuda实现pytorch 算子(Taichi库、Numba库、Cupy库和PyTorch的cpp_extension模块)
二、实现
- 对算子的理解
什么是模型算子:如torch.tensor() 、torch.abs() 等运算操作均称为算子。
不同框架均有自己的算子库,如pytorch、tensorflow、numpy 等框架均有自己的算子库,从而实现不同的运算需求。
在探索新的深度学习算法的时候,我们可能会遇到PyTorch提供的算子不能满足需求的情况,这时候就需要自定义PyTorch算子,将我们的算法集成到PyTorch的工作流中。同时,为了提高运算效率,算子往往都需要使用CUDA实现。
作为目前最流行的深度学习库之一,Pytorch一直在推出各种方便用户使用的功能,其他高性能计算库也纷纷增加了对Pytorch的兼容和支持,这让我们自定义CUDA实现PyTorch算子变得非常简单和便捷。
因此我们一方面还是应该尽可能使用Pytorch提供的算子,毕竟经过这么长时间的更新和迭代,性能肯定是最优的;另一方面也需要认真学习CUDA编程,了解GPU架构,在迫不得已需要自己实现算子的情况下善用各种优化技术和工具,才能不断榨取“性能之油”。 - 算子检测指标与工具
参考文档:https://docs.nvidia.com/cuda/profiler-users-guide/index.html#remote-profiling
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/90138d95b3fd45898319639e350a66e5.png)
nsys nvprof --print-gpu-trace python test.py
ncu --metrics dram__bytes_read.sum python3 test.py
compute-sanitizer --kernel-regex kns=test --tool memcheck python test.py
CUDA_LAUNCH_BLOCKING=1 python test.py
- 使用Taichi库、Numba库、Cupy库和PyTorch的cpp_extension模块 实现pytorch 算子
参考: https://www.cnblogs.com/YuanZiming/p/17675072.html
待续