Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Comment - issue finding a different libtbb version #269

Open
mathog opened this issue Aug 18, 2020 · 0 comments
Open

Comment - issue finding a different libtbb version #269

mathog opened this issue Aug 18, 2020 · 0 comments

Comments

@mathog
Copy link

mathog commented Aug 18, 2020

There was a glitch using velocyto.py on a CentOS 8 system which involved numba not finding the right libtbb shared library. This is what happened. First installed velocyto like so:

package=velocyto
pversion=0.17.17
TOPDIR=/usr/common/modules/el8/x86_64/software/${package}/${pversion}-CentOS-vanilla
cd /usr/common/src
mkdir ${package}-${pversion}
cd ${package}-${pversion}
#next from https://sourceforge.net/projects/python-devirtualizer/
module load python_devirtualizer
pdvctrl mkvenv  ${package}
pdvctrl install ${package} "Cython numpy ${package}" 2>&1 | tee install_2020_08_13.log
pdvctrl migrate ${package} $TOPDIR 2>&1 | tee migrate_2020_08_13.log
#next from https://saf.bio.caltech.edu/pub/software/linux_or_unix_tools/module_generate_from_directory.sh
module_generate_from_directory.sh \
   ${package} \
   ${pversion}\
   CentOS/vanilla \
   $TOPDIR \
   "Analysis of expression dynamics in single cell RNA seq data." \
   "http://velocyto.org/"
#but it does not like CentOS 8's libtbb:
velocyto --help

(velocyto._wrapped:2610): dbind-WARNING **: 10:23:58.129: Couldn't register with accessibility bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
/home/common/modules/el8/x86_64/software/velocyto/0.17.17-CentOS-vanilla/lib/python3.6/site-packages/numba/np/ufunc/parallel.py:355: NumbaWarning: The TBB threading layer requires TBB version 2019.5 or later i.e., TBB_INTERFACE_VERSION >= 11005. Found TBB_INTERFACE_VERSION = 10002. The TBB threading layer is disabled.
  warnings.warn(problem)
Usage: velocyto._wrapped [OPTIONS] COMMAND [ARGS]...

(The accessibility bus warning can be ignored I think, something is broken in this XFCE4 install.)
There is a much more recent libtbb on this system, which salmon 1.2.1 needed, which had been installed previously. This one has been modified to use cmake:

pversion=2020.5
package=libtbb
TOPDIR=/usr/common/modules/el8/x86_64/software/${package}/${pversion}-CentOS-vanilla
cd /usr/common/src
module load cmake
git clone https://github.com/wjakob/tbb.git
cd tbb
cd build
cmake \
   -DCMAKE_INSTALL_PREFIX:PATH=$TOPDIR \
   -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON  \
   .. 2>&1 | tee cmake_2020_05_12.log
make 2>&1 | tee build_2020_05_12.log
make test #all passed
make install 2>&1 | tee install_2020_05_12.log
(cd $TOPDIR; mv lib lib64; ln -s lib64 lib)
module_generate_from_directory.sh \
   $package \
   $pversion \
   CentOS/vanilla \
   $TOPDIR \
   "Intel Threading Building Blocks Library." \
   "https://github.com/intel/tbb/"


But even when it was loaded velocyto would not use it:

module load libtbb
set | grep LD
LD_LIBRARY_PATH=/usr/common/modules/el8/x86_64/software/libtbb/2020.5-CentOS-vanilla/lib64:/usr/common/modules/el8/x86_64/software/libtbb/2020.5-CentOS-vanilla/lib:/usr/common/modules/el8/x86_64/software/velocyto/0.17.17-CentOS-vanilla/lib64:/usr/common/modules/el8/x86_64/software/velocyto/0.17.17-CentOS-vanilla/lib
velocyto --help

Exact same error message as before, it still sees the CentOS 8 libtbb. I replaced velocyto._wrapped with this script:

#!/usr/bin/bash
set

and the LD_LIBRARY_PATH was passed correctly, so the velocyto script you supply (which is identical to velocyto._wrapped) seemed not to respond to LD_LIBRARY_PATH for some reason. The place that fails is actually in numba, in parallel.py here:

        elif _IS_LINUX:
            libtbb_name = 'libtbb.so.2'
        else:
            raise ValueError("Unknown operating system")
        libtbb = CDLL(libtbb_name)
        version_func = libtbb.TBB_runtime_interface_version
        version_func.argtypes = []
        version_func.restype = c_int
        tbb_iface_ver = version_func()
        if tbb_iface_ver < 11005: # magic number from TBB
            msg = ("The TBB threading layer requires TBB "
                   "version 2019.5 or later i.e., "
                   "TBB_INTERFACE_VERSION >= 11005. Found "
                   "TBB_INTERFACE_VERSION = %s. The TBB "
                   "threading layer is disabled.")

The sole name searched for was "libtbb.so.2", but the build shown above only produced ".so" versions. The fix was to rename all lilbraries from .so to .so.2, then create links from .so to .so.2. At that point the numba code above accepted the libtbb.

So, in summary, if a different libtbb must be supplied be sure that the shared library ends in .so.2 or it will not be found!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant