Bonjour,
J'utilise le programme Picard MarkDuplicates sur des fichiers .bam dont la taille est comprise entre 19 GB et 32 GB. Après avoir échoué au niveau de mon pipeline snakemake, j'ai tenté d'utiliser ce programme directement dans un script réclamant 128GB de RAM et lancé en sbatch. Voici l'entête du script :
#!/bin/bash
###################configuration slurm##############################
#SBATCH -A invalbo
#SBATCH --job-name=markdup
#SBATCH --time=6-23:00:00
#SBATCH -p long
#SBATCH -N 1
#SBATCH -n 1
#SBATCH --cpus-per-task 26
#SBATCH --mem=128GB
#SBATCH -o Cluster_logs/%x-%j-%N.out
#SBATCH -e Cluster_logs/%x-%j-%N.err
#SBATCH --mail-user=loic.talignani@ird.fr
#SBATCH --mail-type=ALL
###################################################################
Je ne suis d'ailleurs pas sûr de pouvoir réclamer autant de mémoire sur la partition long
et que les 128 GB soient bien alloués. Je sais également que les 26 cpus réclamés sont inutiles. Tout conseil est le bienvenu.
Et voici la commande utilisée :
module load picard/2.23.5
picard MarkDuplicates -CREATE_INDEX TRUE -VALIDATION_STRINGENCY SILENT -I results/02_Mapping/Sample_8_EKDN230051730-1A_H2F5FDSXC_L1_bwa_sorted.bam -O results/02_Mapping/Sample_8_EKDN230051730-1A_H2F5FDSXC_L1_bwa_sorted-mark-dup.bam -M results/02_Mapping/Sample_8_EKDN230051730-1A_H2F5FDSXC_L1_bwa_sorted-mark-dup_metrics.txt > results/11_Reports/markduplicatesspark/Sample_8_EKDN230051730-1A_H2F5FDSXC_L1_bwa_sorted-mark-dup.log 2>&1
Dans les logs, la première ligne indique :
Start of doWork freeMemory: 530666392; totalMemory: 536870912; maxMemory: 2147483648
J'ai l'impression de ne pas avoir 128GB mais bien les 2GB du cpu.
Puis j'ai l'erreur suivante :
[Wed Feb 21 17:36:18 UTC 2024] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 11.26 minutes.
Runtime.totalMemory()=2147483648
To get help, see http://broadinstitute.github.io/picard/index.html#GettingHelp
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.HashMap.resize(HashMap.java:699)
at java.base/java.util.HashMap.putVal(HashMap.java:658)
at java.base/java.util.HashMap.put(HashMap.java:607)
at htsjdk.samtools.CoordinateSortedPairInfoMap.ensureSequenceLoaded(CoordinateSortedPairInfoMap.java:134)
at htsjdk.samtools.CoordinateSortedPairInfoMap.remove(CoordinateSortedPairInfoMap.java:86)
at picard.sam.markduplicates.util.DiskBasedReadEndsForMarkDuplicatesMap.remove(DiskBasedReadEndsForMarkDuplicatesMap.java:61)
at picard.sam.markduplicates.MarkDuplicates.buildSortedReadEndLists(MarkDuplicates.java:559)
at picard.sam.markduplicates.MarkDuplicates.doWork(MarkDuplicates.java:257)
at picard.cmdline.CommandLineProgram.instanceMain(CommandLineProgram.java:301)
at picard.cmdline.PicardCommandLine.instanceMain(PicardCommandLine.java:103)
at picard.cmdline.PicardCommandLine.main(PicardCommandLine.java:113)
Quelles solutions préconisez-vous ? Passer sur Bigmem ?
Merci d'avance pour l'aide apportée.
Cordialement,
EDIT : j'ai ajouté l'option -Xmx32g à la commande picard. J'ai vu immédiatement que cela avait été pris en compte dans les logs :
Start of doWork freeMemory: 51057496; totalMemory: 58720256; maxMemory: 34359738368
Le job est toujours en cours.