Skip to content

feature: pixi-beta#143

Merged
jandom merged 27 commits into
mainfrom
pixi-beta
Apr 23, 2026
Merged

feature: pixi-beta#143
jandom merged 27 commits into
mainfrom
pixi-beta

Conversation

@jandom
Copy link
Copy Markdown
Collaborator

@jandom jandom commented Mar 23, 2026

Completing the work started in #34

Remaining tasks

  • fix random ruff problems
  • update the docker build to use both pixi and conda
  • confirm that inference can be done
  • confirm that training can be done (decision: deferred)

* Add initial pixi environment

all tests pass, predictions seem to be correct
corresponds to a modernized conda environment following best practices

* Reorder dependencies for easier read

* Add openfold3 as an editable dependency

* Sync cuda-python pin between pypi package and the conda environment

* Comments

Comments

Overcommenting issues

* Add explicitly a conda yml version of the pixi environment

* Improve some wordings

* Update pixi lockfile

* Vendoring pieces of deepspeed

incomplete, we might not need the native sources
from upstream commit df59f203f40c8a292dd019ae68c9e6c88f107026

* Swap ninja verification with pytorch's

* Vendoring pieces of deepspeed

incomplete, we might not need the native sources
from upstream commit df59f203f40c8a292dd019ae68c9e6c88f107026

* Use vendored deepspeed evoformer builder

Use vendored deepspeed in the attention primitives

* Add symlink to vendored deepspeed as in upstream

* Vendor also op_builder.__init__ from deepspeed

* Import explicitly EvoformerAttnBuilder, avoiding broken introspection magic

* Add a ignore mechanism for cutlass detection in vendored deepspeed

* Apply cutlass detection workaround and remove all nvidia-cutlass tricks from pixi environment

* Remove nvidia-cutlass from openfold-3 dependencies (fix later)

* Remove pypi ninja dependency in pixi workspace

* No need for cutlass hacks

* Add pixi config to .gitattributes

* Remove deepspeed hacks for good

* Update pixi lockfile

* Update pixi conda environment

* Remove MKL from pypi dependencies, as it is unused

* Remove aria2 from pypi dependencies, unused and not so much of a convenience

* Update lockfile

Update lockfile

* Re-enable pure PyPI install

* Disable hack when conda is active

* More comments on cutlass python API deprecation and pytorch

* Make pixi environments (CPU, CUDA12, CUDA13, for all major platforms)

* Increase LMDB map size to make test pass in osx-arm64

* Better comments of TODOs in pixi.toml

Better comments of TODOs in pixi.toml

Better comments of TODOs in pixi.toml

* Pin cuequivariance until test failure is investigated

* Move deepspeed to optional dependency also in pyproject

* Pyproject: extend python version support

* Pyproject: move dependencies table together with optional-dependencies

* Pyproject: document future decision on dependency-groups

* Pyproject: reformat to consolidate indent to 4 spaces

* Pyproject: reorder dependencies for easier read

* Pixi: add scipy

* Pixi: add comment on CUDA13

* Pixi: make cuequivariance CUDA generic for its conda packages

* Pixi: add reminder about devel install

* Pyproject: fix and improve readability, add URLs

* pixi.toml: make more readable by showing first envs, then base, then variants

* pixi.toml: pin deepspeed to 0.18.3, first one with ninja detection fixed

* pixi.toml: fully enable aarch64 and cuda13, revamp docs

* pixi.lock: update

* pixi.toml: add triton to cuequivariance dependencies for CUDA13

* pixi.lock: update

* pixi.toml: include pip to allow users to play

* pixi.toml: formatting for better readability

* pixi.toml: restrict cuequivariance-cu13 to linux-64 until we unpin to >=0.8

* pixi.toml: formatting for better readability

* pixi.toml: make pytorch-gpu an isolated environment feature

in this way we can more easily express when a package is not ready yet in CF

* pixi.toml: add environments that combine mostly pypi-based deps with CUDA from conda

* pixi.toml: add openfold3-editable-full and account for lack of cuequivariance for python=3.14

* pixi.toml: brief documentation of the pypi-dominant environments

* pixi.toml: add also the dev optional dependency group to openfold3-full

* pyproject.toml: pin cuequivariance to <0.8 until we adapt tests

* pixi.toml: add kalign to required non-pypi dependencies

* pixi.toml: add more bioinformatics tools to non-pypi

* pixi.toml: make env setup be part of the deepspeed-build feature

* pixi.toml: simplify management of pypi features

* pixi.lock: update, all tests pass A100,B300 x CUDA12,CUDA13

* pixi.toml: add table of what works and what needs test

* pixi.toml: add tasks for exporting to regular conda environment yamls

* conda environments: delete outdated modernized conda env, use new tasks instead

* pixi.toml: bump min pixi version

* pixi.toml: remove unnecessary comments

* pixi.toml: remove unnecessary envvar definition for isolating extension builds

* pixi.toml: better definition of maintenance environment

pixi.toml: better definition of maintenance environment

pixi.toml: better definition of maintenance environment

* pixi.toml: add simple task to run test and save rsults to an environment-specific dir

* of3: enable pickling regardless of forking strategy and platform

* of3: enable multiple data loader workers in osx mps backed

* Vendor improved deepspeed builder from upstream PR

See: deepspeedai/DeepSpeed#7760

* pixi.lock: update

* pixi.toml: remove some comment noise

* of3: fix multiprocessing configuration corner case in osx

* docker: move outdated example dockerfiles to docker/pixi-examples

* examples: add example runner for osx inference

* pixi.toml: ensure we get the right pytorch from pypi

something smilar should actually be supported in pyproject.toml

* pixi.lock: update, fixed torch cuda missmatch in pypi environments

* pixi.toml: fix lock export + make default environment be maintenance

* pixi.toml: use a more consitent name for environment arg

* pixi.lock: update

* pixi.toml: workaround for no-default-feature breaking the test task (pixi bug)

* pixi.toml: issue with pixi pypi resolution seems solved

* Revert "pixi.toml: issue with pixi pypi resolution seems solved"

This reverts commit ded3482.

* pixi.toml: better document problem and workaround

* pixi.toml: make the test task present in all relevant environments

this I feel makes less surprising its use, as opposed to passing the environment as an arg to a dependent task

* pixi.toml: let CUDA13 flow freely

* pixi.lock: update for initial pytorch 2.10, cuda 13.1 support

* pixi.toml: add safe cuda environments (no accelerators)

* of3: remove deepspeed hacks

note that there are still some in __init__.py

* of3: unvendor deepspeed

* pixi.toml: simplify deepspeed dependency after our changes made it to CF/pypi

* pixi.toml: remove safe environments as we are not maintaining them

* pixi.toml: enable pytorch-coda in cuda 13 env after 2.10 release

* pyproject.toml: pin deepspeed to >0.18.5, improved evoformer compilation

* Add awscrt to dependencies, missing from recent PR

* pixi.toml: setup correctly path to PTXAS_BLACKWELL for triton >=3.6.0

* pixi.toml: add -safe environments, at the moment just without cuequivariance

these are also conda-pure environments

* pixi.lock: update after consolidation (no vendor, pytorch 2.10 + CF cuda13)

* pixi.toml: update outdated comments

* updates with GB10 tests (#2)

* updates with GB10 tests

* cleanup

* harmonize

* linting data_module.py

* speculative changes

* pixi.toml: remove safe environments

* pixi.lock: update after removal of safe environments

* Remove pixi docker examples, to rework

* Comment-out workaround for hard to reproduce ABI mismatch problem

* pixi.toml: bump pixi, improve conda export by including all env variables

* pixi.toml: unpin biotite

* pixi.toml: python has its own feature

* pixi.toml: bump deepspeed

* pyproject.toml: bump deepspeed to version without Evoformer build bug

* pixi.toml: detail on workaround

* pixi.lock: update

* pixi.toml: add example task to update safely the lockfile

* pixi.toml: remove kalign2

* tests: fix test depending on unspecified glob return order

* pixi.toml: better metadata

* docs: wip

* pixi.lock: update

* Allow to configure multiprocessing start and set safe defaults

We would still need to document this for users

* Fix capitalization error

* Fix capitalization error

* Fix typo

* pixi.lock: update

---------

Co-authored-by: Tim Adler <tim.adler@bayer.com>
Co-authored-by: Jan Domański <jan.domanski@omsf.io>
@jandom jandom self-assigned this Mar 23, 2026
@jandom jandom added the safe-to-test Internal only label used to indicate PRs that are ready for automated CI testing. label Mar 23, 2026
@jandom jandom changed the title feature: pixi feature: pixi-beta Mar 31, 2026
@jandom
Copy link
Copy Markdown
Collaborator Author

jandom commented Apr 7, 2026

Screenshot 2026-04-07 at 10 50 37

@sdvillal I tried to get something for the docs that gives people an overview of this feature – what do you think about this?

@jandom jandom added safe-to-test Internal only label used to indicate PRs that are ready for automated CI testing. and removed safe-to-test Internal only label used to indicate PRs that are ready for automated CI testing. labels Apr 8, 2026
Comment thread openfold3/core/data/io/dataset_cache.py Outdated
Comment on lines +197 to +198
lmdb_env.close()
del lmdb_env
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

I'm not in love with this – might open a side-car PR to clean this up. LMDB roundtrip test fails for me without this hack. We just need a better way to cleanup these resources

transaction.put(key_bytes, val_bytes)

lmdb_env.close()
del lmdb_env
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Same LMDB hack here

Comment thread openfold3/tests/test_lmdb.py Outdated
Comment on lines +68 to +69
test_lmdb_dir = tmp_path / "test_lmdb"
map_size = 20 * 1024
map_size = 200 * 1024
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

We bumped into this while working on another problem, this should just be tied to the page size on the os – otherwise we're hacking around with random numbers

@jandom
Copy link
Copy Markdown
Collaborator Author

jandom commented Apr 8, 2026

@sdvillal can you take a look here? I've messed around a bit

Manually triggered the test workflow from the branch, otherwise it picks-up the workflow form main (points to files that no longer exists)

https://github.com/aqlaboratory/openfold-3/actions/runs/24134205657

update all the above tests passed, I think this is ready to go! LMDB is the only loose-end but it's being addressed in other PRs already.

Another batch of tests https://github.com/aqlaboratory/openfold-3/actions/runs/24185282518 🛑 failed, missing dep

https://github.com/aqlaboratory/openfold-3/actions/runs/24186689907 🟢

@jandom jandom requested a review from jnwei April 8, 2026 13:44
@jandom jandom requested a review from jnwei April 15, 2026 12:03
@jandom jandom added safe-to-test Internal only label used to indicate PRs that are ready for automated CI testing. and removed safe-to-test Internal only label used to indicate PRs that are ready for automated CI testing. labels Apr 15, 2026
@jandom
Copy link
Copy Markdown
Collaborator Author

jandom commented Apr 15, 2026

Your spidy-sense was correct @jnwei – the pixi envs include cueq but the tests are getting skipped (locally, DGX – on the AWS builders we don't have a GPU).

openfold3/tests/test_kernels.py::TestKernels::test_cueq_backward_bf16 SKIPPED (Requires CU-Equivaraince to be installed)           [ 71%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_backward_fp32 SKIPPED (Requires CU-Equivaraince to be installed)           [ 71%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_forward_bf16 SKIPPED (Requires CU-Equivaraince to be installed)            [ 71%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_forward_fp32 SKIPPED (Requires CU-Equivaraince to be installed)            [ 71%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_tri_mult_bwd SKIPPED (Requires CU-Equivaraince to be installed)            [ 72%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_tri_mult_fwd SKIPPED (Requires CU-Equivaraince to be installed) 

Otherwise the branch is all green https://github.com/aqlaboratory/openfold-3/actions/runs/24453803143 🟢

@sdvillal
Copy link
Copy Markdown
Contributor

Your spidy-sense was correct @jnwei – the pixi envs include cueq but the tests are getting skipped (locally, DGX – on the AWS builders we don't have a GPU).

openfold3/tests/test_kernels.py::TestKernels::test_cueq_backward_bf16 SKIPPED (Requires CU-Equivaraince to be installed)           [ 71%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_backward_fp32 SKIPPED (Requires CU-Equivaraince to be installed)           [ 71%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_forward_bf16 SKIPPED (Requires CU-Equivaraince to be installed)            [ 71%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_forward_fp32 SKIPPED (Requires CU-Equivaraince to be installed)            [ 71%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_tri_mult_bwd SKIPPED (Requires CU-Equivaraince to be installed)            [ 72%]
openfold3/tests/test_kernels.py::TestKernels::test_cueq_tri_mult_fwd SKIPPED (Requires CU-Equivaraince to be installed) 

Otherwise the branch is all green https://github.com/aqlaboratory/openfold-3/actions/runs/24453803143 🟢

IIRC, we setup so that cueq is not installed in ARM systems. For me, cueq tests were run successfully in both A100s and B300 - we needed to pin it down for the tests to pass. Will give a look later.

@sdvillal
Copy link
Copy Markdown
Contributor

I worry a bit that people will see openfold3-cpu and assume that we support a cpu only version for running OpenFold3. It might be good to have a footnote or other note explaining the limitations of that environment.

Inference works like a charm in CPU only - in my limited experience at least. What kind of limitations are you thinking about?

@sdvillal
Copy link
Copy Markdown
Contributor

sdvillal commented Apr 15, 2026

Screenshot 2026-04-07 at 10 50 37 @sdvillal I tried to get something for the docs that gives people an overview of this feature – what do you think about this?

This looks cool; I would maybe simplify by (it is already good enough as is):

  • flagging default as a "maintenance" environment, not including openfold itself
  • I think a table linking to systems might be more informative (e.g., cuequivariance is not available in ARM)
  • people will need a good look to understand how colors are informative (they are, congrats for that!)
  • some rows are not consistent (e.g., deepspeed and not-in-pypi); then openfold-3-full also pulls deepspeed, so these envs also come with batteries included

Fine for me to merge as is and I can give a hand with more accurate docs later, if needed.

As a note, one of the limitations (or design choices) from pixi makes it difficult to have more modular environments (e.g., that you can opt out deepspeed with a command line option). I discussed with the pixi folks and they seem to have some ideas on how to bring this modularity back without fully compromising locking. It would be a great addition for our complex setup.

@jandom
Copy link
Copy Markdown
Collaborator Author

jandom commented Apr 15, 2026

@sdvillal that's good feedback thanks!!

I think a table linking to systems might be more informative (e.g., cuequivariance is not available in ARM)

well about that :P #181 – it's available for 0.8 and above, but it required the tests to be fixed. inference works for me in this branch too.

some rows are not consistent (e.g., deepspeed and not-in-pypi); then openfold-3-full also pulls deepspeed, so these envs also come with batteries included

sorry it's late – maybe you can unpack this for me? BTW there is a source .excalidraw in the repo, and a vscode extension if you want to add your chef's kiss!

@jnwei
Copy link
Copy Markdown
Contributor

jnwei commented Apr 22, 2026

Below is a record of the systems I tested with pixi.

A few notes:

  • On my M2 osx-arm64 device, I was unable to build openfold3-cpu. I believe this is related to the OpenMP issue that @sdvillal highlighted wrt to kalign-python. My understanding is that we need to either have a conda package for kalign-python, and it is out of the scope of this PR to fix it.
  • When running unit tests on A100 and GH200, the all the unit tests pass except for the following:
FAILED openfold3/tests/test_triangular_attention.py::test_shape[cuda-True] - AssertionError: Values are not sufficiently close.        │
FAILED openfold3/tests/test_triangular_attention.py::test_shape[cuda-False] - AssertionError: Values are not sufficiently close.       │
FAILED openfold3/tests/test_triangular_multiplicative_update.py::test_shape[cuda] - AssertionError: Values are not sufficiently close.

These are the regression tests for triangular attention. We should revisit how we store the regression records. Perhaps we should have a record per device. But I don't think we need to fix this here.

GPU type Env name Status Notes
M2 openfold-cpu  
A100 openfold-cpu Builds
A100 openfold-gpu-cuda12 Test unit tests, setup_openfold, predict with ubiqutin
A100 openfold-gpu-cuda13 Test unit tests, setup_openfold, predict with ubiqutin
GH200 openfold-gpu-cuda12 Test unit tests, setup_openfold, predict with ubiqutin

@jandom and @sdvillal if this matches with your expectations of what we should accomplish in this PR, I am happy to approve and merge

@sdvillal
Copy link
Copy Markdown
Contributor

Hi Jennifer,

Thanks for testing!

Regarding osx and openmp, things work again if you disable the check, which I guess is risky but so far it allowed me to run tests and predictions succesfuly. Let's document it with a warning admonition:

export KMP_DUPLICATE_LIB_OK=TRUE

Note that this is a problem with how the wheels are created (using auditwheel repair) and not particular to our environments, see here. What worries me is what unintended consequences this might have in linux with longer lived processes, as I understand behaviour when mixing runtimes in the same process is undefined and can lead, e.g., to oversubscription with different pools of processes, although I hope our usage pattern is not very risky. Let's keep an eye for new strange things.

Possible solutions are indeed getting the conda-forge package accepted (stuck in a strange limbo), which is an example why the conda ecosystem is better suited technically for healthy environments (all dependencies linking to the same openmp runtime in this case, which is just not possible to achieve with pypi at the moment) or going back to calling kalign via subprocess.

@sdvillal
Copy link
Copy Markdown
Contributor

Below is a record of the systems I tested with pixi.

A few notes:

  • On my M2 osx-arm64 device, I was unable to build openfold3-cpu. I believe this is related to the OpenMP issue that @sdvillal highlighted wrt to kalign-python. My understanding is that we need to either have a conda package for kalign-python, and it is out of the scope of this PR to fix it.
  • When running unit tests on A100 and GH200, the all the unit tests pass except for the following:
FAILED openfold3/tests/test_triangular_attention.py::test_shape[cuda-True] - AssertionError: Values are not sufficiently close.        │
FAILED openfold3/tests/test_triangular_attention.py::test_shape[cuda-False] - AssertionError: Values are not sufficiently close.       │
FAILED openfold3/tests/test_triangular_multiplicative_update.py::test_shape[cuda] - AssertionError: Values are not sufficiently close.

These are the regression tests for triangular attention. We should revisit how we store the regression records. Perhaps we should have a record per device. But I don't think we need to fix this here.

GPU type Env name Status Notes
M2 openfold-cpu ❌  
A100 openfold-cpu ✅ Builds
A100 openfold-gpu-cuda12 ✅ Test unit tests, setup_openfold, predict with ubiqutin
A100 openfold-gpu-cuda13 ✅ Test unit tests, setup_openfold, predict with ubiqutin
GH200 openfold-gpu-cuda12 ✅ Test unit tests, setup_openfold, predict with ubiqutin
@jandom and @sdvillal if this matches with your expectations of what we should accomplish in this PR, I am happy to approve and merge.

My expectations are that:

  • also M2 should pass once you use the trick described above.
  • I also agree that these regression tests might need to get some per-device redefinition

As a note, tests also pass in B300

@jnwei
Copy link
Copy Markdown
Contributor

jnwei commented Apr 22, 2026

Thank you @sdvillal for the suggestion.

Unfortunately, I seem to have a slightly different error; adding the KMP_DUPLICATE_LIB_OK=TRUE flag did not fix my issue on M2.

The full stack trace is below. If my understanding is correct, I think the underlying issue in this build is that it is missing any copy of libomp, e.g.

      ninja: error: '/opt/homebrew/opt/libomp/lib/libomp.dylib', needed by '_core.cpython-313-darwin.so', missing and no known rule to make it
kalign-python build failure on macOS ARM64 pixi run -e openfold3-cpu setup_openfold

Error: × Failed to update PyPI packages for environment 'openfold3-cpu'
├─▶ Failed to prepare distributions
├─▶ Failed to build kalign-python==3.5.1
├─▶ The build backend returned an error
╰─▶ Call to scikit_build_core.build.build_wheel failed (exit status: 1)

  [stdout]
  *** scikit-build-core 0.12.2 using CMake 4.3.1 (wheel)
  *** Configuring CMake...
  loading initial cache file /var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/build/CMakeInit.txt
  -- The C compiler identification is AppleClang 17.0.0.17000604
  -- The CXX compiler identification is AppleClang 17.0.0.17000604
  -- Detecting C compiler ABI info
  -- Detecting C compiler ABI info - done
  -- Check for working C compiler: /usr/bin/clang - skipped
  -- Detecting C compile features
  -- Detecting C compile features - done
  -- Detecting CXX compiler ABI info
  -- Detecting CXX compiler ABI info - done
  -- Check for working CXX compiler: /usr/bin/clang++ - skipped
  -- Detecting CXX compile features
  -- Detecting CXX compile features - done
  -- Found OpenMP_C: -Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include
  -- Found OpenMP_CXX: -Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include
  -- Found OpenMP: TRUE
  -- OpenMP is enabled.
  -- Performing Test HAVE_SSE
  -- Performing Test HAVE_SSE - Failed
  -- Performing Test HAVE_AVX
  -- Performing Test HAVE_AVX - Failed
  -- Performing Test HAVE_AVX2
  -- Performing Test HAVE_AVX2 - Failed
  -- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
  -- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Failed
  -- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
  -- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Failed
  -- Performing Test COMPILER_HAS_DEPRECATED_ATTR
  -- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Failed
  -- Performing Test COMPILER_HAS_DEPRECATED
  -- Performing Test COMPILER_HAS_DEPRECATED - Failed
  -- Found PythonInterp: /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/bin/python (found suitable version "3.13.12", minimum required is "3.8")
  -- Found PythonLibs: /Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu/lib/libpython3.13.dylib
  -- Performing Test HAS_FLTO_THIN
  -- Performing Test HAS_FLTO_THIN - Failed
  -- Performing Test HAS_FLTO_AUTO
  -- Performing Test HAS_FLTO_AUTO - Failed
  -- Performing Test HAS_FLTO
  -- Performing Test HAS_FLTO - Failed
  -- Found pybind11: /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/pybind11/include (found version "3.0.4")
  -- Building Python extension module
  -- Python extension module configured
  --
  -- Configuration:
  -- --------------------------------------
  -- Build type                : Release
  -- Compiler flags            :
  -- Compiler c debug flags    : -g
  -- Compiler c release flags  : -O3 -DNDEBUG
  -- Compiler c min size flags : -Os -DNDEBUG
  -- Compiler c flags          :  -DNOHAVE_AVX2
  -- OpenMP version            :
  -- OpenMP flags              : -Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include
  -- Configuring done (1.7s)
  -- Generating done (0.0s)
  -- Build files have been written to: /var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/build
  *** Building project with Ninja...

  [stderr]
  2026-04-22 16:48:17,460 - scikit_build_core - WARNING - cmake should not be in build-system.requires - scikit-build-core will inject it as needed
  2026-04-22 16:48:17,617 - scikit_build_core - INFO - RUN: /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/cmake/data/bin/cmake -E capabilities
  2026-04-22 16:48:18,458 - scikit_build_core - INFO - CMake version: 4.3.1
  2026-04-22 16:48:18,459 - scikit_build_core - INFO - Implementation: cpython darwin on arm64
  2026-04-22 16:48:18,466 - scikit_build_core - DEBUG - MACOSX_DEPLOYMENT_TARGET not set, using 26.0
  2026-04-22 16:48:18,466 - scikit_build_core - INFO - Build directory: /private/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/build
  2026-04-22 16:48:18,473 - scikit_build_core - DEBUG - cmake.modules: []
  2026-04-22 16:48:18,473 - scikit_build_core - DEBUG - cmake.prefix: []
  2026-04-22 16:48:18,474 - scikit_build_core - DEBUG - cmake.root: {}
  2026-04-22 16:48:18,474 - scikit_build_core - DEBUG - SITE_PACKAGES: /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages
  2026-04-22 16:48:18,488 - scikit_build_core - DEBUG - Default generator: Ninja
  2026-04-22 16:48:18,509 - scikit_build_core - INFO - RUN: /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/bin/ninja --version
  2026-04-22 16:48:18,908 - scikit_build_core - INFO - Ninja version: 1.13.0
  2026-04-22 16:48:18,909 - scikit_build_core - DEBUG - CMAKE_GENERATOR: Using ninja: /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/bin/ninja
  2026-04-22 16:48:18,909 - scikit_build_core - DEBUG - libdir/(ld)library: /Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu/lib/libpython3.13.a is not a real file!
  2026-04-22 16:48:18,909 - scikit_build_core - DEBUG - Can't find a Python library, got libdir=/Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu/lib, ldlibrary=libpython3.13.a, multiarch=darwin, masd=None
  2026-04-22 16:48:18,912 - scikit_build_core - DEBUG - /var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/build/CMakeInit.txt:
    set(SKBUILD [===[2]===] CACHE STRING "" FORCE)
    set(SKBUILD_CORE_VERSION [===[0.12.2]===] CACHE STRING "" FORCE)
    set(SKBUILD_PROJECT_NAME [===[kalign_python]===] CACHE STRING "" FORCE)
    set(SKBUILD_PROJECT_VERSION [===[3.5.1]===] CACHE STRING "" FORCE)
    set(SKBUILD_PROJECT_VERSION_FULL [===[3.5.1]===] CACHE STRING "" FORCE)
    set(PYTHON_EXECUTABLE [===[/Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/bin/python]===] CACHE PATH "" FORCE)
    set(PYTHON_INCLUDE_DIR [===[/Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu/include/python3.13]===] CACHE PATH "" FORCE)
    set(Python_EXECUTABLE [===[/Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/bin/python]===] CACHE PATH "" FORCE)
    set(Python_ROOT_DIR [===[/Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu]===] CACHE PATH "" FORCE)
    set(Python_INCLUDE_DIR [===[/Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu/include/python3.13]===] CACHE PATH "" FORCE)
    set(Python_FIND_REGISTRY [===[NEVER]===] CACHE STRING "" FORCE)
    set(Python3_EXECUTABLE [===[/Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/bin/python]===] CACHE PATH "" FORCE)
    set(Python3_ROOT_DIR [===[/Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu]===] CACHE PATH "" FORCE)
    set(Python3_INCLUDE_DIR [===[/Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu/include/python3.13]===] CACHE PATH "" FORCE)
    set(Python3_FIND_REGISTRY [===[NEVER]===] CACHE STRING "" FORCE)
    set(SKBUILD_SOABI [===[cpython-313-darwin]===] CACHE STRING "" FORCE)
    set(SKBUILD_SABI_COMPONENT [===[]===] CACHE STRING "" FORCE)
    set(SKBUILD_SABI_VERSION [===[]===] CACHE STRING "" FORCE)
    set(SKBUILD_PLATLIB_DIR [===[/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/wheel/platlib]===] CACHE PATH "" FORCE)
    set(SKBUILD_DATA_DIR [===[/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/wheel/data]===] CACHE PATH "" FORCE)
    set(SKBUILD_HEADERS_DIR [===[/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/wheel/headers]===] CACHE PATH "" FORCE)
    set(SKBUILD_SCRIPTS_DIR [===[/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/wheel/scripts]===] CACHE PATH "" FORCE)
    set(SKBUILD_NULL_DIR [===[/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/wheel/null]===] CACHE PATH "" FORCE)
    set(SKBUILD_METADATA_DIR [===[/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/wheel/metadata]===] CACHE PATH "" FORCE)
    set(SKBUILD_STATE [===[wheel]===] CACHE STRING "" FORCE)
    set(CMAKE_PREFIX_PATH [===[/Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages]===] CACHE PATH "" FORCE)
    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE "BOTH" CACHE PATH "")
  2026-04-22 16:48:18,912 - scikit_build_core - DEBUG - RUNENV:
    CC='clang'
    CLICOLOR='1'
    CMAKE_GENERATOR='Ninja'
    COLORFGBG='7;0'
    COLORTERM='truecolor'
    COMMAND_MODE='unix2003'
    CONDA_DEFAULT_ENV='openfold3:openfold3-cpu'
    CONDA_ENV_SHLVL_2_CONDA_DEFAULT_ENV='base'
    CONDA_ENV_SHLVL_2_CONDA_PREFIX='/Users/jennifer/miniforge3'
    CONDA_EXE='/Users/jennifer/miniforge3/bin/conda'
    CONDA_PREFIX='/Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu'
    CONDA_PROMPT_MODIFIER='(base) '
    CONDA_PYTHON_EXE='/Users/jennifer/miniforge3/bin/python'
    CONDA_SHLVL='2'
    CXX='clang++'
    GSETTINGS_SCHEMA_DIR='/Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu/share/glib-2.0/schemas'
    GSETTINGS_SCHEMA_DIR_CONDA_BACKUP=''
    HOME='/Users/jennifer'
    HOMEBREW_CELLAR='/opt/homebrew/Cellar'
    HOMEBREW_PREFIX='/opt/homebrew'
    HOMEBREW_REPOSITORY='/opt/homebrew'
    INFOPATH='/opt/homebrew/share/info:'
    ITERM_PROFILE='Default'
    ITERM_SESSION_ID='w1t0p0:C0712BA9-00E0-46BB-857B-8E683ED96FF6'
    KMP_DUPLICATE_LIB_OK='TRUE'
    LANG='en_US.UTF-8'
    LC_TERMINAL='iTerm2'
    LC_TERMINAL_VERSION='3.6.9'
    LOGNAME='jennifer'
    LSCOLORS='ExGxBxDxCxEgEdxbxgxcxd'
    LaunchInstanceID='F39B920B-B30A-4BA0-887A-1E656C65D29B'
    NERSC='jnwei22@perlmutter.nersc.gov'
    OLDPWD='/Users/jennifer'
    OSLogRateLimit='64'
    PATH='/Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/bin:/Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu/bin:/Users/jennifer/.pixi/bin:/Users/jennifer/google-cloud-sdk/bin:/Users/jennifer/miniforge3/bin:/Users/
  jennifer/miniforge3/condabin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/
  codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/opt/pmk/env/global/bin:/Applications/iTerm.app/Contents/Resources/utilities:/Users/jennifer/.pixi/bin:/Users/jennifer/google-cloud-sdk/bin:/Users/
  jennifer/miniforge3/bin:/Users/jennifer/miniforge3/condabin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/
  com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/opt/pmk/env/global/bin:/Applications/iTerm.app/Contents/Resources/utilities'
    PIXI_ENVIRONMENT_NAME='openfold3-cpu'
    PIXI_ENVIRONMENT_PLATFORMS='osx-64,linux-aarch64,osx-arm64,linux-64'
    PIXI_EXE='/Users/jennifer/.pixi/bin/pixi'
    PIXI_IN_SHELL='1'
    PIXI_PROJECT_MANIFEST='/Users/jennifer/github/openfold3/pixi.toml'
    PIXI_PROJECT_NAME='openfold3'
    PIXI_PROJECT_ROOT='/Users/jennifer/github/openfold3'
    PIXI_PROJECT_VERSION='0.4.0'
    PIXI_PROMPT='(openfold3:openfold3-cpu) '
    PWD='/Users/jennifer/github/openfold3'
    PYTHONIOENCODING='utf-8:backslashreplace'
    SECURITYSESSIONID='186b6'
    SHELL='/bin/zsh'
    SHLVL='1'
    SQLITE_EXEMPT_PATH_FROM_VNODE_GUARDS='/Users/jennifer/Library/WebKit/Databases'
    SSH_AUTH_SOCK='/private/tmp/com.apple.launchd.K3LoMpiXhO/Listeners'
    TERM='xterm-256color'
    TERMINFO_DIRS='/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo'
    TERM_FEATURES='T3LrMSc7UUw9Ts3BFGsSyHNoSxFP'
    TERM_PROGRAM='iTerm.app'
    TERM_PROGRAM_VERSION='3.6.9'
    TERM_SESSION_ID='w1t0p0:C0712BA9-00E0-46BB-857B-8E683ED96FF6'
    TMPDIR='/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/'
    USER='jennifer'
    VIRTUAL_ENV='/Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx'
    XML_CATALOG_FILES='file:///Users/jennifer/miniforge3/etc/xml/catalog file:///etc/xml/catalog file:///Users/jennifer/github/openfold3/.pixi/envs/openfold3-cpu/etc/xml/catalog file:///etc/xml/catalog'
    XPC_FLAGS='0x0'
    XPC_SERVICE_NAME='0'
    _='/Users/jennifer/.pixi/bin/pixi'
    _CE_CONDA=''
    _CE_M=''
    __CFBundleIdentifier='com.googlecode.iterm2'
    __CF_USER_TEXT_ENCODING='0x1F5:0x0:0x0'
  2026-04-22 16:48:18,912 - scikit_build_core - INFO - RUN: /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/cmake/data/bin/cmake -S. -B/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/build
  -DCMAKE_BUILD_TYPE:STRING=Release -C/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/build/CMakeInit.txt -DCMAKE_INSTALL_PREFIX=/var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/wheel/platlib -DCMAKE_MAKE_PROGRAM=/Users/jennifer/Library/
  Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/bin/ninja -DBUILD_PYTHON_MODULE=ON -DBUILD_PYTHON_MODULE=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
  CMake Warning (dev) at /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/pybind11/share/cmake/pybind11/FindPythonLibsNew.cmake:101 (message):
    Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
    are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
    the cmake_policy command to set the policy and suppress this warning, or
    preferably upgrade to using FindPython, either by calling it explicitly
    before pybind11, or by setting PYBIND11_FINDPYTHON ON before pybind11.
  Call Stack (most recent call first):
    /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/pybind11/share/cmake/pybind11/pybind11Tools.cmake:44 (find_package)
    /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/pybind11/share/cmake/pybind11/pybind11Common.cmake:237 (include)
    /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/pybind11/share/cmake/pybind11/pybind11Config.cmake:257 (include)
    CMakeLists.txt:212 (find_package)
  This warning is for project developers.  Use -Wno-dev to suppress it.

  CMake Deprecation Warning at /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/pybind11/share/cmake/pybind11/FindPythonLibsNew.cmake:110 (cmake_policy):
    The OLD behavior for policy CMP0148 will be removed from a future version
    of CMake.

    The cmake-policies(7) manual explains that the OLD behaviors of all
    policies are deprecated and that a policy should be set to OLD only under
    specific short-term circumstances.  Projects should be ported to the NEW
    behavior and not rely on setting a policy to OLD.
  Call Stack (most recent call first):
    /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/pybind11/share/cmake/pybind11/pybind11Tools.cmake:44 (find_package)
    /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/pybind11/share/cmake/pybind11/pybind11Common.cmake:237 (include)
    /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/pybind11/share/cmake/pybind11/pybind11Config.cmake:257 (include)
    CMakeLists.txt:212 (find_package)


  2026-04-22 16:48:20,697 - scikit_build_core - DEBUG - RUNENV - changes since last run only:

  2026-04-22 16:48:20,697 - scikit_build_core - INFO - RUN: /Users/jennifer/Library/Caches/rattler/cache/uv-cache/builds-v0/.tmpn9sttx/lib/python3.13/site-packages/cmake/data/bin/cmake --build /var/folders/66/7s26kmmx4590h5k2y9cmth640000gn/T/tmpztt8qj9u/build
  --target _core
  ninja: error: '/opt/homebrew/opt/libomp/lib/libomp.dylib', needed by '_core.cpython-313-darwin.so', missing and no known rule to make it

  *** CMake build failed

  hint: This usually indicates a problem with the package or the build environment.
Details

@sdvillal
Copy link
Copy Markdown
Contributor

Thanks for the info @jnwei. I suspect you have a system for which there is no precompiled kalign-python wheel and so pixi is trying to use the source distribution. This tries to compile and fails, finding cmake in your homebrew install but not finding there the needed openmp library. It is better that this fails, as it violates the environment isolation.

This highlights another risk for using kalign-python from pypi. If we look at what is available there, we see that there are wheels available:

  • from python 3.9 to 3.13 - so if we want to jump to python 3.14 we do need to build from source at the moment
  • only for macos >14 (Sonoma) - so we need to build from source for people who are on old macos versions, maybe your case.

Python 3.14 wheels are also not available for linux, so we might eventually see people complaining about it. I assume there is not an inherent incompatibility between python 3.14 and kalign-python, so we should ask upstream to create these wheels. About the macos compatibility, I am less knowledgeable if there is any easy path for wheels.

I would propose to document these constraints, open a new issue and then we have two options:

  • Wait for the conda-forge package to be accepted. It will be fully compatible, well isolated and cover the whole range of active python versions plus a wider range of macos versions.
  • Do allow to build in our environment, which sounds like fun and would also fix the issue with redundant openmp runtimes

I suggest to not block this PR and open a new one. I might give a try to the fun option if I find some bandwidth.

@jnwei
Copy link
Copy Markdown
Contributor

jnwei commented Apr 22, 2026

Thanks Santi, what you propose makes sense.

I wrote issue #192 with specifically the Apple Silicon issue, and we can discuss more about next steps there. I suspect it may be easier to wait for the conda-forge package of kalign-python.

Happy to proceed with merging this PR

@jandom jandom added safe-to-test Internal only label used to indicate PRs that are ready for automated CI testing. and removed safe-to-test Internal only label used to indicate PRs that are ready for automated CI testing. labels Apr 22, 2026
@jandom
Copy link
Copy Markdown
Collaborator Author

jandom commented Apr 23, 2026

The GHA errors because of a Dockerfile rename, everything is green when triggering manually

https://github.com/aqlaboratory/openfold-3/actions/runs/24785787396

@jandom jandom merged commit 0f6560b into main Apr 23, 2026
14 of 15 checks passed
@jandom jandom deleted the pixi-beta branch April 23, 2026 07:27
@jandom
Copy link
Copy Markdown
Collaborator Author

jandom commented Apr 23, 2026

@sdvillal – massive thanks for this, this is such a terrific enhancement

@jandom jandom restored the pixi-beta branch April 24, 2026 07:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe-to-test Internal only label used to indicate PRs that are ready for automated CI testing.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants