如何编译和使用cutlass的conv2d算子
本文件夹下面对应的是基于cutlass开发的conv2d算子,此算子被独立编译成so,供paddle内部的phi库调用。 这样做的好处有两个:
- 减少paddle 发版时包的体积,避免把cutlass的代码打包进paddle inference中。
- 将框架和算子具体实现完全解耦开,保证paddle框架的通用性的同时,保证具体算子实现的灵活性。
用户可以采用如下步骤编译和使用此算子
step1.
bash compile.sh
注意,该脚本中有三个参数需要用户自己指定下,分别是python解释器的路径,cuda的根目录路径和用户GPU机器的计算能力。
python_exe_path="python"
cuda_root_path="/usr/local/cuda"
gpu_cc="75"
compile.sh 脚本中会下载cutlass,执行CMakeLists.txt脚本,编译生成动态库。
step2.
step1执行后,就可以看到在 build 目录生成了 libCutlassConv2d.so ,并将build目录添加到LD_LIBRARY_PATH中即可使用此库。
step3.
默认情况下,在处理conv2d类算子时,Paddle Inference 会调用cuDNN实现;
基于 cutlass 开发的conv2d类算子能够融合更多的后处理算子,用户可以通过python API exp_enable_use_cutlass() 和 C++ API Exp_EnableUseCutlass()来获得一定的速度和显存收益。