添加自定义 TensorFlow OP
Adding custom TensorFlow OP
我正在尝试通过 ronghanghu since it's used in the implementation of the "Learning Rich Features for Image Manipulation Detection" paper. ronghanghu 使用带有 CUDA 8.0 和 g++ 5.4.0 的 TensorFlow 版本 1.12.0 来构建 sequential_batch_fft.so
的紧凑型双线性池的 Tensorflow 实现。然而,他们确实说我们可以使用不同版本的 Tensorflow(在我的例子中是 2.4.0)和不同的编译器(g++ 7.5.0)和不同的 CUDA 版本(11.0)重建 sequential_batch_fft.so
。当我尝试使用下面 compile.sh
中的命令构建 sequential_batch_fft.so
时
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
# Use 0 if the TensorFlow binary is built with GCC 4.x
# see https://docs.computecanada.ca/wiki/GCC_C%2B%2B_Dual_ABI for details
USE_CXX11_ABI=0
nvcc -std=c++11 -c -o sequential_batch_fft_kernel.cu.o \
sequential_batch_fft_kernel.cu.cc \
-D_GLIBCXX_USE_CXX11_ABI=$USE_CXX11_ABI -DNDEBUG \
-L$TF_LIB -ltensorflow_framework \
-I $TF_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 -shared -o ./build/sequential_batch_fft.so \
sequential_batch_fft_kernel.cu.o \
sequential_batch_fft.cc \
-D_GLIBCXX_USE_CXX11_ABI=$USE_CXX11_ABI -DNDEBUG \
-L$TF_LIB -ltensorflow_framework \
-I $TF_INC -fPIC \
-lcudart -lcufft -L/usr/local/cuda/lib64
rm -rf sequential_batch_fft_kernel.cu.o
我在终端中得到的唯一输出是这个。
问题是除此之外没有其他事情发生。没有错误报告,它不会结束构建。放置了几个小时,仍然一无所获。我完全不知道这是为什么。后来我决定尝试在 adding_an_op 上执行 TensorFlow 提供的示例之一,我得到了相同的结果。这里可能是什么问题?这真的让我感到困惑,因为没有错误只是一个永无止境的程序。
原来问题出在 tensorflow_framework.so。能够通过在 ../site-packages/tensorflow 中创建符号 link ln -s libtensorflow_framework.so.2 libtensorflow_framework.so
来解决此问题。另外,我认为我的项目路径不合适,因为它包含空格。不太确定这个,但是当我使用安装在没有空格的路径上的 TensorFlow 时,一切正常。
我正在尝试通过 ronghanghu since it's used in the implementation of the "Learning Rich Features for Image Manipulation Detection" paper. ronghanghu 使用带有 CUDA 8.0 和 g++ 5.4.0 的 TensorFlow 版本 1.12.0 来构建 sequential_batch_fft.so
的紧凑型双线性池的 Tensorflow 实现。然而,他们确实说我们可以使用不同版本的 Tensorflow(在我的例子中是 2.4.0)和不同的编译器(g++ 7.5.0)和不同的 CUDA 版本(11.0)重建 sequential_batch_fft.so
。当我尝试使用下面 compile.sh
中的命令构建 sequential_batch_fft.so
时
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
# Use 0 if the TensorFlow binary is built with GCC 4.x
# see https://docs.computecanada.ca/wiki/GCC_C%2B%2B_Dual_ABI for details
USE_CXX11_ABI=0
nvcc -std=c++11 -c -o sequential_batch_fft_kernel.cu.o \
sequential_batch_fft_kernel.cu.cc \
-D_GLIBCXX_USE_CXX11_ABI=$USE_CXX11_ABI -DNDEBUG \
-L$TF_LIB -ltensorflow_framework \
-I $TF_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
g++ -std=c++11 -shared -o ./build/sequential_batch_fft.so \
sequential_batch_fft_kernel.cu.o \
sequential_batch_fft.cc \
-D_GLIBCXX_USE_CXX11_ABI=$USE_CXX11_ABI -DNDEBUG \
-L$TF_LIB -ltensorflow_framework \
-I $TF_INC -fPIC \
-lcudart -lcufft -L/usr/local/cuda/lib64
rm -rf sequential_batch_fft_kernel.cu.o
我在终端中得到的唯一输出是这个。
问题是除此之外没有其他事情发生。没有错误报告,它不会结束构建。放置了几个小时,仍然一无所获。我完全不知道这是为什么。后来我决定尝试在 adding_an_op 上执行 TensorFlow 提供的示例之一,我得到了相同的结果。这里可能是什么问题?这真的让我感到困惑,因为没有错误只是一个永无止境的程序。
原来问题出在 tensorflow_framework.so。能够通过在 ../site-packages/tensorflow 中创建符号 link ln -s libtensorflow_framework.so.2 libtensorflow_framework.so
来解决此问题。另外,我认为我的项目路径不合适,因为它包含空格。不太确定这个,但是当我使用安装在没有空格的路径上的 TensorFlow 时,一切正常。