alibaba / alibaba/EasyRec

libstr_avx_op.so: undefined symbol OpKernelContext::CtxFailureWithWarning on TF 2.14 (prebuilt ops/2.12 copied to ops/2.14)

Open
#553 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
2.4k
Forks
383
PR merge metrics
No merged PRs in 30d

Description

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
1. Install TF 2.14 (e.g. Intel build) and EasyRec from this repo.
2. Ensure `libstr_avx_op.so` is present under `easy_rec/python/ops//` (e.g. copy from `ops/2.12` to `ops/2.14` if needed).
3. `import easy_rec` (or import path that loads `gen_str_avx_op.py`).
4. 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
1. 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.
2. 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.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reading easy_rec/python/ops/gen_str_avx_op.py and the get_ops_dir() logic, then reproduce the tf.load_op_library failure with the artifact in python/ops/2.14 copied from ops/2.12. Compare the available ops directories and python/ops/src; done means providing a compatible artifact or source/build path, or documenting the supported TensorFlow versions and unsupported combinations.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, tensorflow
Domain
build-system
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.