High throughput colabfold "ht-colabfold" sur iPOP-UP

Bonjour,

Je suis Julien Richard Albert au IJM. J’aimerais instsaller et utiliser un pipeline qui nécessitera une quantité importante de CPU et de GPU.

Essentiellement, le pipeline est un script wrapper qui exécute de nombreuses instances de colabfold (alphafold multimer) en parallèle. Comme ça je peux facilement exécuter ~200 instances de colabfold par exemple. Ce pipeline “ht-colabfold” simplifie vraiment les choses par rapport à l’exécution de 200 tâches de colabfold avec sbatch. Il est également plus efficace sur le serveur, car il utilise les CPU pour certains calculs et envoie les petits tâches fold aux petits GPU et les gros tâches fold aux gros GPU, ce qui permet d’économiser l’usage des plus gros GPU.

[BrenneckeLab / HT-Colabfold · GitLab](https://Pipeline ht-colabfold)

D’après ce que j’ai compris, il “suffit” de modifier le fichier config.txt pour spécifier où se trouve la base de données alphafold, mais il y a aussi quelques configs de mémoire GPU que je ne comprends pas bien. L’idéal serait d’exécuter le pipeline à partir du terminal avec sbatch. Si je sais où se trouve la base de données alphafold et peut-être un peu d’informations sur les GPU dispos, je pourrai essayer d’installer tout ça moi-même. Sinon, toute aide serait grandement appréciée.

Enfin, mon compte : richard-albert
a été installé en mode démo (je pense, ça fait très longtemps), et j’aurais donc aussi besoin d’un accès aux CPU et GPU. Je ne pense pas que ce projet ait besoin de beaucoup d’espace ROM, tant que je n’ai pas à re-télécharger la base de données alphafold. Je ne suis pas expert en alphafold, alors je ne sais pas combien de GPU demander (ou si c’est même possible). Je vois que vous avez partitionné vos GPU A100 en slices, je pense que ht-colabfold peut en prendre avantage, mais je ne sais pas comment le configurer.

Au moins deux labos sont intéressés (Greenberg et Duharcourt) et je serais heureux de venir aider en personne si je peux être utile. Merci!

Bonjour,

Je vous ai ouvert un projet ht-colabfold avec 1To de stockage. Vous avez accès à tous les noeuds de la partition ipop-up (cela comprend l’accès aux 3 noeuds GPU A100).

Cependant je ne suis pas sûr de comprendre ce que fait exactement le script alphafold_batch.sh. Je laisse @murail qui connait mieux colabfold répondre à ma place.

A priori on n’a pas besoin de repasser par l’étape du téléchargement des bases de données (setup-database.sh), on a déjà une instance mmseqs-colabfold qui tourne sur un noeud dédié avec les banques chargées en RAM. Il suffit de fournir l’adresse vers l’API avec l’argument --host-url http://cpu-node146:3000 quand on utilise colabfold_batch.

On n’a pas besoin non plus de retélécharger les images apptainer, elles sont trouvables dans /shared/software/singularity/images ou via module load.

Cordialement.

Merci! J’ai fais des testes avec colabfold et ça fonctionne très bien.

Pour ht-colabfold c’est plus compliqué. Moi aussi j’ai des doutes avec alphafold_batch.sh
De plus, je pense que je dois modifier /script-files/AF2.sh:

singularity exec --nv --cleanenv --contain -B /users -B /groups -B /scratch -B /scratch-cbe -B ${TMPdir}:/tmp --pwd ${TMPdir} ${SINGULARITYdir}colabfold.simg colabfold_batch ${TMPdir}MSAs/$IDmsa/${IDname}.a3m ${TMPdir}AFpredictions/${IDmsa}/${SLURM_ARRAY_TASK_ID} --num-recycle 3 --data /resources/colabfold/models/

par exemple, je crois que -B /users devrait être -B /shared/banks/alphafold2/2022-12-13/:/root/.cache/colabfold
…etc.

Je vais continuer à progresser petit à petit, si vous voyez que ça va lentement, c’est parce que je suis lent et occupé avec d’autres projets.

Bonjour,

Je me suis remis et j’ai une autre question.

Avez-vous un exemple de nom de partition GPU ? J’ai essayé différentes combinaisons de
#NAME VMEM CONSTRAINT
a100 20 gpu:a100_1g.20gb:1

ou
#NAME VMEM CONSTRAINT
a100 20 a100_1g
a100 20 a100_2g
a100 40 a100_4g
a100 80 a100_7g

où gpu:a100_1g.20gb:1 est sensé correspondre au nom du partition GPU. Mais ça ne marche pas avec ht-colabfold. Cela pourrait être un problème avec la façon dont le ht-colabfold prend le nom du GPU et le modifie, donc je veux commencer avec un nom qui fonctionne.

Merci ! Il n’y a pas d’urgence

p.s. voici la commande sbatch que ht-colabfold crée (c’est énorme !) et le message d’erreur associé.

+++ sbatch --parsable --job-name=AF_split-1_2025-01-31_demo_bait_vs_demo_candidate -o %x.o.%A-%a.txt -e %x.e.%A-%a.txt --partition=ipop-up --qos=short --time=8:00:00 --mem=40g --cpus-per-task=2 --array=1,2,3 --constraint=a100_1g,a100_2g,a100_4g,a100_7g --gres=gpu:1 /shared/projects/ht-colabfold/tmp_dir/2025-01-31_demo_bait_vs_demo_candidate/script-files/AF2.sh OPENdir=/shared/projects/ht-colabfold/ht-colabfold/demo_output_triple/2025-01-31_demo_bait_vs_demo_candidate/,TMPdir=/shared/projects/ht-colabfold/tmp_dir/2025-01-31_demo_bait_vs_demo_candidate/,CONFIG=/shared/projects/ht-colabfold/ht-colabfold/config.txt,fullNAME=2025-01-31_demo_bait_vs_demo_candidate,LOG=/shared/projects/ht-colabfold/ht-colabfold/demo_output_triple/2025-01-31_demo_bait_vs_demo_candidate//LOGs/,COMPUTING=C,FORCE=N,SCRIPTdir=/shared/projects/ht-colabfold/tmp_dir/2025-01-31_demo_bait_vs_demo_candidate/script-files/,UTILITYdir=/shared/projects/ht-colabfold/ht-colabfold/utility-files/,SINGULARITYdir=/shared/projects/ht-colabfold/ht-colabfold/singularity_v2/,target_file_1=/shared/projects/ht-colabfold/ht-colabfold/demo_output_triple/2025-01-31_demo_bait_vs_demo_candidate/input1.demo_bait.txt,target_file_2=/shared/projects/ht-colabfold/ht-colabfold/demo_output_triple/2025-01-31_demo_bait_vs_demo_candidate/input2.demo_candidate.txt,WINDOWsize=0,STEPsize=0,collectONLY=N,noSPLIT=N,runFAILED=N,rePROCESSresults=N,plotONLY=N,commitID=2afda28,nSPLITS=1,nSPLITS=1,IDmsa=001,lowPredLIMIT=15,rePROCESSresults=N,nPRED=3
sbatch: error: Batch job submission failed: Invalid feature specification

Bonjour,

L’argument --constraint de sbatch sert à filtrer les noeuds sur les FEATURES et pas sur les GRES.

Pour l’instant je n’ai pas défini de FEATURES sur les noeuds, mais ça pourrait être intéressant de le faire pour, par exemple, distinguer les noeud AMD des noeuds Intel, ou les noeuds GPU MIG (A30 et A100) des noeuds GPU non-MIG (RTX 6000, RTX A6000 etc.). Je ferai ça lors d’une future mise-à-jour.

En attendant il faut simplement ne pas utiliser l’argument --constraint. L’argument --gres=gpu:1 est nécessaire et suffisant. Vous pouvez aussi cibler une instance particulière (par exemple la 1g.20gb) en incluant une partie de son nom en paramètre de l’argument --gres, par exemple --gres=gpu:a100_1g.20gb:1

Cordialement.

Bonjour,

Aha! Maintenant c’est plus clair dans ma tête, merci beaucoup pour votre explication.

Je suis tombé sur une nouvelle erreur qui mérite peut-être son propre thread.

Je suis bloqué à l’étape mmseq2, que j’essaie d’exécuter sur le serveur lui-même. J’ai réussi à spécifier :
–host-url http://cpu-node146:3000
pour colabfold_batch

mais pour colabfold_search, il a besoin du chemin complet vers la base de données uniprot “uniref30_2302_db” ? Il se peut que je me trompe.

e.g.

singularity exec ${SINGULARITYdir}colabfold.simg colabfold_search \
  ./test.fa \
  http://cpu-node146:3000 \
  ./test  \  
  --threads 2 \
  --use-env 1  \
  --use-templates 0
INFO:colabfold.mmseqs.search:Running mmseqs createdb test/query.fas test/qdb --shuffle 0
test/qdb exists and will be overwritten
createdb test/query.fas test/qdb --shuffle 0 

Converting sequences

Time for merging to qdb_h: 0h 0m 0s 5ms
Time for merging to qdb: 0h 0m 0s 6ms
Database type: Aminoacid
Time for processing: 0h 0m 0s 55ms
Traceback (most recent call last):
  File "/install/localcolabfold/colabfold-conda/bin/colabfold_search", line 8, in <module>
    sys.exit(main())
  File "/install/localcolabfold/colabfold-conda/lib/python3.10/site-packages/colabfold/mmseqs/search.py", line 402, in main
    mmseqs_search_monomer(
  File "/install/localcolabfold/colabfold-conda/lib/python3.10/site-packages/colabfold/mmseqs/search.py", line 71, in mmseqs_search_monomer
    raise FileNotFoundError(f"Database {db} does not exist")
FileNotFoundError: Database uniref30_2302_db does not exist




colabfold_search         --help
positional arguments:
  query                 fasta files with the queries.
  dbbase                The path to the database and indices you downloaded and created with
                        setup_databases.sh
  base                  Directory for the results (and intermediate files)

Est-ce que quelqu’un a réussi à exécuter colabfold_search sur ipop-up et est-ce que je pourrais voir la commande s’il vous plaît ? D’après ce que j’ai compris, l’exécution de cette étape sur le serveur permet d’éviter d’envoyer trop de jobs à ceux et celles qui host mmseq2. Merci et bien cordialement

Bonjour,

Voici comme sont configurés les chemins vers les banques dans l’API mmseqs:

    "paths" : {
        "databases"    : "/data/banks/colabfold",
        "results"      : "/shared/home/rey/colabfold",
        "temporary"    : "/tmp",
        "colabfold"    : {
            "parallelstages": true,
            "uniref"        : "/data/banks/colabfold/uniref30_2302_db",
            "pdb"           : "/data/banks/colabfold/pdb100_230517",
            "environmental" : "/data/banks/colabfold/colabfold_envdb_202108_db",
            "pdb70"        : "/data/banks/colabfold/pdb100",
            "pdbdivided"    : "/data/banks/colabfold/pdb/divided",
            "pdbobsolete"   : "/data/banks/colabfold/pdb/obsolete"
        },
        "mmseqs"       : "/usr/local/bin/mmseqs",
    },

Donc a priori il faudrait spécifier uniref et non uniref30_2302_db.

L’API me paraît fonctionnelle. @murail tu pourrais vérifier ?

Je ne connais pas colabfold-search mais je pense que le probleme est de bien monter les différentes banques dans l’image singularity :

singularity run --bind /shared/banks/alphafold2/2022-12-13/:/root/.cache/colabfold ...

EDIT: ignorez ma réponse:

J’ai enfin réalisé que je devrais contourner la commande colabfold_search puisqu’on a déjà mmseq2 local alors je peux simplement lancer colabfold_batch avec des parametres mmseq2 host-url etc.

Il semble que je progresse avec cette approche