Skip to content

another fix for the mulled build memory limitations #817

Open
@siebrenf

Description

@siebrenf

I might say some naive and incorrect things. Feel free to correct me or close this :)

The memory issues in the mulled build seems to be caused by two factors:

  1. the solver's memory usage
  2. the package installation memory usage

The recent PRs to fix problem 1 (galaxy/14770 and #810) seem like a great step, but mamba would eventually run into the same issues as repositories grow. Furthermore, they do not address problem 2.

To solve problem 1, why not solve the environment outside of the mulled build container and then pass the solved environment to the container? If there are bigger containers available, problem 2 can be solved by estimating installation memory usage beforehand and assign an appropriate container size. Alternatively, this value could be used to skip doomed mulled builds. Assuming that the size of all dependency tarballs correlates to the memory usage during installation, we can obtain this fairly easily.

Here is a proof of principle, based on a package requiring only bioconda-utils as dependency:

# remove all downloaded packages to get the total download size
conda clean -afyq

# solve the environment
mamba create -n dryrun -d bioconda-utils > dryrun.txt

# obtain the solved_enironment.yaml
echo "dependencies:" > solved_enironment.yaml
grep + dryrun.txt | \
awk -F ' +' '{print "  - " $6 "::" $3 "==" $4 "=" $5;}' \
>> solved_enironment.yaml

# obtain the download size
grep "Total download" dryrun.txt | \
awk -F ': ' '{print $2;}' > size.txt

# clean up
rm dryrun.txt
The results

size.txt:

249MB

solved_enironment.yaml:

dependencies:
  - conda-forge/linux-64::_libgcc_mutex==0.1=conda_forge
  - conda-forge/linux-64::_openmp_mutex==4.5=2_gnu
  - conda-forge/noarch::aiofiles==0.8.0=pyhd8ed1ab_0
  - conda-forge/noarch::aioftp==0.12.0=py_0
  - conda-forge/linux-64::aiohttp==3.8.3=py37h540881e_0
  - conda-forge/noarch::aiohttp-jinja2==1.1.2=py_0
  - conda-forge/noarch::aiohttp-security==0.4.0=py_0
  - conda-forge/noarch::aiohttp-session==2.7.0=py_0
  - conda-forge/noarch::aiosignal==1.2.0=pyhd8ed1ab_0
  - conda-forge/noarch::alabaster==0.7.12=py_0
  - conda-forge/noarch::amqp==5.1.1=pyhd8ed1ab_0
  - conda-forge/noarch::anaconda-client==1.6.14=py_0
  - conda-forge/noarch::anyio==3.6.1=pyhd8ed1ab_1
  - conda-forge/noarch::argh==0.26.2=pyh9f0ad1d_1002
  - conda-forge/noarch::async-timeout==4.0.2=pyhd8ed1ab_0
  - conda-forge/noarch::asynctest==0.13.0=py_0
  - conda-forge/linux-64::atk-1.0==2.36.0=h3371d22_4
  - conda-forge/noarch::attrs==22.1.0=pyh71513ae_1
  - conda-forge/noarch::babel==2.10.3=pyhd8ed1ab_0
  - conda-forge/noarch::backoff==1.6.0=py_1
  - conda-forge/noarch::backports==1.0=py_2
  - conda-forge/noarch::backports.functools_lru_cache==1.6.4=pyhd8ed1ab_0
  - conda-forge/linux-64::beautifulsoup4==4.6.3=py37_1000
  - conda-forge/linux-64::billiard==3.6.4.0=py37h540881e_2
  - bioconda/noarch::bioconda-utils==1.1.3=pyhdfd78af_0
  - conda-forge/noarch::boa==0.9.0=pyha770c72_0
  - conda-forge/noarch::boltons==18.0.1=py_0
  - conda-forge/linux-64::brotlipy==0.7.0=py37h540881e_1004
  - conda-forge/linux-64::bzip2==1.0.8=h7f98852_4
  - conda-forge/linux-64::c-ares==1.18.1=h7f98852_0
  - conda-forge/linux-64::ca-certificates==2022.9.24=ha878542_0
  - conda-forge/noarch::cached-property==1.5.2=hd8ed1ab_1
  - conda-forge/noarch::cached_property==1.5.2=pyha770c72_1
  - conda-forge/noarch::cachetools==3.0.0=py_0
  - conda-forge/linux-64::cairo==1.16.0=ha61ee94_1014
  - conda-forge/noarch::celery==5.2.7=pyhd8ed1ab_0
  - conda-forge/noarch::certifi==2022.9.24=pyhd8ed1ab_0
  - conda-forge/linux-64::cffi==1.15.1=py37h43b0acd_0
  - conda-forge/linux-64::chardet==3.0.4=py37he5f6b98_1008
  - conda-forge/noarch::charset-normalizer==2.1.1=pyhd8ed1ab_0
  - conda-forge/linux-64::click==8.1.3=py37h89c1867_0
  - conda-forge/noarch::click-didyoumean==0.3.0=pyhd8ed1ab_0
  - conda-forge/noarch::click-plugins==1.1.1=py_0
  - conda-forge/noarch::click-repl==0.2.0=pyhd8ed1ab_0
  - conda-forge/noarch::clyent==1.2.2=py_1
  - conda-forge/noarch::colorama==0.4.5=pyhd8ed1ab_0
  - conda-forge/linux-64::colorlog==3.1.4=py37_1000
  - conda-forge/noarch::commonmark==0.9.1=py_0
  - conda-forge/linux-64::conda==4.12.0=py37h89c1867_0
  - conda-forge/linux-64::conda-build==3.21.8=py37h89c1867_1
  - conda-forge/noarch::conda-forge-pinning==2022.08.25.15.20.42=hd8ed1ab_0
  - conda-forge/linux-64::conda-package-handling==1.9.0=py37h540881e_0
  - conda-forge/linux-64::conda-verify==3.1.1=py37h89c1867_1004
  - conda-forge/linux-64::cryptography==38.0.2=py37h38fbfac_0
  - conda-forge/linux-64::curl==7.85.0=h7bff187_0
  - conda-forge/noarch::dataclasses==0.8=pyhc8e2a94_3
  - conda-forge/noarch::decorator==4.4.2=py_0
  - conda-forge/linux-64::docutils==0.19=py37h89c1867_0
  - conda-forge/linux-64::expat==2.4.9=h27087fc_0
  - conda-forge/noarch::filelock==3.8.0=pyhd8ed1ab_0
  - conda-forge/noarch::font-ttf-dejavu-sans-mono==2.37=hab24e00_0
  - conda-forge/noarch::font-ttf-inconsolata==3.000=h77eed37_0
  - conda-forge/noarch::font-ttf-source-code-pro==2.038=h77eed37_0
  - conda-forge/noarch::font-ttf-ubuntu==0.83=hab24e00_0
  - conda-forge/linux-64::fontconfig==2.14.0=hc2a2eb6_1
  - conda-forge/noarch::fonts-conda-ecosystem==1=0
  - conda-forge/noarch::fonts-conda-forge==1=0
  - conda-forge/linux-64::freetype==2.12.1=hca18f0e_0
  - conda-forge/linux-64::fribidi==1.0.10=h36c2ea0_0
  - conda-forge/linux-64::frozenlist==1.3.1=py37h540881e_0
  - conda-forge/linux-64::future==0.18.2=py37h89c1867_5
  - bioconda/noarch::galaxy-lib==19.5.2=pyh864c0ab_1
  - conda-forge/linux-64::gdk-pixbuf==2.42.8=hff1cb4f_1
  - conda-forge/linux-64::gettext==0.19.8.1=h27087fc_1009
  - conda-forge/noarch::gidgethub==3.0.0=py_0
  - conda-forge/linux-64::giflib==5.2.1=h36c2ea0_2
  - conda-forge/linux-64::git==2.38.0=pl5321h5fbbf19_0
  - conda-forge/noarch::gitdb2==3.0.2=py_0
  - conda-forge/noarch::gitpython==3.0.8=py_0
  - conda-forge/noarch::glob2==0.7=py_0
  - conda-forge/linux-64::graphite2==1.3.13=h58526e2_1001
  - conda-forge/linux-64::graphviz==6.0.1=h5abf519_0
  - conda-forge/linux-64::gtk2==2.24.33=h90689f9_2
  - conda-forge/linux-64::gts==0.7.6=h64030ff_2
  - conda-forge/linux-64::harfbuzz==5.3.0=h418a68e_0
  - conda-forge/linux-64::icu==70.1=h27087fc_0
  - conda-forge/linux-64::idna==2.8=py37_1000
  - conda-forge/noarch::imagesize==1.4.1=pyhd8ed1ab_0
  - conda-forge/linux-64::importlib-metadata==4.11.4=py37h89c1867_0
  - bioconda/linux-64::involucro==1.1.2=he881be0_3
  - conda-forge/noarch::jinja2==2.11.3=pyhd8ed1ab_2
  - conda-forge/noarch::joblib==1.2.0=pyhd8ed1ab_0
  - conda-forge/linux-64::jpeg==9e=h166bdaf_2
  - conda-forge/noarch::json5==0.9.5=pyh9f0ad1d_0
  - conda-forge/linux-64::jsonschema==2.6.0=py37_1002
  - conda-forge/linux-64::jupyter_core==4.11.1=py37h89c1867_0
  - conda-forge/linux-64::keyutils==1.6.1=h166bdaf_0
  - conda-forge/linux-64::kombu==5.2.4=py37h89c1867_1
  - conda-forge/linux-64::krb5==1.19.3=h3790be6_0
  - conda-forge/linux-64::ld_impl_linux-64==2.36.1=hea4e1c9_2
  - conda-forge/linux-64::lerc==4.0.0=h27087fc_0
  - conda-forge/linux-64::libarchive==3.5.2=hb890918_3
  - conda-forge/linux-64::libblas==3.9.0=16_linux64_openblas
  - conda-forge/linux-64::libcblas==3.9.0=16_linux64_openblas
  - conda-forge/linux-64::libcurl==7.85.0=h7bff187_0
  - conda-forge/linux-64::libdeflate==1.14=h166bdaf_0
  - conda-forge/linux-64::libedit==3.1.20191231=he28a2e2_2
  - conda-forge/linux-64::libev==4.33=h516909a_1
  - conda-forge/linux-64::libffi==3.4.2=h7f98852_5
  - conda-forge/linux-64::libgcc-ng==12.1.0=h8d9b700_16
  - conda-forge/linux-64::libgd==2.3.3=h18fbbfe_3
  - conda-forge/linux-64::libgfortran-ng==12.1.0=h69a702a_16
  - conda-forge/linux-64::libgfortran5==12.1.0=hdcd56e2_16
  - conda-forge/linux-64::libglib==2.74.0=h7a41b64_0
  - conda-forge/linux-64::libgomp==12.1.0=h8d9b700_16
  - conda-forge/linux-64::libiconv==1.17=h166bdaf_0
  - conda-forge/linux-64::liblapack==3.9.0=16_linux64_openblas
  - conda-forge/linux-64::liblief==0.12.2=h27087fc_0
  - conda-forge/linux-64::libmamba==0.21.2=h3985d26_0
  - conda-forge/linux-64::libmambapy==0.21.2=py37hab1676c_0
  - conda-forge/linux-64::libnghttp2==1.47.0=hdcd2b5c_1
  - conda-forge/linux-64::libnsl==2.0.0=h7f98852_0
  - conda-forge/linux-64::libopenblas==0.3.21=pthreads_h78a6416_3
  - conda-forge/linux-64::libpng==1.6.38=h753d276_0
  - conda-forge/linux-64::librsvg==2.54.4=h7abd40a_0
  - conda-forge/linux-64::libsolv==0.7.22=h6239696_0
  - conda-forge/linux-64::libsqlite==3.39.4=h753d276_0
  - conda-forge/linux-64::libssh2==1.10.0=haa6b8db_3
  - conda-forge/linux-64::libstdcxx-ng==12.1.0=ha89aaad_16
  - conda-forge/linux-64::libtiff==4.4.0=h55922b4_4
  - conda-forge/linux-64::libtool==2.4.6=h9c3ff4c_1008
  - conda-forge/linux-64::libuuid==2.32.1=h7f98852_1000
  - conda-forge/linux-64::libwebp==1.2.4=h522a892_0
  - conda-forge/linux-64::libwebp-base==1.2.4=h166bdaf_0
  - conda-forge/linux-64::libxcb==1.13=h7f98852_1004
  - conda-forge/linux-64::libxml2==2.10.2=h7463322_2
  - conda-forge/linux-64::libzlib==1.2.12=h166bdaf_4
  - conda-forge/linux-64::lz4-c==1.9.3=h9c3ff4c_1
  - conda-forge/linux-64::lzo==2.10=h516909a_1000
  - conda-forge/linux-64::mamba==0.21.2=py37h6dacc13_0
  - conda-forge/noarch::markdown==3.4.1=pyhd8ed1ab_0
  - conda-forge/linux-64::markupsafe==2.0.1=py37h5e8e339_1
  - conda-forge/linux-64::multidict==6.0.2=py37h540881e_1
  - conda-forge/noarch::nbformat==5.7.0=pyhd8ed1ab_0
  - conda-forge/linux-64::ncurses==6.3=h27087fc_1
  - conda-forge/noarch::networkx==2.5.1=pyhd8ed1ab_0
  - conda-forge/linux-64::numpy==1.19.5=py37h3e96413_3
  - conda-forge/linux-64::openssl==1.1.1q=h166bdaf_0
  - conda-forge/noarch::packaging==21.3=pyhd8ed1ab_0
  - conda-forge/linux-64::pandas==0.23.4=py37h637b7d7_1000
  - conda-forge/linux-64::pango==1.50.11=h382ae3d_0
  - conda-forge/linux-64::patchelf==0.15.0=h58526e2_0
  - conda-forge/linux-64::pcre2==10.37=hc3806b6_1
  - conda-forge/linux-64::perl==5.32.1=2_h7f98852_perl5
  - conda-forge/noarch::pip==22.2.2=pyhd8ed1ab_0
  - conda-forge/linux-64::pixman==0.40.0=h36c2ea0_0
  - conda-forge/noarch::pkginfo==1.8.3=pyhd8ed1ab_0
  - conda-forge/noarch::prompt-toolkit==3.0.31=pyha770c72_0
  - conda-forge/noarch::prompt_toolkit==3.0.31=hd8ed1ab_0
  - conda-forge/linux-64::psutil==5.9.2=py37h540881e_0
  - conda-forge/linux-64::pthread-stubs==0.4=h36c2ea0_1001
  - conda-forge/linux-64::py-lief==0.12.2=py37hd23a5d3_0
  - conda-forge/noarch::pyaml==17.12.1=py_0
  - conda-forge/noarch::pybind11-abi==4=hd8ed1ab_3
  - conda-forge/linux-64::pycosat==0.6.3=py37h540881e_1010
  - conda-forge/noarch::pycparser==2.21=pyhd8ed1ab_0
  - conda-forge/noarch::pygments==2.13.0=pyhd8ed1ab_0
  - conda-forge/noarch::pyjwt==2.5.0=pyhd8ed1ab_0
  - conda-forge/noarch::pyopenssl==22.1.0=pyhd8ed1ab_0
  - conda-forge/noarch::pyparsing==3.0.9=pyhd8ed1ab_0
  - conda-forge/linux-64::pysocks==1.7.1=py37h89c1867_5
  - conda-forge/linux-64::python==3.7.12=hb7a2778_100_cpython
  - conda-forge/noarch::python-dateutil==2.8.2=pyhd8ed1ab_0
  - conda-forge/noarch::python-fastjsonschema==2.16.2=pyhd8ed1ab_0
  - conda-forge/linux-64::python-libarchive-c==4.0=py37h89c1867_1
  - conda-forge/linux-64::python_abi==3.7=2_cp37m
  - conda-forge/noarch::pytz==2022.4=pyhd8ed1ab_0
  - conda-forge/linux-64::pyyaml==6.0=py37h540881e_4
  - conda-forge/linux-64::readline==8.1.2=h0f457ee_0
  - conda-forge/linux-64::regex==2018.08.29=py37h14c3975_1000
  - conda-forge/linux-64::reproc==14.2.3=h7f98852_0
  - conda-forge/linux-64::reproc-cpp==14.2.3=h9c3ff4c_0
  - conda-forge/linux-64::requests==2.22.0=py37_1
  - conda-forge/noarch::rich==12.6.0=pyhd8ed1ab_0
  - conda-forge/linux-64::ripgrep==13.0.0=h2f28480_2
  - conda-forge/linux-64::ruamel.yaml==0.17.21=py37h540881e_1
  - conda-forge/linux-64::ruamel.yaml.clib==0.2.6=py37h540881e_1
  - conda-forge/linux-64::ruamel_yaml==0.15.80=py37h540881e_1007
  - conda-forge/linux-64::setuptools==59.8.0=py37h89c1867_1
  - conda-forge/linux-64::simplejson==3.17.6=py37h540881e_1
  - conda-forge/noarch::six==1.16.0=pyh6c4a22f_0
  - conda-forge/linux-64::skopeo==0.1.35=haa36a5b_1
  - conda-forge/noarch::smmap==5.0.0=pyhd8ed1ab_0
  - conda-forge/noarch::smmap2==3.0.1=py_0
  - conda-forge/noarch::sniffio==1.3.0=pyhd8ed1ab_0
  - conda-forge/noarch::snowballstemmer==2.2.0=pyhd8ed1ab_0
  - conda-forge/noarch::sphinx==5.1.1=pyhd8ed1ab_1
  - conda-forge/noarch::sphinx-autodoc-typehints==1.19.2=pyhd8ed1ab_0
  - conda-forge/noarch::sphinxcontrib-applehelp==1.0.2=py_0
  - conda-forge/noarch::sphinxcontrib-devhelp==1.0.2=py_0
  - conda-forge/noarch::sphinxcontrib-htmlhelp==2.0.0=pyhd8ed1ab_0
  - conda-forge/noarch::sphinxcontrib-jsmath==1.0.1=py_0
  - conda-forge/noarch::sphinxcontrib-qthelp==1.0.3=py_0
  - conda-forge/noarch::sphinxcontrib-serializinghtml==1.1.5=pyhd8ed1ab_2
  - conda-forge/linux-64::sqlite==3.39.4=h4ff8645_0
  - conda-forge/linux-64::tk==8.6.12=h27826a3_0
  - conda-forge/noarch::tqdm==4.64.1=pyhd8ed1ab_0
  - conda-forge/noarch::traitlets==5.4.0=pyhd8ed1ab_0
  - conda-forge/noarch::typing-extensions==4.4.0=hd8ed1ab_0
  - conda-forge/noarch::typing_extensions==4.4.0=pyha770c72_0
  - conda-forge/noarch::uritemplate==4.1.1=pyhd8ed1ab_0
  - conda-forge/noarch::urllib3==1.25.11=py_0
  - conda-forge/noarch::vine==5.0.0=pyhd8ed1ab_1
  - conda-forge/noarch::watchgod==0.8.2=pyhd8ed1ab_0
  - conda-forge/noarch::wcwidth==0.2.5=pyh9f0ad1d_2
  - conda-forge/noarch::wheel==0.37.1=pyhd8ed1ab_0
  - conda-forge/linux-64::xorg-kbproto==1.0.7=h7f98852_1002
  - conda-forge/linux-64::xorg-libice==1.0.10=h7f98852_0
  - conda-forge/linux-64::xorg-libsm==1.2.3=hd9c2040_1000
  - conda-forge/linux-64::xorg-libx11==1.7.2=h7f98852_0
  - conda-forge/linux-64::xorg-libxau==1.0.9=h7f98852_0
  - conda-forge/linux-64::xorg-libxdmcp==1.1.3=h7f98852_0
  - conda-forge/linux-64::xorg-libxext==1.3.4=h7f98852_1
  - conda-forge/linux-64::xorg-libxrender==0.9.10=h7f98852_1003
  - conda-forge/linux-64::xorg-renderproto==0.11.1=h7f98852_1002
  - conda-forge/linux-64::xorg-xextproto==7.3.0=h7f98852_1002
  - conda-forge/linux-64::xorg-xproto==7.0.31=h7f98852_1007
  - conda-forge/linux-64::xz==5.2.6=h166bdaf_0
  - conda-forge/linux-64::yaml==0.2.5=h7f98852_2
  - conda-forge/linux-64::yaml-cpp==0.6.3=he1b5a44_4
  - conda-forge/linux-64::yarl==1.7.2=py37h540881e_2
  - conda-forge/noarch::zipp==3.9.0=pyhd8ed1ab_0
  - conda-forge/linux-64::zlib==1.2.12=h166bdaf_4
  - conda-forge/linux-64::zstd==1.5.2=h6239696_4

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions