Fast Biobank-Scale Population Genetics Clustering
ADAMIXTURE is a fast CPU/GPU implementation of ADMIXTURE for biobank-scale genetic clustering. .P and .Q outputs remain compatible with ADMIXTURE.
System requirements
Hardware & Platform compatibility
ADAMIXTURE runs cross-platform on Linux, macOS, and Windows, supporting CPU computation as well as GPU acceleration on NVIDIA GPUs (CUDA) and Apple Silicon (MPS).
Software requirements
We recommend creating a fresh Python 3.10+ virtual environment. For a faster installation experience, we highly recommend using uv.
As an example, using uv (recommended):
$ uv venv --python 3.10
$ source .venv/bin/activate
$ uv pip install adamixture
Installation Guide
The package can be installed using pip:
Basic Installation (CPU default)
Uses the pre-compiled C/Cython wheel and does not install PyTorch:
$ pip install adamixture
GPU Installation (NVIDIA CUDA / Apple Silicon MPS)
Includes PyTorch and Ninja for hardware-accelerated execution:
$ pip install "adamixture[gpu]"
The commands above use the binary wheel when one is available for the Python
version and platform. Installing directly from a source checkout (for example,
with pip install -e .) requires a local C/Cython build toolchain.
Running ADAMIXTURE
To train a model, simply invoke the following commands from the root directory of the project. For more info about all the arguments, please run adamixture --help. Note that BED, VCF, PGEN and BCF are supported.
Supported input files include:
- PLINK BED:
.bed,.bed.gz,.bed.zst, with.bim/.famsidecars that may also be plain,.gzor.zst. - PLINK PGEN:
.pgenor.pgen.zst, with.pvar/.psamsidecars that may be plain,.gzor.zst. - VCF:
.vcf,.vcf.gzand.vcf.zst. - BCF:
.bcf,.bcf.gzand.bcf.zst.
As an example, the following ADMIXTURE call
$ ./admixture snps_data.bed 8 -s 42
would be equivalent in ADAMIXTURE by running
$ adamixture -k 8 --data_path snps_data.bed --save_dir SAVE_PATH --name snps_data -s 42
By default, the following files will be output to the SAVE_PATH directory (the name parameter will be used to create the full filenames):
- A
.Pfile, similar to ADMIXTURE. - A
.Qfile, similar to ADMIXTURE. - A
.pngplot file containing the visualization of the inferred ancestry proportions (Q matrix).
Logs are printed to the stdout channel by default. If you want to save them to a file, you can use the command tee along with a pipe:
$ adamixture -k 8 ... | tee run.log
Running with multi-threading
To run ADAMIXTURE using multiple CPU threads, use the -t flag:
$ adamixture -k 8 --data_path data.bed --save_dir out/ --name test -t 8
Running with GPU acceleration
To leverage GPU acceleration (highly recommended for large datasets), use the --device flag:
- NVIDIA GPU (CUDA):
$ adamixture -k 8 --data_path data.bed --save_dir out/ --name test --device gpu
- macOS Apple Silicon (MPS):
$ adamixture -k 8 --data_path data.bed --save_dir out/ --name test --device mps
For a step-by-step guide on how to run a complete analysis workflow, see the 1000 Genomes Tutorial.
Multi-K Sweep
Instead of running ADAMIXTURE for a single K, you can automatically sweep over a range of K values using --min_k and --max_k. The data is loaded once, and each K is trained sequentially. K=1 is the no-structure null model and is a valid start for a sweep or a CV baseline:
$ adamixture --min_k 1 --max_k 10 --data_path snps_data.bed --save_dir SAVE_PATH --name snps_sweep
Cross-validation
Use --cv to estimate the optimal K by masking a fraction of genotype entries and measuring prediction error. → Full documentation
$ adamixture -k 8 --cv --data_path data.bed --save_dir out/ --name test
Plotting
By default, ADAMIXTURE automatically generates a png plot at 300 DPI without needing any additional flags. Following the method of Clumppling, it automatically aligns clusters across runs and K values. → Full documentation
Plots can include hierarchical population labels if you provide the arguments (--labels, --labels2, --labels3).
If you want to customize the format and resolution (e.g., to generate a PDF), use --plot (or --plot_single for individual per-K plots in multi-K sweeps):
-
Single K runs (
-k): Use--plot.$ adamixture -k 8 --data_path data.bed --save_dir out/ --name test --plot pdf 300
-
Multi-K sweeps (
--min_kand--max_k): Use--plotto configure the combined sweep plot (or--plot_singlefor individual plots per K).$ adamixture --min_k 2 --max_k 10 --data_path data.bed --save_dir out/ --name test --plot pdf 300
Projection Mode
Estimate ancestry proportions for new samples using a pre-trained, fixed P matrix (Q-only optimisation). K is detected automatically from P. → Full documentation
$ adamixture-project \
--data_path new_samples.bed \
--p_path trained_model/results.8.P \
--save_dir projection_out/ \
--name projected
Supervised Mode
Anchor the model with known population labels for a subset of samples while estimating Q freely for unlabeled ones. Labels use the same format as --labels (population name or -). → Full documentation
$ adamixture-supervised \
--data_path all_samples.bed \
--labels labels.txt \
--save_dir supervised_out/ \
--name supervised_run \
-k 8
Other options
All hyperparameters and flags can be explored with:
$ adamixture --help
Key arguments:
| Argument | Default | Description |
|---|---|---|
--init |
als |
Initialization method: SVD+ALS (als) or random EM priming (em). |
--tol |
0.1 |
Convergence tolerance for log-likelihood changes. |
--max_iter |
10000 |
Maximum optimization iterations. |
-t |
1 |
Number of CPU threads. |
-s |
42 |
Random seed. |
--device |
cpu |
Device to use: cpu, gpu, or mps. |
--chunk_size |
8192 |
Number of SNPs in chunk operations. |
--n_inits |
1 |
Number of independent initializations (keeps run with best log-likelihood). |
--chrom_mode |
autosomes |
Chromosome filter: autosomes keeps autosomes 1 to --autosomes; all keeps every chromosome. |
--autosomes |
22 |
Number of autosomes kept when --chrom_mode autosomes (equivalent to --specific_chrom 1 2 ... 22). |
--specific_chrom |
None |
List of specific chromosomes to analyze when --chrom_mode autosomes (overrides --autosomes). |
--no_freqs |
False |
Do not save the .P allele-frequency matrix. |
Algorithm note
The ADAMIXTURE paper introduced Adam-EM as an adaptive first-order optimizer for admixture inference. The package still includes this solver via --algorithm adamem.
In the current implementation, the default is --algorithm brqn. Empirical benchmarking showed that block relaxation with ZAL quasi-Newton acceleration, when paired with our improved SVD+ALS initialization, reaches high-quality solutions in fewer iterations and better wall-clock time. For that reason, BR-QN is the default solver, while Adam-EM remains available for experimentation and reproducibility. Adam-EM tuning parameters are documented in Troubleshooting and Tips.
Troubleshooting and Tips
Common issues and platform notes:
- macOS: Install
libompvia Homebrew (brew install libomp) before compiling. - Windows: Pre-compiled wheels are provided on PyPI (
pip install adamixture). If compiling from source (pip install -e .), install Build Tools for Visual Studio with Desktop development with C++. - CUDA: Set
CUDA_HOMEor installnvccvia Conda (conda install -c nvidia nvcc).
License
This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.
Cite
When using this software, please cite the following paper:
@article{saurina2026adamixture,
title={ADAMIXTURE: adaptive first-order optimization for biobank-scale genetic clustering},
author={Saurina-i-Ricos, Joan and Mas Montserrat, Daniel and Ioannidis, Alexander G.},
journal={Bioinformatics},
volume={42},
number={Supplement\_1},
pages={btag236},
year={2026},
doi={10.1093/bioinformatics/btag236},
url={https://doi.org/10.1093/bioinformatics/btag236}
}
Metadata
Release files for adamixture 1.8.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| adamixture-1.8.5.tar.gz | 21.7 MB | Details |
Built distributions (wheels)
Total release size: 170.8 MB
Release files / adamixture-1.8.5.tar.gz
| Download URL | adamixture-1.8.5.tar.gz |
|---|---|
| Size | 21.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ee64be662a991c9a45965854acbb207e2660c6fb65e2d1dde211c37e8e1264e7
|
|
BLAKE2b-256 checksum How to use checksums |
da0536e34ac564018980b139ad3d005b437a9edb979cff3d030b1426733aaca0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp312-cp312-win_amd64.whl
| Download URL | adamixture-1.8.5-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 12.2 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9599e424f2c150e496c1d1b9ddc7ccf8b8e94522ef07ba6c4cc8fe10445beb57
|
|
BLAKE2b-256 checksum How to use checksums |
8ba1e2b752237356c09145f6b1b06024f38026acd85190e097650be96af2d318
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | adamixture-1.8.5-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 12.7 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4c788a23e8dc20f94ce541f0206a4840849f08ea2af235d65ac089136dd15eec
|
|
BLAKE2b-256 checksum How to use checksums |
70ed921d73a8a2cd53c74df7e23ee3d9b1ca9211519b70036c36b906ebf5198e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp312-cp312-macosx_14_0_x86_64.whl
| Download URL | adamixture-1.8.5-cp312-cp312-macosx_14_0_x86_64.whl |
|---|---|
| Size | 12.3 MB |
| Tags | CPython 3.12 macOS 14.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
cd06d08a6e7d38112d31c57ba1ed5c8473b3a4a18641baac138a7a74c1b1b870
|
|
BLAKE2b-256 checksum How to use checksums |
65869d47b4c36197f5f7f06553f20b77716e7a2bd6eea9c27fe844dd21d2b12b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp312-cp312-macosx_14_0_arm64.whl
| Download URL | adamixture-1.8.5-cp312-cp312-macosx_14_0_arm64.whl |
|---|---|
| Size | 12.5 MB |
| Tags | CPython 3.12 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
90b62588601971c9b52e2d79573483a5ecbba7057269c75ff3687c6fb7602304
|
|
BLAKE2b-256 checksum How to use checksums |
e7dc5a14129be66745f99c711a27b269bfd6e33a09631897ee4b6a2963bcff25
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp311-cp311-win_amd64.whl
| Download URL | adamixture-1.8.5-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 12.2 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cd118f08c993462babb7706b17f3a8b95f7f58645c223ee5bfb70ba59eec16e9
|
|
BLAKE2b-256 checksum How to use checksums |
5cd2e3cfe5e27653372bb72df13cdaace10c4069ac64234804dc6a36aeea12bd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | adamixture-1.8.5-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 12.7 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
efc900f82c55b91516ddd269e30b336752b937b212fa47fbecd5fe1eac3d1016
|
|
BLAKE2b-256 checksum How to use checksums |
63eac96cf42609efae7567c4a81db4ea83077a77f23d6ce74698fe463748553b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp311-cp311-macosx_14_0_x86_64.whl
| Download URL | adamixture-1.8.5-cp311-cp311-macosx_14_0_x86_64.whl |
|---|---|
| Size | 12.3 MB |
| Tags | CPython 3.11 macOS 14.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
aef79d8806f2befdfab4ffd37c302e21a27625cb6514ef4a32929d30844cac3f
|
|
BLAKE2b-256 checksum How to use checksums |
b0e107504fc40f25b28e9770a4a4d4705f4e98d7d9df31fa2429f7cfc115fdb2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp311-cp311-macosx_14_0_arm64.whl
| Download URL | adamixture-1.8.5-cp311-cp311-macosx_14_0_arm64.whl |
|---|---|
| Size | 12.5 MB |
| Tags | CPython 3.11 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
930aebf48b648590d7f19e94ce2cec2d9d0bec0f8aeaf4bdbff858c43d8279d0
|
|
BLAKE2b-256 checksum How to use checksums |
3c6aa3e317c06ba7fbf64452bf1361a52d37ef20ac52b00e249a6d00f0d7f641
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp310-cp310-win_amd64.whl
| Download URL | adamixture-1.8.5-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 12.2 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
764874f7f753a29180748f473920ac14270ba43311afd78be219ba079c96dd25
|
|
BLAKE2b-256 checksum How to use checksums |
7994f3290a2a5f756918b1e5e9e30781709bf969f71715ccf027838c65d39709
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | adamixture-1.8.5-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 12.7 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
59b0dbe1f39df96f738a3a91e33e9f8ebf0c85f4dcdd47c2c22accb4c78cff69
|
|
BLAKE2b-256 checksum How to use checksums |
a0f080b5a6c64339a09aeaa61218a25872d83515ec0414f18ec710ed2b4f7a95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp310-cp310-macosx_14_0_x86_64.whl
| Download URL | adamixture-1.8.5-cp310-cp310-macosx_14_0_x86_64.whl |
|---|---|
| Size | 12.3 MB |
| Tags | CPython 3.10 macOS 14.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
e6f75173f067ea624cb55bd77a38bbbb52777c8cf3db37ac72b29a464029a7fb
|
|
BLAKE2b-256 checksum How to use checksums |
302bae26be738dbe59b0f3c03d6d1304fc9e0ba8c0853721d5ad03966cfd53f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / adamixture-1.8.5-cp310-cp310-macosx_14_0_arm64.whl
| Download URL | adamixture-1.8.5-cp310-cp310-macosx_14_0_arm64.whl |
|---|---|
| Size | 12.5 MB |
| Tags | CPython 3.10 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7e2d6504e43fc24c4f0b55a7b4d2661c02d35367bb6e0ae8f5c20629ba573e20
|
|
BLAKE2b-256 checksum How to use checksums |
5d494463864bc5c3ca5213784de59950f87f256e1a99f5ad34a8f0e32c0be774
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|