Fix CPU-baseline SIGILLs under Rosetta 2 (apt augustus + pytantan no-SIMD) - #70
Merged
Conversation
The bioconda augustus 3.5.0 binary is built with a modern x86_64 microarch baseline (AVX2/BMI2) and SIGILLs (rc=-4) under Rosetta 2 on Apple Silicon, and on pre-Haswell x86_64 hardware. This caused every augustus invocation inside the linux/amd64 docker image to silently die when run on a Mac, manifesting downstream as a buscolite run with 0 hits across 6,654 models. Switch the Docker image to Ubuntu 24.04 (noble) and install augustus + augustus-data from apt — noble ships augustus 3.5.0+dfsg built against the generic x86_64 baseline, so it runs on every host the image can land on (real amd64 and Rosetta 2 alike). To keep conda from pulling augustus back in transitively, drop it from the conda dependencies and move buscolite to pypi-dependencies (its bioconda recipe hard-depends on augustus; its pypi wheel does not). On osx-arm64 augustus is not needed at all — the funannotate2 CLI is exercised on Mac via the dockerized image. AUGUSTUS_CONFIG_PATH is repointed at /usr/share/augustus/config, which is where the apt package installs the species/model tree. funannotate2's config.py derives AUGUSTUS_BASE from that, resolving the scripts dir to /usr/share/augustus/scripts where new_species.pl, optimize_augustus.pl, etc. live. Also re-enables the augustus PPX self-test in train.py:buscolite() (it had been suppressed with check_augustus=False); paired with the companion buscolite change that classifies signal deaths with a Rosetta/AVX hint, a future binary mismatch will now fail loudly at the first augustus call instead of silently producing 0 hits. - Dockerfile: bump UBUNTU_VERSION 22.04 -> 24.04, apt-install augustus + augustus-data in the final stage, repoint AUGUSTUS_CONFIG_PATH. - pixi.toml: drop augustus from [dependencies], move buscolite from [dependencies] to [pypi-dependencies]. - pixi.lock: regenerated; zero augustus entries, buscolite now from pypi. - funannotate2/train.py: remove check_augustus=False override.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The bioconda
augustus3.5.0 binary is built with a modern x86_64 microarch baseline (AVX2/BMI2) and SIGILLs (rc=-4) under Rosetta 2 on Apple Silicon and on pre-Haswell x86_64 hardware. Inside thelinux/amd64docker image this caused everyaugustusinvocation on a Mac to silently die, manifesting downstream as a buscolite run with 0 hits across 6,654 BUSCO models.This PR switches the Docker image to install
augustusfrom Ubuntuaptinstead of bioconda. Ubuntu noble shipsaugustus 3.5.0+dfsgbuilt against the generic x86_64 baseline, so it runs on every host the image can land on (realamd64and Rosetta 2 alike).Changes
DockerfileUBUNTU_VERSION22.04->24.04(noble — required for augustus 3.5.0 from apt; jammy only has 3.4.0).apt-install augustus augustus-datain the final stage.AUGUSTUS_CONFIG_PATHto/usr/share/augustus/config.funannotate2/config.pyauto-derivesAUGUSTUS_BASE=/usr/share/augustus/scripts, where the apt package installsnew_species.pl,optimize_augustus.pl, etc.pixi.tomlaugustusfrom[dependencies].buscolitefrom[dependencies]to[pypi-dependencies]. Its bioconda recipe hard-depends onaugustus; its PyPI wheel does not. This prevents conda from transitively pulling augustus back in.osx-arm64augustus is no longer installed at all — the funannotate2 CLI is exercised on Mac via the dockerized image, so this is intentional.pixi.lockaugustusentries;buscolite-26.4.22-py3-none-any.whlnow from PyPI on bothlinux-64andosx-arm64.funannotate2/train.pybuscolite()by removing thecheck_augustus=Falseoverride. Paired with the companion buscolite PR (nextgenusfs/buscolitediagnose-augustus-sigill) that classifies signal deaths with a Rosetta/AVX hint, a future binary mismatch will now fail loudly at the first augustus call instead of silently producing 0 hits.Verification
pixi installsucceeds onosx-arm64.buscoliteimports from.pixi/envs/default/lib/python3.11/site-packages/buscolite..pixi/envs/default/bin/.Related
diagnose-augustus-sigill.0f39d033).Pull Request opened by Augment Code with guidance from the PR author