Тензор потока XLA: ошибка сегмента в __xla_cpu_runtime_EigenMatMulF32
У меня есть нейронная сеть, из которой я создал 3 библиотеки, с tf_library
следуя этому примеру: https://www.tensorflow.org/performance/xla/tfcompile
Тогда я получаю lib*.pic.a
файлы, которые я помещаю в один двоичный файл, используя:
native.cc_binary(
name = "librnnlm.so",
srcs = [":libprocess_state.pic.a",
":libforward.pic.a",
":libget_logits.pic.a"],
linkshared=1,
linkstatic=1,
linkopts=["-fPIC"],
deps = [
"//tensorflow/compiler/tf2xla/kernels:gather_op_kernel_float_int32",
"//tensorflow/compiler/tf2xla/kernels:gather_op_kernel_float_int64",
"//tensorflow/compiler/tf2xla/kernels:index_ops_kernel_argmax_float_1d",
"//tensorflow/compiler/tf2xla/kernels:index_ops_kernel_argmax_float_2d",
"//tensorflow/compiler/aot:runtime",
"//tensorflow/compiler/tf2xla:xla_local_runtime_context",
"//tensorflow/compiler/xla/service/cpu:runtime_conv2d",
"//tensorflow/compiler/xla/service/cpu:runtime_matmul",
"//tensorflow/compiler/xla/service/cpu:runtime_single_threaded_conv2d",
"//tensorflow/compiler/xla/service/cpu:runtime_single_threaded_matmul",
"//tensorflow/compiler/xla:executable_run_options",
"//third_party/eigen3",
"//tensorflow/core:framework_lite",
],
copts=tf_copts()
)
Затем я скомпилировал свое приложение вручную, связав librnnlm.so.
Я могу позвонить код в libget_logits
без проблем, но если я попытаюсь запустить вычисление из libprocess_state
или же libforward
Я получил:
Program received signal SIGSEGV, Segmentation fault.
0x00007fffeef31dc2 in void Eigen::TensorEvaluator<Eigen::TensorContractionOp<Eigen::array<Eigen::IndexPair<long>, 1ul> const, Eigen::TensorMap<Eigen::Tensor<float const, 2, 0, long>, 16, Eigen::MakePointer> const, Eigen::TensorMap<Eigen::Tensor<float const, 2, 0, long>, 16, Eigen::MakePointer> const> const, Eigen::ThreadPoolDevice>::evalProduct<true, true, false, 0>(float*) const ()
from /home/p/git/tensorflow/build/bazel-bin/test_aot/librnnlm.so
(gdb) bt
#0 0x00007fffeef31dc2 in void Eigen::TensorEvaluator<Eigen::TensorContractionOp<Eigen::array<Eigen::IndexPair<long>, 1ul> const, Eigen::TensorMap<Eigen::Tensor<float const, 2, 0, long>, 16, Eigen::MakePointer> const, Eigen::TensorMap<Eigen::Tensor<float const, 2, 0, long>, 16, Eigen::MakePointer> const> const, Eigen::ThreadPoolDevice>::evalProduct<true, true, false, 0>(float*) const
() from /home/p/git/tensorflow/build/bazel-bin/test_aot/librnnlm.so
#1 0x00007fffeef4212c in __xla_cpu_runtime_EigenMatMulF32 () from /home/p/git/tensorflow/build/bazel-bin/test_aot/librnnlm.so
#2 0x00007fffeeed1cbd in __test_aot__forward () from /home/p/git/tensorflow/build/bazel-bin/test_aot/librnnlm.so
#3 0x0000000000000000 in ?? ()
*_benchmark
двоичные файлы, сгенерированные bazel, работают нормально, поэтому в том, как я все это связываю, должно быть что-то не так.