libstr_avx_op.so: undefined symbol OpKernelContext::CtxFailureWithWarning on TF 2.14 (prebuilt ops/2.12 copied to ops/2.14)
Error message:
load avx string_split op failed: .../easy_rec/python/ops/2.14/libstr_avx_op.so: undefined symbol: _ZN10tensorflow15OpKernelContext21CtxFailureWithWarningEPKciRKN3tsl6StatusE
Environment
- OS: Linux x86_64
- Python: 3.10
- TensorFlow: 2.14.0 (Intel Extension for TensorFlow /
tf-intel conda env)
- EasyRec: 0.8.5 (from
alibaba/EasyRec, easy_rec/python/ops layout)
- Ops directory:
easy_rec resolves get_ops_dir() to .../python/ops/2.14. We populated 2.14 by copying prebuilt artifacts from ops/2.12 in the same repo (there is no 2.14 folder upstream).
Steps to reproduce
- Install TF 2.14 (e.g. Intel build) and EasyRec from this repo.
- Ensure
libstr_avx_op.so is present under easy_rec/python/ops/<tf_major_minor>/ (e.g. copy from ops/2.12 to ops/2.14 if needed).
import easy_rec (or import path that loads gen_str_avx_op.py).
- Observe warning / failed
load_op_library with the symbol above.
Expected behavior
Either:
- Prebuilt
libstr_avx_op.so matches the documented TF versions (e.g. explicit matrix: TF version ↔ ops tarball), or
- Source code for
libstr_avx_op (and build instructions / Bazel or g++ recipe) is published so users can rebuild against their exact TF (including Intel TF) ABI, or
- Documentation states that
libstr_avx_op is only supported for specific TF builds and unsupported combinations should remove the .so to avoid load errors.
Actual behavior
tf.load_op_library fails with undefined symbol; AVX string split op is not loaded.
Additional context
- In the open-source tree,
easy_rec/python/ops/src/ only contains load_kv_embed.cc / load_dense_embed.cc. There is no public C++ source for libstr_avx_op.so or libcustom_ops.so, so we cannot rebuild those ops locally against TF 2.14.
- Similar ABI issues have been seen for other prebuilt
.so files when TF or vendor build differs.
Request
- Please clarify whether
libstr_avx_op.so sources can be open-sourced or if TF2.14 (and/or Intel TF)-compatible prebuilts will be provided.
- If prebuilts only target specific TF minors (e.g. 2.12), please document that explicitly and ideally ship a
ops/2.14 (or versioned) directory that matches stock TF 2.14 and/or document Intel TF compatibility.
Thank you.
libstr_avx_op.so: undefined symbol OpKernelContext::CtxFailureWithWarning on TF 2.14 (prebuilt ops/2.12 copied to ops/2.14)
Error message:
Environment
tf-intelconda env)alibaba/EasyRec,easy_rec/python/opslayout)easy_recresolvesget_ops_dir()to.../python/ops/2.14. We populated2.14by copying prebuilt artifacts fromops/2.12in the same repo (there is no2.14folder upstream).Steps to reproduce
libstr_avx_op.sois present undereasy_rec/python/ops/<tf_major_minor>/(e.g. copy fromops/2.12toops/2.14if needed).import easy_rec(or import path that loadsgen_str_avx_op.py).load_op_librarywith the symbol above.Expected behavior
Either:
libstr_avx_op.somatches the documented TF versions (e.g. explicit matrix: TF version ↔ ops tarball), orlibstr_avx_op(and build instructions / Bazel org++recipe) is published so users can rebuild against their exact TF (including Intel TF) ABI, orlibstr_avx_opis only supported for specific TF builds and unsupported combinations should remove the.soto avoid load errors.Actual behavior
tf.load_op_libraryfails with undefined symbol; AVX string split op is not loaded.Additional context
easy_rec/python/ops/src/only containsload_kv_embed.cc/load_dense_embed.cc. There is no public C++ source forlibstr_avx_op.soorlibcustom_ops.so, so we cannot rebuild those ops locally against TF 2.14..sofiles when TF or vendor build differs.Request
libstr_avx_op.sosources can be open-sourced or if TF2.14 (and/or Intel TF)-compatible prebuilts will be provided.ops/2.14(or versioned) directory that matches stock TF 2.14 and/or document Intel TF compatibility.Thank you.