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.7
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.7.tar.gz | 21.7 MB | Details |
Built distributions (wheels)
Total release size: 170.9 MB
Release files / adamixture-1.8.7.tar.gz
| Download URL | adamixture-1.8.7.tar.gz |
|---|---|
| Size | 21.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fbd93a171310c9c47f09fff1e6c008bb9d989378a2a62cb333ad6a2ee6d2f309
|
|
BLAKE2b-256 checksum How to use checksums |
2133b863a0de8771835d9a37d69e621535eb580d45f0b47e729489921d8924fe
|
| 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.7-cp312-cp312-win_amd64.whl
| Download URL | adamixture-1.8.7-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 12.2 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3606a368bcd257683526866485046db8049a665f8c45a134a879527e01adea58
|
|
BLAKE2b-256 checksum How to use checksums |
efc575edc86a571206f1a6cd661d12a39b59462db5db5a8d356ea09386bbaa32
|
| 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.7-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | adamixture-1.8.7-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 |
6fd85cbffb4480a601a385b87d71fb0424a35c107b896ba4b221227f6fcca1ec
|
|
BLAKE2b-256 checksum How to use checksums |
1f84d1feabbacab15b48e10458ee85b25931d281411401a8dd1ecb279f8ee4e5
|
| 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.7-cp312-cp312-macosx_14_0_x86_64.whl
| Download URL | adamixture-1.8.7-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 |
2af7f79e00d3409574df65f855c693adbca3ddbc869f437e35b5b4736e46b616
|
|
BLAKE2b-256 checksum How to use checksums |
a49b2376acd9df0530f3801dcd62c5b170dbd4cbf369a420fca714acde6a9b00
|
| 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.7-cp312-cp312-macosx_14_0_arm64.whl
| Download URL | adamixture-1.8.7-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 |
ae8f68baaad2397731a956a38462990046064bdc9468badad069d750c0d1787a
|
|
BLAKE2b-256 checksum How to use checksums |
acb7f42cd92e84c1080e43df9079b0deb6f86564e4dd5745d5eb8d64f47e1295
|
| 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.7-cp311-cp311-win_amd64.whl
| Download URL | adamixture-1.8.7-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 12.2 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ee7f744a7c95555d4cf6cec9a7914289489eb2b20a1615f660e570ec73a055a6
|
|
BLAKE2b-256 checksum How to use checksums |
fffec23f20c2199f07b587e9ccfa40fc4107cc23bdde3839181deb2fbf1a8586
|
| 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.7-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | adamixture-1.8.7-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 |
3b3cca90f5d6aa8c556e85373f3bcfd7df9a1811a0abf265b4357a988dfcd0f1
|
|
BLAKE2b-256 checksum How to use checksums |
ba96ea4041b6a1819228686aa1c69c4d60dcb7ba0f33cc3c69789dfe28f007ba
|
| 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.7-cp311-cp311-macosx_14_0_x86_64.whl
| Download URL | adamixture-1.8.7-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 |
1551d88cef6d960aa4262fbba753fa3e4a09884d13f0d4b3c40a509f46604726
|
|
BLAKE2b-256 checksum How to use checksums |
10ba76d6ddccee02867f76f8fbd09b24cc05f5e3e8f549c1da5d97583bfedb29
|
| 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.7-cp311-cp311-macosx_14_0_arm64.whl
| Download URL | adamixture-1.8.7-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 |
3496402aabb909571a9b69960c7b1bd46efec1bfbb95a09a0d9ea15e440fca85
|
|
BLAKE2b-256 checksum How to use checksums |
7d821deae6a52474aba5067da3255870cb4df9c64bc4cc99a1eef3c6b27b80d6
|
| 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.7-cp310-cp310-win_amd64.whl
| Download URL | adamixture-1.8.7-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 12.2 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
663716db1798e9db1fb0e2b0692ace125a45c732ac3c7230005d8b2cd58dc2a5
|
|
BLAKE2b-256 checksum How to use checksums |
ab32f0ecb0b8b2cc0d8c1396dbcd63ea09fbaa42b77a14ce99ab17f844eb051b
|
| 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.7-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | adamixture-1.8.7-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 |
9478d503adae32c18bd27539f7c77f37cde542501502384c67a3e1fc50aa4576
|
|
BLAKE2b-256 checksum How to use checksums |
2cf79d7f3403a7ea3e2a395d588316af90d464ab34aa582abcd1839bf6fd1ea5
|
| 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.7-cp310-cp310-macosx_14_0_x86_64.whl
| Download URL | adamixture-1.8.7-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 |
1f5f8b8dde6938af031c95a79a77aed8305593f3bc3bbe5c8e6f4eb88740711f
|
|
BLAKE2b-256 checksum How to use checksums |
8e130d0c54fedd1a733956853dd05e076f54606efff32d378fbe3797e3efb2ba
|
| 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.7-cp310-cp310-macosx_14_0_arm64.whl
| Download URL | adamixture-1.8.7-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 |
6a75b9ba87c1e70c8eeaf9fb6540e18e60b0e5e51043adfafe1b018f5bcf18f2
|
|
BLAKE2b-256 checksum How to use checksums |
cacd2fd8f2a562a480d42d40197d018e507bc478a728d8a5445e07102cd49546
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|