目的是云端算法中执行LSTM部分计算过程的加速,即用cu文件编译出so,用此so中的LSTM类或函数替代tf.LSTMCell进行运算。
整个项目见Github,流程见博客,博主也刚入门cuda,欢迎留言探讨~
1. 源代码编译tensorflow
因为我们要对tf库进行修改,所以需要用源码编译方式重新安装tensorflow,官方步骤写的很清楚,就不自己瞎写了。
2. 注册OP流程:
定义 Op 的接口,即按规则写好cc文件
为 Op 实现 kernel,即你自己的.cu文件
编译出so,即(BUILD.sh)文件,上述三个文件如下,同样先看官方网站,再来看例子会豁然开朗
3. 例子
1 |
|
00_lstm.cu
1 | extern "C" void LSTMTest(int miniBatch, int seqLength, int inputSize, int hiddenSize, int outSize, |
- 即在cpp里使用cu文件,编译cpp时将编译好的cuda库链接进来
分别编译:g++ -o test 00_lstm.o 01_cpptest_cuda_lstm.o -lcudart -L/usr/local/cuda/lib64 -lcublas -lcurand -L/home/resources/yxwang/cuda-10.0/lib64/
静态库: nvcc -lib 00_lstm.cu -o lib00_lstm.a
g++ -o test 00_lstm.o 01_cpptest_cuda_lstm.o -L/usr/local/cuda/lib64
动态库(BUILD.sh):
1 | #注意要在源码编译后的tensorflow文件夹编译,pwd=~/tensorflow/tensorflow/core/user_ops |
或写Makefile, : 后为依赖项,从下往上看
1 | all : cpp |
1 | ShapeHandle x, cs_prev; |