guppy_basecaller

Bonjour,

Mon utilisateur est: vmesaschein.
Je souhaite faire une analyse de séquence (Metagenomic Using Oxford Nanopore Sequencing), Le nombre de fichiers au format FAST5 obtenus à partir d'une flow cell a été de 494, je fais un test avec 2 de ces fichiers en utilisant guppy_basecaller sur le Cluster IFB Core et avec les paramètres suivants :

#SBATCH --partition=fast
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --mem-per-cpu=8GB 

Cette étape n'est pas encore terminée et cela a pris 16 heures, je voudrais savoir si vous pouvez me guider pour une analyse avec ceux 494 fichiers si c'est possible de le faire et quels paramètres je pourrais utiliser.

Merci pour votre aide.
Bien cordialement,

Bonjour,

Je ne vois pas le job dont vous parlez.
Etes-vous sûr d'utiliser l'IFB Core Cluster ? Et non celui d'une autre plateforme ?
Pouvez-vous nous donner la ligne de commande exécuté pour lancer votre job ?
Pouvez-vous nous donner le jobid ?

Bonjour,

Oui, Je précise, le job a été envoyé le 05/01/2023. Jobid: 30379735.
La ligne de commande exécuté:

#SBATCH --job-name=demojob
#SBATCH --partition=fast
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --mem-per-cpu=8GB
#SBATCH --account=c_butyricum_clinical_isolates

Output

#SBATCH --output=/shared/home/vmesaschein/demojob.out

module load guppy/6.1.1-gpu

guppy_basecaller -i /shared/projects/c_butyricum_clinical_isolates/ -s /shared/projects/c_butyricum_clinical_isolates/OUTPUTMINION --flowcell FLO-MIN106 --kit SQK-LSK109

Bien cordialement,

Plusieurs remarques:

  • Vous utilisez le module guppy pour gpu (guppy/6.1.1-gpu). Mais il faudrait alors utiliser des noeuds GPU (en nous demandant l'accès à la partition "gpu" correspondante). Les noeuds de calcul standard n'étant pas équipé de carte GPU.
    Dans un premier temps, peut-être simplement essayer avec le module pour cpu (guppy/6.1.1-cpu) ?
  • je ne vois aucun job de 16h (ou de jobs en cours)
    Le job 30379735 n'a duré que quelques secondes.
    Le job 30379986 a été annulé puisque il a duré plus de 24h (pour les jobs durant plus de 24h, il faut utiliser la partition long). Mais ce job n'a pas utilisé de CPU (j'imagine qu'il cherche un GPU).
    Le job 30664641 n'a duré que quelques minutes
  • Une fois un job terminé, pour analyser les ressources utilisé (mémoire, cpu), je vous invite à utiliser la commande seff <jobid>.

Je vous laisse le soin de réessayer avec le module guppy/6.1.1-cpu et revenir vers nous si besoin.

1 « J'aime »

Guppy sait gérer les cartes graphiques, dites "GPU"

#SBATCH --partition=gpu
#SBATCH --gres=gpu:1g.5gb:1
#SBATCH --cpus-per-task=1
#SBATCH --mem=8GB 


module avail guppy/6.1.1-gpu
guppy_basecaller [...] --device "cuda:$CUDA_VISIBLE_DEVICES"
  • --partition=gpu : la partition qui permet d'accéder aux cartes GPU. Mais nous devons vous y autoriser avant. Faites nous signe :wave:
  • --gres=gpu:1g.5gb:1 : 1g.5gb:1 est un profil de carte. Vous pourrez augmenter sur d'autres profils disponibles au besoin
  • $CUDA_VISIBLE_DEVICES : va donner le numéro de la carte GPU que Guppy pour utiliser

Je ne suis pas sûr à 100% mais c'est un sujet qui m'intéresse car j'ai une utilisatrice sur la même voie sur la plateforme ABiMS.

2 « J'aime »

Je vous remercie pour vos réponses.
Comme Guppy est très lent sur le CPU, je voudrais essayer le GPU.
Pourriez-vous m'autoriser à l'utiliser ?

Bien cordialement,

Pouvez-vous faire un test avec les CPU avant ?

Bonjour,

Le test CPU est toujours en cours depuis 2 jours. JobID: 31467375. J'ai testé avec seulement 2 fichiers FAST5.

Bonjour,

Je vous ai donnée accès la partition GPU.

Par contre, je vous invite à tester sur un petit jeu de données (pour vérifier que tout fonctionne bien et le bon usage des ressources).

Sur le job en cours actuellement, vous avez demandé qu'un seul CPU mais on observe que guppy_basecaller lance plus de 10 process (slurm_script───guppy_basecalle───10*[{guppy_basecalle}]). Et chacun de ces process essaie d'utiliser un processeur. C'est donc contre-productif. Dans le cas présent, il faudrait demander 10 CPU (et non pas un seul).

De manière général, il vaut mieux spécifier les paramètres de "parallélisation" (nombre de process/fork/cpu/gpu...) du logiciel pour controller et être en adéquation avec les ressources "slurm" demandées.

$ guppy_basecaller --help
[...]
--gpu_runners_per_device
--cpu_threads_per_caller
--num_callers
--num_alignment_threads
[...]

Typiquement si je lance guppy_basecaller pour utiliser 10 CPU (a voir suivant les options et/ou les valeurs par défaut), il faut lancer son job en demandant 10 CPU ( --cpus-per-task=10).

Pour info, une fois le job terminé, on peux vérifier l'usage de la mémoire et du CPU via l'utilitaire seff.
Et dans le cas du GPU, on peut contrôler l'usage du GPU via la commande nvidia-smi en se connectant directement sur le nœud GPU.

Dites-nous si vous avez besoin d'éclaircissement.

1 « J'aime »

Merci pour votre message.

S'il est possible de me clarifier comment je peux savoir les paramètres à spécifier, dans le cas du test CPU j'ai indiqué 1 CPU car je ne savais pas combien étaient nécessaires et pour lancer un nouveau travail GPU comment savoir le nombre à indiquer dans chaque paramètre :
--gpu_runners_per_device
--cpu_threads_per_caller
--num_callers
--num_alignment_threads

Merci!!

Ces paramètres dépendent du logiciel. Il faut donc lire la documentation associée (ou tout autre info/tutoriel).
Et plus généralement, il faut connaître la terminologie et savoir que (de façon simplifié): 1 CPU = 1 process, ou 1 CPU = 1 thread.

Je ne connais pas "guppy" mais si j'en crois l'aide (guppy_basecaller --help):

--num_callers
	Number of parallel basecallers to create.
--cpu_threads_per_caller
	Number of CPU worker threads per basecaller.

Donc si je demande "2" parallel basecallers (--num_callers) et que pour chacun j'affecte "5" threads (--cpu_threads_per_caller), alors je vais utiliser 10 CPU (je devrais donc indiquer à slurm: --cpus-per-task=10).
Par contre, je ne saurais dire quel paramètre indiquer (si il vaut mieux 1 callers et 10 threads ou 2 callers et 5 threads, etc.). Cela me dépasse :stuck_out_tongue:

A tester/vérifier

1 « J'aime »

Bonjour,
Suite aux indications données par [gildaslecorguille], j'ai pu faire fonctionner Guppy en mode GPU.
Notez qu'il faut charger le module singularity avant (module load singularity) (le module guppy/6.1.1-gpu doit avoir un soucis).
C'est incroyablement plus rapide que le CPU (quelques secondes au lieu de plusieurs minutes) !
Cependant, j'ai pu faire fonctionner seulement les profils 3g.20gb et 7g.40gb.
Avec 1g.5gb, j'ai l'erreur suivante :

[guppy/error] basecall_core::CUDACaller::thread_main: Exception in CUDACaller worker thread: Could not allocate CUDA shared buffer, size 6404734208
terminate called after throwing an instance of 'std::runtime_error'
  what():  Could not allocate CUDA shared buffer, size 6404734208
[37443:37443:20230124,101656.265623:ERROR process_memory_range.cc:86] read out of range
[37443:37443:20230124,101656.265692:ERROR elf_image_reader.cc:602] missing nul-terminator
[37443:37443:20230124,101656.268441:ERROR file_io_posix.cc:144] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
[37443:37443:20230124,101656.268471:ERROR file_io_posix.cc:144] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2)
/shared/ifbstor1/software/singularity/wrappers/guppy/6.1.1-gpu/guppy_basecaller: line 2: 37400 Aborted                 singularity exec --nv /shared/ifbstor1/software/singularity/images/guppy-6.1.1-gpu.sif guppy_basecaller $@

#! /bin/bash

#SBATCH -p gpu
#SBATCH --gres=gpu:3g.20gb:1
#SBATCH --cpus-per-task=1

module load singularity
module load guppy/6.1.1-gpu

guppy_basecaller -i /shared/ifbstor1/home/dfilloux/work/fast5 -s output -c ./dna_r9.4.1_450bps_sup.cfg --device "cuda:$CUDA_VISIBLE_DEVICES"
1 « J'aime »

Super, merci pour toutes ces infos et le partage !

En effet, l'erreur indique un manque de mémoire avec le profile 1g.5gb ( 5gb = 5 Go RAM < buffer demandé 6404734208 ~ 6 Go).

J'en déduis donc qu'il est inutile de compter sur le profil 1g.5gb ?
C'est bien cela ?

Pour information, le test a été fait sur des fichiers Fast5 de 10M comprenant 1000 séquences.

Oui, en effet, dans ce cas là (pour votre jeu de donnée), le profil 1g.5gb n'est pas suffisant.

Bonjour,

J'ai pu faire fonctionner Guppy en mode GPU avec 2 fichiers juste pour tester et ça a bien marché (il a fonctionné très rapidement), maintenant j'essaye avec l'ensemble des fichiers, les paramètres que j'ai utilisé:

#SBATCH --partition=gpu
#SBATCH --gres=gpu:1g.5gb:1

module load guppy/6.1.1-gpu

guppy_basecaller -i /shared/projects/FAST5 -s /shared/projects/OUTPUTMINION4 --num_callers 8 --gpu_runners_per_device 8 --flowcell FLO-MIN106 --kit SQK-LSK109 --device "cuda:$CUDA_VISIBLE_DEVICES"
1 « J'aime »

Super nouvelle.
Je comptais étoffer notre doc pour inclure l'usage GPU. Guppy sera un bon cas d'usage pour l'illustrer.
Merci pour ton retour.

2 « J'aime »