zktuong/dandelion

Singularity error: cannot cache function 'sparse_mean_var_minor_axis'

crichgriffin opened this issue · 7 comments

Description of the bug

Tried to run the singularity wrapper after downloading it today, got the error below:

Minimal reproducible example

# the public data I am using
curl -O https://cf.10xgenomics.com/samples/cell-vdj/6.1.2/10k_PBMC_TBNK_connect_10k_PBMC_TBNK_connect/10k_PBMC_TBNK_connect_10k_PBMC_TBNK_connect_vdj_b_filtered_contig_annotations.csv
curl -O https://cf.10xgenomics.com/samples/cell-vdj/6.1.2/10k_PBMC_TBNK_connect_10k_PBMC_TBNK_connect/10k_PBMC_TBNK_connect_10k_PBMC_TBNK_connect_vdj_b_filtered_contig.fasta

# 
singularity run -B $PWD sc-dandelion_latest.sif dandelion-preprocess --file_prefix 10k_PBMC_TBNK_connect_10k_PBMC_TBNK_connect_vdj_b_filtered

The error message produced by the code above

Traceback (most recent call last):
  File "/share/dandelion_preprocess.py", line 4, in <module>
    import dandelion as ddl
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/dandelion/__init__.py", line 7, in <module>
    from . import preprocessing as pp
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/dandelion/preprocessing/__init__.py", line 7, in <module>
    from . import external
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/dandelion/preprocessing/external/__init__.py", line 7, in <module>
    from ._preprocessing import (
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/dandelion/preprocessing/external/_preprocessing.py", line 13, in <module>
    import scanpy as sc
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/__init__.py", line 14, in <module>
    from . import tools as tl
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/tools/__init__.py", line 1, in <module>
    from ..preprocessing import pca
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/preprocessing/__init__.py", line 1, in <module>
    from ._recipes import recipe_zheng17, recipe_weinreb17, recipe_seurat
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/preprocessing/_recipes.py", line 8, in <module>
    from ._deprecated.highly_variable_genes import (
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/preprocessing/_deprecated/highly_variable_genes.py", line 11, in <module>
    from .._utils import _get_mean_var
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/preprocessing/_utils.py", line 46, in <module>
    def sparse_mean_var_minor_axis(data, indices, major_len, minor_len, dtype):
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/numba/core/decorators.py", line 212, in wrapper
    disp.enable_caching()
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/numba/core/dispatcher.py", line 863, in enable_caching
    self._cache = FunctionCache(self.py_func)
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/numba/core/caching.py", line 613, in __init__
    self._impl = self._impl_class(py_func)
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/numba/core/caching.py", line 350, in __init__
    raise RuntimeError("cannot cache function %r: no locator available "
RuntimeError: cannot cache function 'sparse_mean_var_minor_axis': no locator available for file '/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/preprocessing/_utils.py'

OS information

No response

Version information

No response

Additional context

No response

hi @crichgriffin, thank you for your interest in dandelion and raising this issue.

I've previously encountered this issue, but can't exactly remember how i dealt with it. It's got to do with numba being unable to create its default cache in your compute environment/location when scanpy is being imported.

See here for default NUMBA_CACHE_DIR locations.

Can you try and move to a different location when you have full read/write access (or add sudo to the front of call) and see if that works?

Heya,

I also have this same issue. After (I think) fixing by placing a .numba_config.yaml in my root directory with NUMBA_CACHE_DIR=~/scratch/tmp/dandelion, I now get this next error.

Traceback (most recent call last):
  File "/share/dandelion_preprocess.py", line 6, in <module>
    import dandelion as ddl
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/dandelion/__init__.py", line 2, in <module>
    from dandelion import preprocessing as pp
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/dandelion/preprocessing/__init__.py", line 2, in <module>
    from dandelion.preprocessing import external
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/dandelion/preprocessing/external/__init__.py", line 2, in <module>
    from ._preprocessing import (
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/dandelion/preprocessing/external/_preprocessing.py", line 8, in <module>
    import scanpy as sc
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/__init__.py", line 6, in <module>
    from ._utils import check_versions
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/_utils/__init__.py", line 28, in <module>
    from .compute.is_constant import is_constant
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/scanpy/_utils/compute/is_constant.py", line 5, in <module>
    from numba import njit
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/numba/__init__.py", line 69, in <module>
    from numba.core import config
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/numba/core/config.py", line 527, in <module>
    _env_reloader = _EnvReloader()
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/numba/core/config.py", line 86, in __init__
    self.reset()
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/numba/core/config.py", line 90, in reset
    self.update(force=True)
  File "/opt/conda/envs/sc-dandelion-container/lib/python3.9/site-packages/numba/core/config.py", line 107, in update
    for k, v in y_conf.items():
AttributeError: 'str' object has no attribute 'items'

This is my first time running a singularity container, so apologies if I have a naive perspective on things...!

Thanks so much for all of your help!

All the best

Ollie

Hi Ollie,

i think your issue now is that the .numba_config.yaml isn't in the format that numba wants:

Not sure how to fix it. perhaps looking at the source code can help:

https://github.com/numba/numba/blob/a4664180ddc91e4c8a37dd06324f4e229a76df91/numba/core/config.py#L135C6-L151