Beast et java.lang.OutOfMemoryError

Bonjour,

J'essaye de faire tourner beast2 sur le cluster avec un gros fichier xml (2.3G). J'obtiens le message d'erreur "java.lang.OutOfMemoryError: Required array length 2147483639 + 18472458 is too large". J'ai voulu augmenter la mémoire de java, en suivant la documentation de Beast (Increasing Memory Usage — this site is deprecated: goto https://www.beast2.org/ for up-to-date information | BEAST2) mais je ne trouve pas où est localisé le fichier beast.jar sur le cluster.

Y a-t-il un moyen pour augmenter la mémoire de beast sur le cluster ?

Bonne fin de semaine,

Pierre-Michel

Bonjour,

Sur l'IFB, beast2 est encapsulé dans un container singularity.
beast est un script (launcher) dans l'image qui va lui-même lancer la commande java qui va bien (java [...] launcher.jar [...]).
Et malheureusement les paramètres tel que la mémoire de le VM java (-Xmx...) sont specifier en dur et non modifiable via des options.

Je vois propose donc de contourner le problème en lançant vous-même la commande java.
La ligne de commande étant un peu longue, peut-être faire un alias, comme suit:

$ alias beast2='singularity exec /shared/ifbstor1/software/singularity/images/beast2-2.7.6.sif /usr/local/beast/jre/bin/java -Dlauncher.wait.for.exit=true -Xss256m -Xmx8g -Djava.library.path=/usr/local/beagle-lib/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/.singularity.d/libs:/usr/local/lib:/usr/local/beast/jre/lib/amd64 -Duser.language=en -cp /usr/local/beast/lib/launcher.jar beast.pkgmgmt.launcher.BeastLauncher'

$ beast2 -help
  Usage: beast [-window] [-options] [...]

Vous pouvez alors changer les valeurs mémoires alloués à java (par défaut: -Xss256m et -Xmx8g)

Dites-nous si ca fonctionne.

Bonjour,

Merci pour votre retour. J'ai fait l'alias mais quand j'exécute mon script avec sbatch (commande dans mon .sh : beast2 -beagle_GPU -beagle_order 1 mon_fichier.xml), j'obtiens le message d'erreur suivant: /var/spool/slurm/slurmd/job46071651/slurm_script: line 21: beast2: command not found

Pourtant, l'alias semble avoir bien fonctionné puisque la commande beast2 -help fonctionne dans le terminal... Quelque chose m'échappe...

Pierre-Michel

Il faut probablement refaire l'alias dans votre script.

En effet, lorsqu'on soumet un job, toutes les variables d'environnement sont potentiellement réinitialisé. Il faut donc charger les modules nécessaires et refaire l'alias dans le script.

J'obtiens toujours le même message d'erreur (beast2 command not find), en mettant l'alias dans mon script... Est-ce normal que beast2 -help retourne "Usage: beast [...]", et non "Usage: beast2 [..]"?

beast2 est le nom de l'alias (pas de l'utilitaire) donc le retour beast est normal.

Dans ce cas, essayer simplement en faisant appel à la commande complète (tout en changeant les paramètres mémoire) et en ajoutant les paramètres:

singularity exec /shared/ifbstor1/software/singularity/images/beast2-2.7.6.sif /usr/local/beast/jre/bin/java -Dlauncher.wait.for.exit=true -Xss256m -Xmx8g -Djava.library.path=/usr/local/beagle-lib/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/.singularity.d/libs:/usr/local/lib:/usr/local/beast/jre/lib/amd64 -Duser.language=en -cp /usr/local/beast/lib/launcher.jar beast.pkgmgmt.launcher.BeastLauncher

Ou via l’utilisation de variable:

$ BEAST='singularity exec /shared/ifbstor1/software/singularity/images/beast2-2.7.6.sif /usr/local/beast/jre/bin/java -Dlauncher.wait.for.exit=true -Xss256m -Xmx8g -Djava.library.path=/usr/local/beagle-lib/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/.singularity.d/libs:/usr/local/lib:/usr/local/beast/jre/lib/amd64 -Duser.language=en -cp /usr/local/beast/lib/launcher.jar beast.pkgmgmt.launcher.BeastLauncher'

$ ${BEAST} -help
  Usage: beast [-window] [-options] [...]

Merci beaucoup, ça fonctionne sans l'allias. J'ai donc augmenté les options -Xss et -Xmx avec plusieurs valeurs mais j'obtiens toujours le message d'erreur java.lang.OutOfMemoryError: Required array length 2147483639 + 17106020 is too large...

P'têtre réessayer en doublant la mémoire alloué à java à chaque essai ?

En fait je pense que j'avais trop d'isolats (96 avec un génome de 41Mb). J'ai réduit mon jeu de données et beast à fonctionné sans problème.

Ca marche. Merci pour ce retour.