The BOLT-LMM software package currently consists of two main algorithms, the BOLT-LMM algorithm for mixed model association testing, and the BOLT-REML algorithm for variance components analysis (i.e., partitioning of SNP-heritability and estimation of genetic correlations).
Allocate an interactive session and run the program. Sample session (user input in bold):
[user@biowulf ~]$ sinteractive -c4 --mem=8g --gres=lscratch:10
salloc.exe: Pending job allocation 11198398
salloc.exe: job 11198398 queued and waiting for resources
salloc.exe: job 11198398 has been allocated resources
salloc.exe: Granted job allocation 11198398
salloc.exe: Waiting for resource configuration
salloc.exe: Nodes cn0852 are ready for job
srun: error: x11: no local DISPLAY defined, skipping
error: unable to open file /tmp/slurm-spank-x11.11198398.0
slurmstepd: error: x11: unable to read DISPLAY value
[user@cn0852 ~]$ cd /lscratch/$SLURM_JOB_ID
[user@cn0852 11198398]$ module load BOLT-LMM
[+] Loading BOLT-LMM v2.3.4 on cn0852
[user@cn0852 11198398]$ cp -r /usr/local/apps/BOLT-LMM/v2.3/example .
[user@cn0852 11198398]$ cp -r /usr/local/apps/BOLT-LMM/v2.3/tables .
[user@cn0852 11198398]$ cd example/
[user@cn0852 example]$ bolt \
--bfile=EUR_subset \
--remove=EUR_subset.remove \
--exclude=EUR_subset.exclude \
--phenoFile=EUR_subset.pheno.covars \
--phenoCol=PHENO \
--covarFile=EUR_subset.pheno.covars \
--covarCol=CAT_COV \
--qCovarCol=QCOV{1:2} \
--modelSnps=EUR_subset.modelSnps \
--lmm \
--LDscoresFile=../tables/LDSCORE.1000G_EUR.tab.gz \
--numThreads=${SLURM_CPUS_PER_TASK} \
--statsFile=example.stats \
--dosageFile=EUR_subset.dosage.chr17first100 \
--dosageFile=EUR_subset.dosage.chr22last100.gz \
--dosageFidIidFile=EUR_subset.dosage.indivs \
--statsFileDosageSnps=example.dosageSnps.stats \
--impute2FileList=EUR_subset.impute2FileList.txt \
--impute2FidIidFile=EUR_subset.impute2.indivs \
--statsFileImpute2Snps=example.impute2Snps.stats \
--dosage2FileList=EUR_subset.dosage2FileList.txt \
--statsFileDosage2Snps=example.dosage2Snps.stats \
2>&1 | tee example.log # log output written to stdout and stderr
+-----------------------------+
| ___ |
| BOLT-LMM, v2.3.4 /_ / |
| August 10, 2019 /_/ |
| Po-Ru Loh // |
| / |
+-----------------------------+
Copyright (C) 2014-2019 Harvard University.
Distributed under the GNU GPLv3 open source license.
Compiled with USE_SSE: fast aligned memory access
Compiled with USE_MKL: Intel Math Kernel Library linear algebra
Boost version: 1_58
Command line options:
bolt \
--bfile=EUR_subset \
--remove=EUR_subset.remove \
--exclude=EUR_subset.exclude \
--phenoFile=EUR_subset.pheno.covars \
--phenoCol=PHENO \
--covarFile=EUR_subset.pheno.covars \
--covarCol=CAT_COV \
--qCovarCol=QCOV{1:2} \
--modelSnps=EUR_subset.modelSnps \
--lmm \
--LDscoresFile=../tables/LDSCORE.1000G_EUR.tab.gz \
--numThreads=2 \
--statsFile=example.stats \
--dosageFile=EUR_subset.dosage.chr17first100 \
--dosageFile=EUR_subset.dosage.chr22last100.gz \
--dosageFidIidFile=EUR_subset.dosage.indivs \
--statsFileDosageSnps=example.dosageSnps.stats \
--impute2FileList=EUR_subset.impute2FileList.txt \
--impute2FidIidFile=EUR_subset.impute2.indivs \
--statsFileImpute2Snps=example.impute2Snps.stats \
--dosage2FileList=EUR_subset.dosage2FileList.txt \
--statsFileDosage2Snps=example.dosage2Snps.stats
Verifying contents of --dosage2FileList: EUR_subset.dosage2FileList.txt
Checking map file EUR_subset.dosage2.chr17first100.map and 2-dosage genotype file EUR_subset.dosage2.chr17first100.gz
Checking map file EUR_subset.dosage2.chr17second100.map and 2-dosage genotype file EUR_subset.dosage2.chr17second100
Checking map file EUR_subset.dosage2.chr22last100.map and 2-dosage genotype file EUR_subset.dosage2.chr22last100.gz
Setting number of threads to 4
fam: EUR_subset.fam
bim(s): EUR_subset.bim
bed(s): EUR_subset.bed
=== Reading genotype data ===
[...snip]
Total elapsed time for analysis = 36.6498 sec
[user@cn0852 example]$ exit
exit
salloc.exe: Relinquishing job allocation 11198398
salloc.exe: Job allocation 11198398 has been revoked.
[user@biowulf ~]$
Create a batch input file (e.g., run_example.sh in the example directory). For example:
#!/bin/bash
module load BOLT-LMM
bolt \
--bfile=EUR_subset \
--remove=EUR_subset.remove \
--exclude=EUR_subset.exclude \
--phenoFile=EUR_subset.pheno.covars \
--phenoCol=PHENO \
--covarFile=EUR_subset.pheno.covars \
--covarCol=CAT_COV \
--qCovarCol=QCOV{1:2} \
--modelSnps=EUR_subset.modelSnps \
--lmm \
--LDscoresFile=../tables/LDSCORE.1000G_EUR.tab.gz \
--numThreads=2 \
--statsFile=example.stats \
--dosageFile=EUR_subset.dosage.chr17first100 \
--dosageFile=EUR_subset.dosage.chr22last100.gz \
--dosageFidIidFile=EUR_subset.dosage.indivs \
--statsFileDosageSnps=example.dosageSnps.stats \
--impute2FileList=EUR_subset.impute2FileList.txt \
--impute2FidIidFile=EUR_subset.impute2.indivs \
--statsFileImpute2Snps=example.impute2Snps.stats \
--dosage2FileList=EUR_subset.dosage2FileList.txt \
--statsFileDosage2Snps=example.dosage2Snps.stats \
2>&1 | tee example.log # log output written to stdout and stderr
Submit this job using the Slurm sbatch command.
sbatch [--cpus-per-task=#] [--mem=#] run_example.sh
Note: For test runs: Copy /usr/local/apps/BOLT-LMM/v2.3/example and /usr/local/apps/BOLT-LMM/v2.3/tables to your local directory. Under the example directory, run_example.sh and run_example_reml2.sh are batch scripts that can be used in slurm
Create a swarmfile (e.g. BOLT-LMM.swarm). For example:
bolt --bfile=AFR_subset ... bolt --bfile=AMR_subset ... bolt --bfile=EAS_subset ... bolt --bfile=EUR_subset ... bolt --bfile=SAS_subset ...
Submit this job using the swarm command.
swarm -f BOLT-LMM.swarm [-g #] [-t #] --module BOLT-LMMwhere
| -g # | Number of Gigabytes of memory required for each process (1 line in the swarm command file) |
| -t # | Number of threads/CPUs required for each process (1 line in the swarm command file). |
| --module BOLT-LMM | Loads the BOLT-LMM module for each subjob in the swarm |