Bonjour,
Mon problème est le suivant:
Lorsque je lance un basecalling avec dorado via un script
sbatch gpu_basecalling_test.sh
, tout se déroule correctement, mon script est lancé sur un node GPU et dorado utilise bien le GPU sélectionné pour faire le basecalling.
Contenu de
gpu_basecalling_test.sh
:
!/bin/sh
#SBATCH --partition=gpu
#SBATCH --gres=gpu:3g.20gb:1
#SBATCH --cpus-per-task=1
#SBATCH --mem=16GB
#SBATCH --time 0:10:00
#SBATCH --ntasks=1
#SBATCH --job-name GPU-test
## load dorado module
module load dorado
dorado basecaller --emit-fastq /shared/projects/dd_ont_pipeline/ONT-UMI-search-pipeline/dorado/models/[email protected] /shared/projects/dd_ont_pipeline/raw_reads.pod5 > /shared/projects/dd_ont_pipeline/test.fastq
En revanche, lorsque je cherche à faire la même chose à travers mon pipeline snakemake, il semble que le job est bien lancé sur un node GPU mais dorado ne "voit" pas la carte GPU et donc s'arrête immédiatement.
la rule snakemake est la suivante:
rule dorado_basecalling:
input: config['src_pod5']
params:
dorado = DORADO,
model = MODEL
output: config['src_fastq']+'{exp}.fastq'
shell: '{params.dorado} basecaller --emit-fastq dorado/models/{params.model} {input} > {output}'
Et mon fichier de config (profile):
snakefile: SnakeFile
config: 'CLUSTER=True'
configfile: ["./profiles/IFBslurm/paths_config.yaml", "./profiles/IFBslurm/dorado_base_config.yaml"]
use-conda: True
latency-wait: 30
reason: True
show-failed-logs: True
keep-going: True
printshellcmds: True
rerun-incomplete: True
restart-times: 0
######################
# Cluster submission #
######################
slurm: True
jobname: "{rule}.{jobid}" # Provide a custom name for the jobscript that is submitted to the cluster.
max-jobs-per-second: 1 # Maximal number of cluster/drmaa jobs per second, default is 10, fractions allowed.
max-status-checks-per-second: 10 # Maximal number of job status checks per second, default is 10
jobs: 4 # Use at most N CPU cluster/cloud jobs in parallel.
cores: 1
drmaa:
sbatch
--job-name=smk-{rule}-{wildcards}
--output=logs/{rule}/{rule}-{wildcards}-%j.out
--error=logs/{rule}/{rule}-{wildcards}-%j.err
##################
## Job resources #
##################
# Set default: apply to every rule
default-resources:
- slurm_account=dd_ont_pipeline
- slurm_partition=fast
- runtime=120
- mem_mb=16000
- nodes=1
# Set exceptions: specify custom ressources to a given rule
set-resources:
- dorado_basecalling:mem_mb=16000
- dorado_basecalling:runtime=180
- dorado_basecalling:slurm_partition=gpu
- dorado_basecalling:slurm=gres=gpu:3g.20gb
Enfin le contenu du script bash qui sert à lancer le pipeline snakemake via un sbatch:
#!/bin/sh
#SBATCH --cpus-per-task=4
#SBATCH --mem=32GB
#SBATCH --cpus-per-task=4
#SBATCH --time 12:00:00
#SBATCH --ntasks=1
#SBATCH --job-name DD-pipeline
## load dorado module
module load dorado
## load DRMAA module
module load slurm-drmaa
echo $DRMAA_LIBRARY_PATH
## activate conda environment
module load conda
CONDA_ROOT=/shared/software/miniconda/
source $CONDA_ROOT/etc/profile.d/conda.sh
conda activate dd_ont_pipeline
## Run snakemake pipeline
srun snakemake --profile none --workflow-profile profiles/IFBslurm --jobs=10 --use-envmodule
L'erreur que j'obtiens est la suivante:
[Mon Jan 29 11:18:56 2024]
rule dorado_basecalling:
input: /shared/projects/dd_ont_pipeline/ONT-UMI-search-pipeline/data/TEST/sequences/pod5
output: /shared/projects/dd_ont_pipeline/ONT-UMI-search-pipeline/data/TEST/sequences/fastq/TEST.fastq
jobid: 0
reason: Forced execution
wildcards: exp=TEST
resources: mem_mb=16000, mem_mib=15259, disk_mb=1000, disk_mib=954, tmpdir=/tmp, slurm_account=dd_ont_pipeline, slurm_partition=gpu, runtime=180, nodes=1, slurm=gres=gpu:3g.20gb
dorado basecaller --emit-fastq dorado/models/[email protected] /shared/projects/dd_ont_pipeline/ONT-UMI-search-pipeline/data/TEST/sequences/pod5 > /shared/projects/dd_ont_pipeline/ONT-UMI-search-pipeline/data/TEST/sequences/fastq/TEST.fastq
[2024-01-29 11:18:58.035] [info] - Note: FASTQ output is not recommended as not all data can be preserved.
[2024-01-29 11:18:58.035] [info] > Creating basecall pipeline
[2024-01-29 11:18:58.058] [error] CUDA device requested but no devices found.
Je suppose qu'il s'agit d'un probleme de configuration qui empêche Dorado et/ou CUDA de voir ou d'accèder à la carte mais après avoir testé différentes approches je m'en remets à vous, peut être saurez vous identifier le problème..
Je vous en remercie par avance.
Florian.
Bonjour,
J'utilise snakemake-minimal 7.32.4
.
C'était (je crois) la dernière version disponible via bioconda qui n'était pas en 8.x.x . Il me semble qu'à partir de snakemake 8.0 le fonctionnement est légèrement différent, notamment par rapport à l'option --drmaa
donc je préférais partir sur une version pour laquelle je pouvais potentiellement trouver plus de documentation, mais c'était peut être une fausse bonne idée ?
Je ne sais pas si le réglage gres
est bien transmis à SLURM via DRMAA.
- dorado_basecalling:slurm="gres=gpu:3g.20gb"
J'aurais peut-être tenté avec des " "
Noté qu'il y a un nouveau backend dédié à SLURM Snakemake executor plugin: slurm | Snakemake plugin catalog à partir de la version 8.
Bonjour,
ça fonctionne pour moi sur la 7.32.4 en enlevant drmaa. Voici un example simple:
[mhennion @ core-login2 09:43]$ bug_snakemake : cat Snakefile
rule end:
input: "test.fastq"
rule dorado_basecalling:
input:
"pod5_folder"
params:
model = "[email protected]"
output:
"test.fastq"
shell: 'dorado basecaller --emit-fastq {params.model} {input} > {output}'
[mhennion @ core-login2 09:44]$ bug_snakemake : cat config/config.yaml
jobs: 100
use-singularity: True
keep-going: True
rerun-incomplete: True
printshellcmds: True
max-jobs-per-second: 10
max-status-checks-per-second: 1
latency-wait: 40
cluster:
sbatch
--partition={resources.partition}
--cpus-per-task={resources.cpus}
--mem={resources.mem_mb}
--job-name={rule}-{wildcards}
--output={rule}-{wildcards}-%j.out
--gres={resources.gres}
default-resources:
- mem_mb=500
- cpus=1
- partition=fast
- gres=""
# Set exceptions: specify custom ressources to a given rule
set-resources:
- dorado_basecalling:runtime=180
- dorado_basecalling:mem_mb=16000
- dorado_basecalling:partition=gpu
- dorado_basecalling:gres=gpu:1g.5gb
[mhennion @ core-login2 09:29]$ bug_snakemake : module load dorado snakemake/7.32.4
Loading dorado/0.4.3
Loading requirement: singularity
[mhennion @ core-login2 09:37]$ bug_snakemake : srun snakemake --profile=config/
srun: job 37593337 queued and waiting for resources
srun: job 37593337 has been allocated resources
Using profile config/ for setting default command line arguments.
Building DAG of jobs...
Using shell: /usr/bin/bash
Provided cluster nodes: 100
Job stats:
job count
------------------ -------
dorado_basecalling 1
end 1
total 2
Select jobs to execute...
[Tue Jan 30 09:37:39 2024]
rule dorado_basecalling:
input: pod5_folder
output: test.fastq
jobid: 1
reason: Missing output files: test.fastq
resources: mem_mb=16000, mem_mib=15259, disk_mb=1000, disk_mib=954, tmpdir=<TBD>, cpus=1, partition=gpu, gres=gpu:1g.5gb, runtime=180
dorado basecaller --emit-fastq [email protected] pod5_folder > test.fastq
Submitted job 1 with external jobid 'Submitted batch job 37593338'.
[Tue Jan 30 09:40:01 2024]
Finished job 1.
1 of 2 steps (50%) done
Select jobs to execute...
[Tue Jan 30 09:40:01 2024]
localrule end:
input: test.fastq
jobid: 0
reason: Input files updated by another job: test.fastq
resources: mem_mb=500, mem_mib=477, disk_mb=1000, disk_mib=954, tmpdir=/tmp, cpus=1, partition=fast, gres=
[Tue Jan 30 09:40:01 2024]
Finished job 0.
2 of 2 steps (100%) done
Complete log: .snakemake/log/2024-01-30T093738.811340.snakemake.log
J'ai mis la config 1g.5gb car avec 3g.20gb, ça me donne UnavailableNodes:gpu-node-02
, il doit y avoir un soucis sur ce noeud.
Je n'ai pas encore testé la version 8 de Snakemake, je fais ça bientôt.
Magali
Bonjour Magali,
Merci pour votre retour, j'ai testé de mon côté avec votre exemple et effectivement cela fonctionne. Je vous remercie pour votre aide ainsi que votre réactivité, c'est vraiment top !
Je regarderai aussi de mon côté pour migrer sur la version 8 de snakemake mais si jamais vous avez un exemple à partager (lorsque vous aurez le temps d'y regarder) cela m'intéresse fortement.
Merci encore.
Florian.