Skip to content

Add conda-forge/label/mpi-external to .condarc#81

Open
iparask wants to merge 2 commits intomainfrom
fix/openmpi-external
Open

Add conda-forge/label/mpi-external to .condarc#81
iparask wants to merge 2 commits intomainfrom
fix/openmpi-external

Conversation

@iparask
Copy link
Member

@iparask iparask commented Mar 11, 2026

openmmpi-external that Tiger is using has move from conda-forge to the label on the subject.

This PR introduces that channel to the conda rc.

@iparask iparask requested a review from tskisner March 11, 2026 14:43
@Bai-Chiang
Copy link
Contributor

Why we don't use module load intel-oneapi/2024.2 intel-mpi/oneapi/2021.15 hdf5/oneapi-2024.2/intel-mpi/1.14.4 anaconda3/2024.2 on tiger3?[1] They say intel-oneapi and intel-mpi are recommended. [2]

[1] https://github.com/simonsobs/soconda/blob/fix/openmpi-external/config/tiger3/build_env.sh
[2] https://researchcomputing.princeton.edu/systems/tiger

@tskisner
Copy link
Member

If you load Intel OneAPI stuff I'm sure that brings in MKL to the environment. Definitely we would need to test that nothing breaks then. For example, if the MKL fftw wrappers are first in the linking order ahead of our conda prefix then that would dlopen all the intel threading backend stuff, which conflicts with our conda packages. Do we have any evidence that the current MPI implementation is "slow" for our communication patterns?

@Bai-Chiang
Copy link
Contributor

Let me do a mlmapmaker test.

@tskisner
Copy link
Member

My point is that:

  • We are not using Intel compilers
  • The MPI implementation likely has a minimal effect on performance (assuming all implementations are using the same physical interconnect)
  • The current module is working

I would advocate for leaving things as they are unless the Intel MPI implementation is somehow using a different driver library for the interconnect, and the the performance increase is significant. However, since Giannis is maintaining this system, I will let him make the final call.

soconda.sh Outdated
echo "# condarc for soconda" > "${CONDA_PREFIX}/.condarc"
echo "channels:" >> "${CONDA_PREFIX}/.condarc"
echo " - file://${CONDA_PREFIX}/conda-bld" >> "${CONDA_PREFIX}/.condarc"
echo " - conda-forge/label/mpi-external" >> "${CONDA_PREFIX}/.condarc"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have strict channel ordering and this is placed above the normal conda-forge channel. I believe that means if someone is running on a workstation / laptop, the dummy mpich / openmpi package will get installed rather than the normal conda one. We should test that.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only if they ask for openmpi=4.1.6=external_* if you ask for openmpi-4.1.6 it will be installed from conda-forge:

(/scratch/gpfs/SIMONSOBS/env/dev/soconda_v0.6.16) ip8725@tiger3:~$ conda search openmpi
Loading channels: done
# Name                       Version           Build  Channel
openmpi                        3.1.0      h26a2512_2  conda-forge
openmpi                        3.1.0      h26a2512_3  conda-forge
openmpi                        3.1.2   h1c2f66e_1000  conda-forge
openmpi                        3.1.2   h1c2f66e_1001  conda-forge
openmpi                        3.1.2   h1c2f66e_1002  conda-forge
openmpi                        3.1.2      h26a2512_0  conda-forge
openmpi                        3.1.2      h26a2512_1  conda-forge
openmpi                        3.1.2      h26a2512_2  conda-forge
openmpi                        3.1.3   h1c2f66e_1000  conda-forge
openmpi                        3.1.3   h1c2f66e_1001  conda-forge
openmpi                        3.1.4      hc99cbb1_0  conda-forge
openmpi                        4.0.1      hc99cbb1_0  conda-forge
openmpi                        4.0.1      hc99cbb1_1  conda-forge
openmpi                        4.0.1      hc99cbb1_2  conda-forge
openmpi                        4.0.2      hb1b8bf9_1  pkgs/main
openmpi                        4.0.2      hd49bf07_0  conda-forge
openmpi                        4.0.2      hd49bf07_1  conda-forge
openmpi                        4.0.2      hd49bf07_2  conda-forge
openmpi                        4.0.2      hdf1f1ad_4  conda-forge
openmpi                        4.0.3      hdf1f1ad_0  conda-forge
openmpi                        4.0.3      hdf1f1ad_1  conda-forge
openmpi                        4.0.4      hdf1f1ad_0  conda-forge
openmpi                        4.0.5      h2c4babf_3  conda-forge
openmpi                        4.0.5      h9b22176_3  conda-forge
openmpi                        4.0.5      h9b22176_4  conda-forge
openmpi                        4.0.5      ha4a8674_3  conda-forge
openmpi                        4.0.5      ha4a8674_4  conda-forge
openmpi                        4.0.5      hdf1f1ad_0  conda-forge
openmpi                        4.0.5      hdf1f1ad_1  conda-forge
openmpi                        4.0.5      hdf1f1ad_2  conda-forge
openmpi                        4.0.5      hdf1f1ad_3  conda-forge
openmpi                        4.1.0      h9b22176_0  conda-forge
openmpi                        4.1.0      h9b22176_1  conda-forge
openmpi                        4.1.0      hbfc84c5_2  conda-forge
openmpi                        4.1.0      hbfc84c5_3  conda-forge
openmpi                        4.1.0      hbfc84c5_4  conda-forge
openmpi                        4.1.0      hbfc84c5_5  conda-forge
openmpi                        4.1.1      hbfc84c5_0  conda-forge
openmpi                        4.1.2      hbfc84c5_0  conda-forge
openmpi                        4.1.3      h414127c_0  conda-forge
openmpi                        4.1.3    h846660c_102  conda-forge
openmpi                        4.1.3    h846660c_103  conda-forge
openmpi                        4.1.3    h846660c_104  conda-forge
openmpi                        4.1.3      h8b79891_4  conda-forge
openmpi                        4.1.3    ha1ae619_105  conda-forge
openmpi                        4.1.3    hbea3300_101  conda-forge
openmpi                        4.1.4    ha1ae619_100  conda-forge
openmpi                        4.1.4    ha1ae619_101  conda-forge
openmpi                        4.1.4    ha1ae619_102  conda-forge
openmpi                        4.1.5    h414af15_101  conda-forge
openmpi                        4.1.5    h9a2ec32_100  conda-forge
openmpi                        4.1.6 external_hf12fe31_2  conda-forge/label/mpi-external
openmpi                        4.1.6    h336e698_100  conda-forge

only the external version are coming from there.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On my workstation. This does break mpi. I don't have mpicc executable in the environment.

Copy link
Member Author

@iparask iparask Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which mpi does it try to install? How can I replicate it? Do you have a trace I can look at? Or better can you do conda list openmpi if the env was created and see which channel it used?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The default installs mpich.

List of packages in environment: "/home/bai-chiang/micromamba/envs/soconda-test_0.2.3.dev340"

  Name   Version  Build       Channel                       
──────────────────────────────────────────────────────────────
  mpich  5.0.0    h7063c07_1  conda-forge/label/mpi-external

I don't have mpi installed on the OS.

name: soconda-test_0.2.3.dev340
channels:
  - conda-forge
  - conda-forge/label/mpi-external
  - file:///home/bai-chiang/micromamba/envs/soconda-test_0.2.3.dev340/conda-bld
dependencies:
  - _openmp_mutex=4.5=7_kmp_llvm
  - _python_abi3_support=1.0=hd8ed1ab_2
  - _x86_64-microarch-level=4=3_x86_64_v4
  - aiobotocore=3.2.0=pyhcf101f3_0
  - aiohappyeyeballs=2.6.1=pyhd8ed1ab_0
  - aiohttp=3.13.3=py312h5d8c7f2_0
  - aioitertools=0.13.0=pyhd8ed1ab_0
  - aiosignal=1.4.0=pyhd8ed1ab_0
  - alsa-lib=1.2.15.3=hb03c661_0
  - annotated-doc=0.0.4=pyhcf101f3_0
  - anyio=4.12.1=pyhcf101f3_0
  - anytree=2.13.0=pyhd8ed1ab_0
  - aom=3.9.1=hac33072_0
  - archspec=0.2.5=pyhd8ed1ab_0
  - argon2-cffi=25.1.0=pyhd8ed1ab_0
  - argon2-cffi-bindings=25.1.0=py312h4c3975b_2
  - arrow=1.4.0=pyhcf101f3_0
  - asteval=1.0.8=pyhd8ed1ab_0
  - astropy=7.2.0=pyhd8ed1ab_0
  - astropy-base=7.2.0=py312h4f23490_0
  - astropy-iers-data=0.2026.3.9.0.47.45=pyhd8ed1ab_0
  - asttokens=3.0.1=pyhd8ed1ab_0
  - async-lru=2.2.0=pyhcf101f3_0
  - attr=2.5.2=h39aace5_0
  - attrs=25.4.0=pyhcf101f3_1
  - autoconf=2.72=pl5321hbb4ee43_1
  - automake=1.17=pl5321ha770c72_0
  - aws-c-auth=0.9.6=hb9c0fe4_1
  - aws-c-cal=0.9.13=h2c9d079_1
  - aws-c-common=0.12.6=hb03c661_0
  - aws-c-compression=0.3.2=h8b1a151_0
  - aws-c-event-stream=0.5.9=h841be55_2
  - aws-c-http=0.10.10=hf621c6d_0
  - aws-c-io=0.26.1=h3ca20c3_1
  - aws-c-mqtt=0.14.0=ha25ca29_1
  - aws-c-s3=0.11.5=h9b5df67_3
  - aws-c-sdkutils=0.2.4=h8b1a151_4
  - aws-checksums=0.2.10=h8b1a151_0
  - aws-crt-cpp=0.37.3=hb153662_0
  - aws-sdk-cpp=1.11.747=h133b1ee_1
  - azure-core-cpp=1.16.2=h206d751_0
  - azure-identity-cpp=1.13.3=hed0cdb0_1
  - azure-storage-blobs-cpp=12.16.0=hdd73cc9_1
  - azure-storage-common-cpp=12.12.0=ha7a2c86_1
  - azure-storage-files-datalake-cpp=12.14.0=h52c5a47_1
  - babel=2.18.0=pyhcf101f3_1
  - backports.zstd=1.3.0=py312h90b7ffd_0
  - beautifulsoup4=4.14.3=pyha770c72_0
  - binutils_impl_linux-64=2.45.1=default_hfdba357_101
  - binutils_linux-64=2.45.1=default_h4852527_101
  - bleach=6.3.0=pyhcf101f3_1
  - bleach-with-css=6.3.0=hbca2aae_1
  - blinker=1.9.0=pyhff2d567_0
  - blosc=1.21.6=he440d0b_1
  - boltons=25.0.0=pyhd8ed1ab_0
  - botocore=1.42.55=pyhd8ed1ab_0
  - bottleneck=1.6.0=np2py312hfb8c2c5_3
  - bqplot=0.12.37=pyhd8ed1ab_0
  - brotli=1.2.0=hed03a55_1
  - brotli-bin=1.2.0=hb03c661_1
  - brotli-python=1.2.0=py312hdb49522_1
  - brunsli=0.1=hd1e3526_2
  - bzip2=1.0.8=hda65f42_9
  - c-ares=1.34.6=hb03c661_0
  - c-blosc2=2.23.1=hc31b594_0
  - ca-certificates=2026.2.25=hbd8a1cb_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - cairo=1.18.4=h3394656_0
  - camb=1.6.5=py312hbd90422_0
  - ceres-solver=2.2.0=cpugplh3f48201_209
  - certifi=2026.2.25=pyhd8ed1ab_0
  - cffi=2.0.0=py312h460c074_1
  - cfitsio=4.6.3=ha0b56bc_0
  - chardet=5.2.0=pyhd8ed1ab_3
  - charls=2.4.3=hecca717_0
  - charset-normalizer=3.4.5=pyhd8ed1ab_0
  - chealpix=3.31.0=h001b3b8_9
  - click=8.3.1=pyh8f84b5b_1
  - cloudpickle=3.1.2=pyhcf101f3_1
  - cmake=4.2.3=hc85cc9f_1
  - colorama=0.4.6=pyhd8ed1ab_1
  - comm=0.2.3=pyhe01879c_0
  - conda=26.1.1=py312h7900ff3_0
  - conda-build=26.1.0=pyh31ec981_2
  - conda-index=0.7.0=pyhd8ed1ab_0
  - conda-libmamba-solver=25.11.0=pyhd8ed1ab_1
  - conda-package-handling=2.4.0=pyh7900ff3_2
  - conda-package-streaming=0.12.0=pyhd8ed1ab_0
  - contourpy=1.3.3=py312h0a2e395_4
  - coverage=7.13.4=py312h8a5da7c_0
  - coveralls=4.1.0=pyhcf101f3_0
  - cpp-expected=1.3.1=h171cf75_0
  - cpython=3.12.13=py312hd8ed1ab_0
  - cycler=0.12.1=pyhcf101f3_2
  - cyrus-sasl=2.1.28=hd9c7081_0
  - cython=3.2.4=py312h68e6be4_0
  - dash=4.0.0=pyhd8ed1ab_0
  - dask-core=2026.1.2=pyhcf101f3_0
  - dav1d=1.2.1=hd590300_0
  - dbus=1.16.2=h24cb091_1
  - debugpy=1.8.20=py312h8285ef7_0
  - decorator=5.2.1=pyhd8ed1ab_0
  - defusedxml=0.7.1=pyhd8ed1ab_0
  - dill=0.4.1=pyhcf101f3_0
  - distro=1.9.0=pyhd8ed1ab_1
  - double-conversion=3.4.0=hecca717_0
  - ducc0=0.40.0=py312h1289d80_0
  - eigen=3.4.0=h54a6638_2
  - ephem=4.2.1=py312h4c3975b_0
  - evalidate=2.0.5=pyhe01879c_0
  - exceptiongroup=1.3.1=pyhd8ed1ab_0
  - executing=2.2.1=pyhd8ed1ab_0
  - fftw=3.3.10=nompi_h3b011a4_112
  - filelock=3.25.1=pyhd8ed1ab_0
  - flacarray=0.3.4=py312h9fe008e_0
  - flask=3.1.3=pyhcf101f3_1
  - fmt=12.1.0=hff5e90c_0
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=h77eed37_3
  - fontconfig=2.17.1=h27c8c51_0
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=hc364b38_1
  - fonttools=4.62.0=py312h8a5da7c_0
  - fqdn=1.5.1=pyhd8ed1ab_1
  - freetype=2.14.2=ha770c72_0
  - frozendict=2.4.7=py312h4c3975b_0
  - frozenlist=1.7.0=py312h447239a_0
  - fsspec=2026.2.0=pyhd8ed1ab_0
  - future=1.0.0=pyhd8ed1ab_2
  - gast=0.4.0=pyh9f0ad1d_0
  - gcc_impl_linux-64=14.3.0=hbdf3cc3_18
  - gcc_linux-64=14.3.0=h298d278_21
  - gflags=2.2.2=h5888daf_1005
  - gfortran_impl_linux-64=14.3.0=h1a219da_18
  - gfortran_linux-64=14.3.0=hfa02b96_21
  - giflib=5.2.2=hd590300_0
  - glog=0.7.1=hbabe93e_0
  - gmp=6.3.0=hac33072_2
  - gmpy2=2.3.0=py312hcaba1f9_1
  - graphite2=1.3.14=hecca717_2
  - greenlet=3.3.2=py312h8285ef7_0
  - gsl=2.7=he838d99_0
  - h11=0.16.0=pyhcf101f3_1
  - h2=4.3.0=pyhcf101f3_0
  - h5py=3.15.1=nompi_py312ha4f8f14_101
  - harfbuzz=12.2.0=h15599e2_0
  - hdf5=1.14.6=nompi_h19486de_106
  - healpy=1.19.0=py312hb99e9eb_0
  - hpack=4.1.0=pyhd8ed1ab_0
  - html5lib=1.1=pyhd8ed1ab_2
  - httpcore=1.0.9=pyh29332c3_0
  - httpx=0.28.1=pyhd8ed1ab_0
  - hyperframe=6.1.0=pyhd8ed1ab_0
  - icu=75.1=he02047a_0
  - idna=3.11=pyhd8ed1ab_0
  - imagecodecs=2026.3.6=py312h40df4bb_1
  - imageio=2.37.0=pyhfb79c49_0
  - importlib-metadata=8.7.0=pyhe01879c_1
  - iniconfig=2.3.0=pyhd8ed1ab_0
  - ipydatagrid=1.4.0=pyhcf101f3_2
  - ipykernel=7.2.0=pyha191276_1
  - ipython=9.11.0=pyhecfbec7_0
  - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0
  - ipywidgets=8.1.8=pyhd8ed1ab_0
  - isoduration=20.11.0=pyhd8ed1ab_1
  - itsdangerous=2.2.0=pyhd8ed1ab_1
  - jedi=0.19.2=pyhd8ed1ab_1
  - jinja2=3.1.6=pyhcf101f3_1
  - jmespath=1.1.0=pyhcf101f3_1
  - jplephem=2.24=pyha4b2019_1
  - json5=0.13.0=pyhd8ed1ab_0
  - jsonpatch=1.33=pyhd8ed1ab_1
  - jsonpointer=3.0.0=pyhcf101f3_3
  - jsonschema=4.26.0=pyhcf101f3_0
  - jsonschema-specifications=2025.9.1=pyhcf101f3_0
  - jsonschema-with-format-nongpl=4.26.0=hcf101f3_0
  - jupyter-lsp=2.3.0=pyhcf101f3_0
  - jupyter_client=8.8.0=pyhcf101f3_0
  - jupyter_core=5.9.1=pyhc90fa1f_0
  - jupyter_events=0.12.0=pyhe01879c_0
  - jupyter_server=2.17.0=pyhcf101f3_0
  - jupyter_server_terminals=0.5.4=pyhcf101f3_0
  - jupyterlab=4.5.6=pyhd8ed1ab_0
  - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2
  - jupyterlab_server=2.28.0=pyhcf101f3_0
  - jupyterlab_widgets=3.0.16=pyhcf101f3_1
  - jxrlib=1.1=hd590300_3
  - kernel-headers_linux-64=6.12.0=he073ed8_6
  - keyutils=1.6.3=hb9d3cd8_0
  - kiwisolver=1.5.0=py312h0a2e395_0
  - krb5=1.21.3=h659f571_0
  - lark=1.3.1=pyhd8ed1ab_0
  - lazy-loader=0.5=pyhd8ed1ab_0
  - lcms2=2.18=h0c24ade_0
  - ld_impl_linux-64=2.45.1=default_hbd61a6d_101
  - lerc=4.1.0=hdb68285_0
  - libaatm=1.1.0=h5888daf_0
  - libabseil=20260107.1=cxx17_h7b12aa8_0
  - libactpol=c0c1647ad62b418f34fe38eb73168d4f2e13ff6f=h9bf148f_0
  - libactpol_deps=db0aee380dad503ba8fdf058d4d8075387100758=h6578b86_0
  - libaec=1.1.5=h088129d_0
  - libamd=3.3.3=haaf9dc3_7100102
  - libarchive=3.8.6=gpl_hc2c16d8_100
  - libarrow=23.0.1=h711ef25_3_cpu
  - libarrow-acero=23.0.1=h635bf11_3_cpu
  - libarrow-compute=23.0.1=h53684a4_3_cpu
  - libarrow-dataset=23.0.1=h635bf11_3_cpu
  - libarrow-substrait=23.0.1=hb4dd7c2_3_cpu
  - libavif16=1.4.0=hcfa2d63_0
  - libblas=3.11.0=5_h4a7cf45_openblas
  - libboost=1.85.0=h0ccab89_4
  - libboost-python=1.85.0=py312hf74af30_4
  - libbrotlicommon=1.2.0=hb03c661_1
  - libbrotlidec=1.2.0=hb03c661_1
  - libbrotlienc=1.2.0=hb03c661_1
  - libbtf=2.3.2=h32481e8_7100102
  - libcamd=3.3.3=h32481e8_7100102
  - libcap=2.77=h3ff7636_0
  - libcblas=3.11.0=5_h0358290_openblas
  - libccolamd=3.3.4=h32481e8_7100102
  - libcholmod=5.3.1=h59ddab4_7100102
  - libclang-cpp21.1=21.1.8=default_h99862b1_3
  - libclang13=22.1.0=default_h746c552_0
  - libcolamd=3.3.4=h32481e8_7100102
  - libcrc32c=1.1.2=h9c3ff4c_0
  - libcups=2.3.3=hb8b1518_5
  - libcurl=8.18.0=h4e3cde8_0
  - libcxsparse=4.4.1=h32481e8_7100102
  - libdeflate=1.25=h17f619e_0
  - libdrm=2.4.125=hb03c661_1
  - libedit=3.1.20250104=pl5321h7949ede_0
  - libegl=1.7.0=ha4b6fd6_2
  - libev=4.33=hd590300_2
  - libevent=2.1.12=hf998b51_1
  - libexpat=2.7.4=hecca717_0
  - libffi=3.5.2=h3435931_0
  - libflac=1.5.0=he200343_1
  - libfreetype=2.14.2=ha770c72_0
  - libfreetype6=2.14.2=h73754d4_0
  - libgcc=15.2.0=he0feb66_18
  - libgcc-devel_linux-64=14.3.0=hf649bbc_118
  - libgcc-ng=15.2.0=h69a702a_18
  - libgfortran=15.2.0=h69a702a_18
  - libgfortran-ng=15.2.0=h69a702a_18
  - libgfortran5=15.2.0=h68bc16d_18
  - libgl=1.7.0=ha4b6fd6_2
  - libglib=2.86.4=h6548e54_1
  - libglvnd=1.7.0=ha4b6fd6_2
  - libglx=1.7.0=ha4b6fd6_2
  - libgomp=15.2.0=he0feb66_18
  - libgoogle-cloud=2.39.0=h9d11ab5_1
  - libgoogle-cloud-storage=2.39.0=hdbdcf42_1
  - libgrpc=1.78.0=h1d1128b_1
  - libhwy=1.3.0=h4c17acf_1
  - libiconv=1.18=h3b78370_2
  - libjpeg-turbo=3.1.2=hb03c661_0
  - libjxl=0.11.2=ha09017c_0
  - libklu=2.3.5=hf24d653_7100102
  - liblapack=3.11.0=5_h47877c9_openblas
  - libldl=3.3.2=h32481e8_7100102
  - liblief=0.17.1=hecca717_0
  - libllvm21=21.1.8=hf7376ad_0
  - libllvm22=22.1.0=hf7376ad_0
  - libltdl=2.4.3a=h5888daf_0
  - liblzma=5.8.2=hb03c661_0
  - liblzma-devel=5.8.2=hb03c661_0
  - libmamba=2.5.0=hd28c85e_0
  - libmamba-spdlog=2.5.0=h12fcf84_0
  - libmambapy=2.5.0=py312h1ca65c7_0
  - libnghttp2=1.67.0=had1ee68_0
  - libnl=3.11.0=hb9d3cd8_0
  - libnsl=2.0.1=hb9d3cd8_1
  - libntlm=1.8=hb9d3cd8_0
  - libogg=1.3.5=hd0c01bc_1
  - libopenblas=0.3.30=openmp_hd680484_4
  - libopengl=1.7.0=ha4b6fd6_2
  - libopentelemetry-cpp=1.21.0=h9692893_2
  - libopentelemetry-cpp-headers=1.21.0=ha770c72_2
  - libparquet=23.0.1=h7376487_3_cpu
  - libparu=1.0.0=h17147ab_7100102
  - libpciaccess=0.18=hb9d3cd8_0
  - libpng=1.6.55=h421ea60_0
  - libpq=18.1=h5c52fec_2
  - libprotobuf=6.33.5=h2b00c02_0
  - librbio=4.3.4=h32481e8_7100102
  - libre2-11=2025.11.05=h0dc7533_1
  - libsanitizer=14.3.0=h8f1669f_18
  - libsodium=1.0.20=h4ab18f5_0
  - libsolv=0.7.35=h9463b59_0
  - libspex=3.2.3=had10066_7100102
  - libspqr=4.3.4=h852d39f_7100102
  - libsqlite=3.52.0=h0c1763c_0
  - libssh2=1.11.1=hcf80075_0
  - libstdcxx=15.2.0=h934c35e_18
  - libstdcxx-devel_linux-64=14.3.0=h9f08a49_118
  - libstdcxx-ng=15.2.0=hdf11a46_18
  - libsuitesparseconfig=7.10.1=h92d6892_7100102
  - libsystemd0=259.3=h6569c3e_0
  - libthrift=0.22.0=h454ac66_1
  - libtiff=4.7.1=h9d88235_1
  - libtool=2.5.4=h5888daf_0
  - libudev1=259.3=h6569c3e_0
  - libumfpack=6.3.5=heb53515_7100102
  - libutf8proc=2.11.3=hfe17d71_0
  - libuuid=2.41.3=h5347b49_0
  - libuv=1.51.0=hb03c661_1
  - libvulkan-loader=1.4.341.0=h5279c79_0
  - libwebp-base=1.6.0=hd42ef1d_0
  - libxcb=1.17.0=h8a09558_0
  - libxcrypt=4.4.36=hd590300_1
  - libxkbcommon=1.13.1=hca5e8e5_0
  - libxml2=2.15.1=h26afc86_0
  - libxml2-16=2.15.1=ha9997c6_0
  - libxslt=1.1.43=h711ed8c_1
  - libzlib=1.3.1=hb9d3cd8_2
  - libzopfli=1.0.3=h9c3ff4c_0
  - llvm-openmp=22.1.0=h4922eb0_0
  - llvmlite=0.46.0=py312h7424e68_0
  - lmfit=1.3.4=pyhd8ed1ab_0
  - locket=1.0.0=pyhd8ed1ab_0
  - lz4-c=1.10.0=h5888daf_1
  - lzo=2.10=h280c20c_1002
  - m4=1.4.21=hb03c661_0
  - markdown-it-py=4.0.0=pyhd8ed1ab_0
  - markupsafe=3.0.3=py312h8a5da7c_1
  - matplotlib=3.10.8=py312h7900ff3_0
  - matplotlib-base=3.10.8=py312he3d6523_0
  - matplotlib-inline=0.2.1=pyhd8ed1ab_0
  - mbedtls=3.6.3.1=h5888daf_0
  - mdurl=0.1.2=pyhd8ed1ab_1
  - menuinst=2.4.2=py312h7900ff3_0
  - metis=5.1.0=hd0bcaf9_1007
  - mistune=3.2.0=pyhcf101f3_0
  - moby2=0ae27c81ea6b326e165c553786531086bb4dd13d=py312h7255cad_0
  - mpc=1.3.1=h24ddda3_1
  - mpfr=4.2.1=h90cbb55_3
  - mpi=1.0.1=mpich
  - mpi4py=4.1.1=py312h613620b_103
  - mpich=5.0.0=h7063c07_1
  - mpmath=1.4.0=pyhd8ed1ab_0
  - msgpack-python=1.1.2=py312hd9148b4_1
  - multidict=6.7.1=py312h8a5da7c_0
  - munkres=1.1.4=pyhd8ed1ab_1
  - namaster=2.7=py312he5275ef_0
  - narwhals=2.18.0=pyhcf101f3_0
  - nbclient=0.10.4=pyhd8ed1ab_0
  - nbconvert-core=7.17.0=pyhcf101f3_0
  - nbformat=5.10.4=pyhd8ed1ab_1
  - ncurses=6.5=h2d0b736_3
  - nest-asyncio=1.6.0=pyhd8ed1ab_1
  - networkx=3.6.1=pyhcf101f3_0
  - nlohmann_json=3.12.0=h54a6638_1
  - nlohmann_json-abi=3.12.0=h0f90c79_1
  - notebook-shim=0.2.4=pyhd8ed1ab_1
  - numba=0.64.0=py312hd1dde6f_0
  - numdifftools=0.9.42=pyhecae5ae_0
  - numpy=2.4.2=py312h33ff503_1
  - openjpeg=2.5.4=h55fea9a_0
  - openjph=0.26.3=h8d634f6_0
  - openldap=2.6.10=he970967_0
  - openssl=3.6.1=h35e630c_1
  - orc=2.2.2=hbb90d81_1
  - orjson=3.11.7=py312h94568fe_0
  - overrides=7.7.0=pyhd8ed1ab_1
  - packaging=26.0=pyhcf101f3_0
  - pandas=3.0.1=py312h8ecdadd_0
  - pandocfilters=1.5.0=pyhd8ed1ab_0
  - parso=0.8.6=pyhcf101f3_0
  - partd=1.4.2=pyhd8ed1ab_0
  - patch=2.8=hb03c661_1002
  - patchelf=0.17.2=h58526e2_0
  - pcre2=10.47=haa7fec5_0
  - perl=5.32.1=7_hd590300_perl5
  - pexpect=4.9.0=pyhd8ed1ab_1
  - pgplot=5.2.2=hbeaba86_1009
  - pillow=12.1.1=py312h50c33e8_0
  - pip=26.0.1=pyh8b19718_0
  - pixell=0.31.8=py312h6eeef32_2
  - pixman=0.46.4=h54a6638_1
  - pkginfo=1.12.1.2=pyhd8ed1ab_0
  - platformdirs=4.9.4=pyhcf101f3_0
  - plotly=6.6.0=pyhd8ed1ab_0
  - plotly-resampler=0.11.0=pyhcf101f3_1
  - pluggy=1.6.0=pyhf9edf01_1
  - prometheus-cpp=1.3.0=ha5d0236_0
  - prometheus_client=0.24.1=pyhd8ed1ab_0
  - prompt-toolkit=3.0.52=pyha770c72_0
  - propcache=0.3.1=py312h178313f_0
  - pshmem=1.3.3=pyhd8ed1ab_0
  - psutil=7.2.2=py312h5253ce2_0
  - psycopg2=2.9.10=py312hf59bad3_4
  - psycopg2-binary=2.9.10=pyhd8ed1ab_1
  - pthread-stubs=0.4=hb9d3cd8_1002
  - ptyprocess=0.7.0=pyhd8ed1ab_1
  - pure_eval=0.2.3=pyhd8ed1ab_1
  - py-lief=0.17.1=py312h1289d80_0
  - py2vega=0.6.1=pyhd8ed1ab_0
  - pyaml=26.2.1=pyhcf101f3_1
  - pyarrow=23.0.1=py312h7900ff3_0
  - pyarrow-core=23.0.1=py312h2054cf2_0_cpu
  - pybind11-abi=11=hc364b38_1
  - pycosat=0.6.6=py312h4c3975b_3
  - pycparser=2.22=pyh29332c3_1
  - pyerfa=2.0.1.5=py310h32771cd_2
  - pyfftw=0.15.1=py312h4f23490_1
  - pygments=2.19.2=pyhd8ed1ab_0
  - pyparsing=3.3.2=pyhcf101f3_0
  - pyside6=6.10.1=py312h9da60e5_0
  - pysm3=3.4.2=pyhc455866_0
  - pysocks=1.7.1=pyha55dd90_7
  - pysqlite3=0.5.4=py313hb2a9d6d_0
  - pytest=9.0.2=pyhcf101f3_0
  - pytest-cov=7.0.0=pyhcf101f3_1
  - python=3.12.13=hd63d673_0_cpython
  - python-dateutil=2.9.0.post0=pyhe01879c_2
  - python-fastjsonschema=2.21.2=pyhe01879c_0
  - python-gil=3.12.13=hd8ed1ab_0
  - python-json-logger=2.0.7=pyhd8ed1ab_0
  - python-libarchive-c=5.3=pyhe01879c_1
  - python-tzdata=2025.3=pyhd8ed1ab_0
  - python_abi=3.12=8_cp312
  - pytz=2025.2=pyhd8ed1ab_0
  - pyyaml=6.0.3=py312h8a5da7c_1
  - pyzmq=27.1.0=py312hda471dd_2
  - qhull=2020.2=h434a139_5
  - qpoint=1.13.0=py312h7255cad_0
  - qt6-main=6.10.1=h6f76662_3
  - quaternion=2024.0.13=py312h4f23490_0
  - rav1e=0.8.1=h1fbca29_0
  - rdma-core=61.0=h192683f_0
  - re2=2025.11.05=h5301d42_1
  - readline=8.3=h853b02a_0
  - referencing=0.37.0=pyhcf101f3_0
  - reproc=14.2.5.post0=hb9d3cd8_0
  - reproc-cpp=14.2.5.post0=h5888daf_0
  - requests=2.32.5=pyhcf101f3_1
  - retrying=1.4.2=pyhe01879c_0
  - rfc3339-validator=0.1.4=pyhd8ed1ab_1
  - rfc3986-validator=0.1.1=pyh9f0ad1d_0
  - rfc3987-syntax=1.1.0=pyhe01879c_1
  - rhash=1.4.6=hb9d3cd8_1
  - rich=14.3.3=pyhcf101f3_0
  - ripgrep=15.1.0=hdab8a38_0
  - rpds-py=0.30.0=py312h868fb18_0
  - ruamel.yaml=0.18.17=py312h5253ce2_2
  - ruamel.yaml.clib=0.2.15=py312h5253ce2_1
  - s2n=1.7.0=ha63dd3a_1
  - s3fs=2026.2.0=pyhd8ed1ab_1
  - scikit-image=0.26.0=np2py312h4ae17e4_0
  - scipy=1.17.1=py312h54fa4ab_0
  - send2trash=2.1.0=pyha191276_1
  - setuptools=82.0.1=pyh332efcf_0
  - setuptools-scm=9.2.2=pyhd8ed1ab_0
  - sgp4=2.25=py312hd9148b4_2
  - shellingham=1.5.4=pyhd8ed1ab_2
  - simdjson=4.2.4=hb700be7_0
  - six=1.17.0=pyhe01879c_1
  - skyfield=1.54=pyhd8ed1ab_0
  - snappy=1.2.2=h03e3b7b_1
  - sniffio=1.3.1=pyhd8ed1ab_2
  - so3g=0.2.5=py312h9fe008e_0
  - sortedcontainers=2.4.0=pyhd8ed1ab_1
  - soupsieve=2.8.3=pyhd8ed1ab_0
  - spdlog=1.17.0=hab81395_1
  - sqlalchemy=2.0.48=py312h5253ce2_0
  - sqlite=3.52.0=hbc0de68_0
  - stack_data=0.6.3=pyhd8ed1ab_1
  - suitesparse=7.10.1=ha0f6916_7100102
  - svt-av1=4.0.1=hecca717_0
  - sympy=1.14.0=pyh2585a3b_106
  - sysroot_linux-64=2.39=hc4b9eeb_6
  - terminado=0.18.1=pyhc90fa1f_1
  - tifffile=2026.3.3=pyhd8ed1ab_0
  - tinycss2=1.4.0=pyhd8ed1ab_0
  - tk=8.6.13=noxft_h366c992_103
  - toast=3.0.0a42=py312h9fe008e_0
  - toml=0.10.2=pyhcf101f3_3
  - tomli=2.4.0=pyhcf101f3_0
  - tomlkit=0.14.0=pyha770c72_0
  - toolz=1.1.0=pyhd8ed1ab_1
  - tornado=6.5.4=py312h961da02_0
  - tqdm=4.67.3=pyh8f84b5b_0
  - traitlets=5.14.3=pyhd8ed1ab_1
  - traittypes=0.2.3=pyh332efcf_0
  - truststore=0.10.4=pyhcf101f3_0
  - tsdownsample=0.1.4.1=py312h12e396e_1
  - typer=0.24.0=pyhcf101f3_0
  - typing-extensions=4.15.0=h396c80c_0
  - typing_extensions=4.15.0=pyhcf101f3_0
  - typing_utils=0.1.0=pyhd8ed1ab_1
  - tzdata=2025c=hc9c84f9_1
  - ucx=1.20.0=hf72d326_1
  - uncertainties=3.2.4=pyhd8ed1ab_0
  - uncompresspy=0.4.1=pyhd8ed1ab_0
  - unicodedata2=17.0.1=py312h4c3975b_0
  - uri-template=1.3.0=pyhd8ed1ab_1
  - urllib3=2.6.3=pyhd8ed1ab_0
  - versioneer=0.29=pyhd8ed1ab_0
  - wayland=1.24.0=hd6090a7_1
  - wcslib=8.2.2=h58fca5b_7
  - wcwidth=0.6.0=pyhd8ed1ab_0
  - webcolors=25.10.0=pyhd8ed1ab_0
  - webencodings=0.5.1=pyhd8ed1ab_3
  - websocket-client=1.9.0=pyhd8ed1ab_0
  - werkzeug=3.1.6=pyhcf101f3_0
  - wheel=0.46.3=pyhd8ed1ab_0
  - widgetsnbextension=4.0.15=pyhd8ed1ab_0
  - wrapt=2.1.2=py312h4c3975b_0
  - wurlitzer=3.1.1=pyhd8ed1ab_1
  - xcb-util=0.4.1=h4f16b4b_2
  - xcb-util-cursor=0.1.6=hb03c661_0
  - xcb-util-image=0.4.0=hb711507_2
  - xcb-util-keysyms=0.4.1=hb711507_0
  - xcb-util-renderutil=0.3.10=hb711507_0
  - xcb-util-wm=0.4.2=hb711507_0
  - xkeyboard-config=2.47=hb03c661_0
  - xorg-libice=1.1.2=hb9d3cd8_0
  - xorg-libsm=1.2.6=he73a12e_0
  - xorg-libx11=1.8.13=he1eb515_0
  - xorg-libxau=1.0.12=hb03c661_1
  - xorg-libxcomposite=0.4.7=hb03c661_0
  - xorg-libxcursor=1.2.3=hb9d3cd8_0
  - xorg-libxdamage=1.1.6=hb9d3cd8_0
  - xorg-libxdmcp=1.1.5=hb03c661_1
  - xorg-libxext=1.3.7=hb03c661_0
  - xorg-libxfixes=6.0.2=hb03c661_0
  - xorg-libxi=1.8.2=hb9d3cd8_0
  - xorg-libxrandr=1.5.5=hb03c661_0
  - xorg-libxrender=0.9.12=hb9d3cd8_0
  - xorg-libxtst=1.2.5=hb9d3cd8_3
  - xorg-libxxf86vm=1.1.7=hb03c661_0
  - xz=5.8.2=ha02ee65_0
  - xz-gpl-tools=5.8.2=ha02ee65_0
  - xz-tools=5.8.2=hb03c661_0
  - yaml=0.2.5=h280c20c_3
  - yaml-cpp=0.8.0=h3f2d84a_0
  - yarl=1.23.0=py312h8a5da7c_0
  - zeromq=4.3.5=h387f397_9
  - zfp=1.0.1=h909a3a2_5
  - zipp=3.23.0=pyhcf101f3_1
  - zlib=1.3.1=hb9d3cd8_2
  - zlib-ng=2.3.3=hceb46e0_1
  - zstandard=0.25.0=py312h5253ce2_1
  - zstd=1.5.7=hb78ec9c_6
  - zziplib=0.13.69=he45264a_2
  - pip:
    - pipgrip==0.13.0
    - quaternionarray==0.6.2
    - sotodlib==0.6.16

prefix: "/home/bai-chiang/micromamba/envs/soconda-test_0.2.3.dev340"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you just move this external channel below the conda-forge one? That way doing conda install openmpi will by default grab the first one it finds (from the main channel). Installing specific dummy versions like openmpi=4.1.6=external_* (which are not in the main channel) would then pull it from the external channel. Does that make sense?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought I branched off of main. I will fix that.

Sorry I didn't make it clear. The so3g hash on the main branch is outdated.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move this external channel below the conda-forge one

This works on my machine

diff --git a/soconda.sh b/soconda.sh
index 784926d..029321f 100755
--- a/soconda.sh
+++ b/soconda.sh
@@ -240,8 +240,8 @@ if [ -z "${env_check}" ]; then
     echo "# condarc for soconda" > "${CONDA_PREFIX}/.condarc"
     echo "channels:" >> "${CONDA_PREFIX}/.condarc"
     echo "  - file://${CONDA_PREFIX}/conda-bld" >> "${CONDA_PREFIX}/.condarc"
-    echo "  - conda-forge/label/mpi-external" >> "${CONDA_PREFIX}/.condarc"
     echo "  - conda-forge" >> "${CONDA_PREFIX}/.condarc"
+    echo "  - conda-forge/label/mpi-external" >> "${CONDA_PREFIX}/.condarc"
     echo "  - nodefaults" >> "${CONDA_PREFIX}/.condarc"
     echo "changeps1: true" >> "${CONDA_PREFIX}/.condarc"
     echo "env_prompt: '({name}) '" >> "${CONDA_PREFIX}/.condarc"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great, sounds like that is a solution!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But it does not work on Tiger3.

(/scratch/gpfs/SIMONSOBS/env/dev/soconda_dev) ip8725@tiger3:/scratch/gpfs/SIMONSOBS/admin/soconda$     mkdir -p "${CONDA_PREFIX}/conda-bld"
    mkdir -p "${CONDA_PREFIX}/conda-bld/temp_build"
    conda index "${CONDA_PREFIX}/conda-bld"

    echo "# condarc for soconda" > "${CONDA_PREFIX}/.condarc"
    echo "channels:" >> "${CONDA_PREFIX}/.condarc"
    echo "  - file://${CONDA_PREFIX}/conda-bld" >> "${CONDA_PREFIX}/.condarc"
    echo "  - conda-forge" >> "${CONDA_PREFIX}/.condarc"
    echo "  - conda-forge/label/mpi-external" >> "${CONDA_PREFIX}/.condarc"
    echo "  - nodefaults" >> "${CONDA_PREFIX}/.condarc"
    echo "changeps1: true" >> "${CONDA_PREFIX}/.condarc"
    echo "env_prompt: '({name}) '" >> "${CONDA_PREFIX}/.condarc"
    echo "solver: libmamba" >> "${CONDA_PREFIX}/.condarc"
    echo "channel_priority: strict" >> "${CONDA_PREFIX}/.condarc"

    # Reactivate to pick up changes
    conda deactivate
    conda activate "${fullenv}"
2026-03-12T09:41:26 Subdir: noarch Gathering repodata
2026-03-12T09:41:26 noarch Writing pre-patch repodata
2026-03-12T09:41:26 noarch Applying patch instructions
2026-03-12T09:41:26 noarch Writing patched repodata
2026-03-12T09:41:26 noarch Building current_repodata subset
2026-03-12T09:41:26 noarch Writing current_repodata subset
2026-03-12T09:41:26 noarch Writing index HTML
(/scratch/gpfs/SIMONSOBS/env/dev/soconda_dev) ip8725@tiger3:/scratch/gpfs/SIMONSOBS/admin/soconda$ conda install op
enmpi=4.1.6=external_*
2 channel Terms of Service accepted
Channels:
 - file:///scratch/gpfs/SIMONSOBS/env/dev/soconda_dev/conda-bld
 - conda-forge
 - conda-forge/label/mpi-external
 - nodefaults
 - defaults
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: failed

LibMambaUnsatisfiableError: Encountered problems while solving:
  - package openmpi-4.1.6-external_hf12fe31_2 is excluded by strict repo priority


(/scratch/gpfs/SIMONSOBS/env/dev/soconda_dev) ip8725@tiger3:/scratch/gpfs/SIMONSOBS/admin/soconda$ 

The strict repo priority is necessary to make sure we pull radical.pilot from the local build and not conda-forge. So moving it after conda-forge is not the solution. I will try to see if I can do something different.

@iparask
Copy link
Member Author

iparask commented Mar 11, 2026

openmpi-external is the way we went from day 1 at Princeton, and since we are not using Intel I do not want to change them on Tiger3. In the end, if we need a more modern open-mpi version I will ask to be provided.

@Bai-Chiang
Copy link
Contributor

Bai-Chiang commented Mar 12, 2026

It seems conda search could find this package conda-forge/label/mpi-external::openmpi=4.1.6=external_* with channel specified at front. I removed conda-forge/label/mpi-external from .condarc file, and changed packages_conda.txt file. I'm building on tiger3 now.

diff --git a/config/tiger3/packages_conda.txt b/config/tiger3/packages_conda.txt
index 04d58a8..e05b7cc 100644
--- a/config/tiger3/packages_conda.txt
+++ b/config/tiger3/packages_conda.txt
@@ -1,6 +1,6 @@
 # Adjust the default python version
 python=3.11
-openmpi=4.1.6=external_*
+conda-forge/label/mpi-external::openmpi=4.1.6=external_*
 #
 # These are low-level tools needed to build local packages
 # and parse pip dependencies with pipgrip.
diff --git a/soconda.sh b/soconda.sh
index 784926d..5916da5 100755
--- a/soconda.sh
+++ b/soconda.sh
@@ -240,7 +240,6 @@ if [ -z "${env_check}" ]; then
     echo "# condarc for soconda" > "${CONDA_PREFIX}/.condarc"
     echo "channels:" >> "${CONDA_PREFIX}/.condarc"
     echo "  - file://${CONDA_PREFIX}/conda-bld" >> "${CONDA_PREFIX}/.condarc"
-    echo "  - conda-forge/label/mpi-external" >> "${CONDA_PREFIX}/.condarc"
     echo "  - conda-forge" >> "${CONDA_PREFIX}/.condarc"
     echo "  - nodefaults" >> "${CONDA_PREFIX}/.condarc"
     echo "changeps1: true" >> "${CONDA_PREFIX}/.condarc"

Update: No this does not work. (╯_╰)

@Bai-Chiang
Copy link
Contributor

Bai-Chiang commented Mar 12, 2026

This works!

diff --git a/soconda.sh b/soconda.sh
index 98714b7..eac2d13 100755
--- a/soconda.sh
+++ b/soconda.sh
@@ -242,7 +242,9 @@ if [ -z "${env_check}" ]; then
     echo "# condarc for soconda" > "${CONDA_PREFIX}/.condarc"
     echo "channels:" >> "${CONDA_PREFIX}/.condarc"
     echo "  - file://${CONDA_PREFIX}/conda-bld" >> "${CONDA_PREFIX}/.condarc"
+    if grep -q 'mpi.*=external' "${confdir}/packages_conda.txt" ; then
     echo "  - conda-forge/label/mpi-external" >> "${CONDA_PREFIX}/.condarc"
+    fi
     echo "  - conda-forge" >> "${CONDA_PREFIX}/.condarc"
     echo "  - nodefaults" >> "${CONDA_PREFIX}/.condarc"
     echo "changeps1: true" >> "${CONDA_PREFIX}/.condarc"

@iparask
Copy link
Member Author

iparask commented Mar 25, 2026

Done

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

Successfully merging this pull request may close these issues.

3 participants