AlphaFold3/fr
Nous décrivons ici l'utilisation de AlphaFold v3.0.
Le code source et la documentation se trouvent sur leur page GitHub. Toute publication qui divulgue des résultats découlant de l'utilisation de ce code source ou des paramètres du modèle doit citer le document AlphaFold3.
Versions disponibles¶
Sur nos grappes, AlphaFold3 est disponible sous forme de paquets préconstruits (wheels). Pour les lister, utilisez avail_wheels.
AlphaFold2 est encore disponible (voir la documentation).
Créer un fichier des dépendances requises¶
- Chargez les dépendances de AlphaFold3.
- Téléchargez le script d'exécution.
wget https://raw.githubusercontent.com/google-deepmind/alphafold3/23e3d46d4ca126e8731e8c0cbb5673e9a848ceb5/run_alphafold.py
- Créez et activez un environnement virtuel Python.
- Installez une version de AlphaFold3 ainsi que ses dépendances Python.
(alphafold3_env) [name@server ~]$ pip install --no-index --upgrade pip
(alphafold3_env) [name@server ~]$ pip install --no-index alphafold3==X.Y.Z
X.Y.Z est la version spécifique, par exemple 3.0.0.
N'entrez pas le numéro de la version si vous voulez installer la plus récente.
- Compilez les données nécessaires.
- Validez.
- Geler l'environnement et l'ensemble des dépendances.
- Désactivez l'environnement.
- Nettoyer et supprimer l'environnement virtuel.
L'environnement virtuel sera plutôt créé dans votre tâche.
Modèle¶
Vous pouvez obtenir le modèle en en faisant la demande à Google. Ils s'efforcent de répondre aux demandes dans un délai de 2 à 3 jours ouvrables.
Veuillez consulter la page Obtaining Model Parameters sur GitHub.
Bases de données¶
AlphaFold3 nécessite un ensemble de bases de données.
Important : Les bases de données doivent résider dans le répertoire $SCRATCH.
- Téléchargez le script de téléchargement.
wget https://raw.githubusercontent.com/google-deepmind/alphafold3/refs/heads/main/fetch_databases.sh
- Téléchargez les bases de données.
Exécution par étapes¶
AlphaFold3 doit être exécuté par étapes, c'est-à-dire : 1. séparer le pipeline de données (pour CPU seulement) et le modèle d'inférence (qui demande un GPU) pour optimiser les coûts et l'utilisation des ressources; 2. cacher les résultats de la recherche de MSA/modèle, pour ensuite réutiliser le JSON augmenté pour plusieurs inférences différentes ou pour des variations d'autres fonctionnalités (par exemple, un ligand).
Pour des références, consultez : * entrées * sorties * performance
1. Pipeline de données (CPU)¶
Modifiez le script suivant selon vos besoins.
#!/bin/bash
#SBATCH --job-name=alphafold3-data
#SBATCH --account=def-someprof # ajustez ceci pour correspondre au groupe comptable que vous utilisez pour soumettre des tâches
#SBATCH --time=08:00:00 # ajustez ceci pour correspondre au temps d'exécution de votre tâche
#SBATCH --cpus-per-task=8 # un MAXIMUM de 8 cœurs, AlphaFold ne tire aucun avantage à en utiliser plus
#SBATCH --mem=64G # ajustez ceci en fonction de la mémoire dont vous avez besoin
# Charger les dépendances des modules.
module load StdEnv/2023 hmmer/3.4 rdkit/2024.03.5 python/3.12
DOWNLOAD_DIR=$SCRATCH/alphafold/dbs # définissez le chemin approprié vers vos données téléchargées
INPUT_DIR=$SCRATCH/alphafold/input # définissez le chemin approprié vers vos données d'entrée
OUTPUT_DIR=$SLURM_TMPDIR/alphafold/output # définissez le chemin approprié vers vos données de sortie
# Générez votre environnement virtuel dans $SLURM_TMPDIR.
virtualenv --no-download $SLURM_TMPDIR/env
source $SLURM_TMPDIR/env/bin/activate
# Installez AlphaFold et ses dépendances.
pip install --no-index --upgrade pip
pip install --no-index --requirement ~/alphafold3-requirements.txt
# compilez les données dans $VIRTUAL_ENV
build_data
# https://github.com/google-deepmind/alphafold3/blob/main/docs/performance.md#compilation-time-workaround-with-xla-flags
export XLA_FLAGS="--xla_gpu_enable_triton_gemm=false"
# Modifiez avec les arguments appropriés et exécutez vos commandes.
# run_alphafold.py --help
python run_alphafold.py \
--db_dir=$DOWNLOAD_DIR \
--input_dir=$INPUT_DIR \
--output_dir=$OUTPUT_DIR \
--jax_compilation_cache_dir=$HOME/.cache \
--nhmmer_n_cpu=$SLURM_CPUS_PER_TASK \
--jackhmmer_n_cpu=$SLURM_CPUS_PER_TASK \
--norun_inference # Exécutez l'étape des données
# recopiez
mkdir $SCRATCH/alphafold/output
cp -vr $OUTPUT_DIR $SCRATCH/alphafold/output
2. Inférence de modèle¶
Modifiez le script suivant selon vos besoins.
Compatibilité
AlphaFold3 prend en charge seulement la capacité de calcul des versions 8.0 et plus récentes, soit pour des A100s et plus performants.
#!/bin/bash
#SBATCH --job-name=alphafold3-inference
#SBATCH --account=def-someprof # ajustez ceci pour correspondre au groupe comptable que vous utilisez pour soumettre des tâches
#SBATCH --time=08:00:00 # ajustez ceci pour correspondre au temps d'exécution de votre tâche
#SBATCH --cpus-per-task=1 # AlphaFold n'a aucun avantage à en utiliser plus pour l'étape d'inférence
#SBATCH --gpus=a100:1 # L'inférence d'AlphaFold3 ne s'exécute que sur UNE A100 ou plus.
#SBATCH --mem=20G # ajustez ceci en fonction de la mémoire dont vous avez besoin
# Charger les dépendances des modules.
module load StdEnv/2023 hmmer/3.4 rdkit/2024.03.5 python/3.12 cuda/12.2 cudnn/9.2
DOWNLOAD_DIR=$SCRATCH/alphafold/dbs # définissez le chemin approprié vers vos données téléchargées
INPUT_DIR=$SCRATCH/alphafold/input # définissez le chemin approprié vers vos données d'entrée, suite à l'étape de données.
OUTPUT_DIR=$SCRATCH/alphafold/output # définissez le chemin approprié vers vos données de sortie
# Générez votre environnement virtuel dans $SLURM_TMPDIR.
virtualenv --no-download $SLURM_TMPDIR/env
source $SLURM_TMPDIR/env/bin/activate
# Installez AlphaFold et ses dépendances.
pip install --no-index --upgrade pip
pip install --no-index --requirement ~/alphafold3-requirements.txt
# compilez les données dans $VIRTUAL_ENV
build_data
# https://github.com/google-deepmind/alphafold3/blob/main/docs/performance.md#compilation-time-workaround-with-xla-flags
export XLA_FLAGS="--xla_gpu_enable_triton_gemm=false"
# https://github.com/google-deepmind/alphafold3/blob/main/docs/performance.md#gpu-memory
export XLA_PYTHON_CLIENT_PREALLOCATE=true
export XLA_CLIENT_MEM_FRACTION=0.95
# Modifiez avec les arguments appropriés et exécutez vos commandes.
# run_alphafold.py --help
python run_alphafold.py \
--db_dir=$DOWNLOAD_DIR \
--input_dir=$INPUT_DIR \
--output_dir=$OUTPUT_DIR \
--jax_compilation_cache_dir=$HOME/.cache \
--norun_data_pipeline # Exécutez l'étape d'inférence
3. Soumettre une tâche¶
Soumettez la tâche à l'ordonnanceur.
Tâches indépendantes¶
Attendez la fin et soumettez ensuite la deuxième étape.
Tâches dépendantes¶
jid1=$(sbatch alphafold3-data.sh)
jid2=$(sbatch --dependency=afterok:$jid1 alphafold3-inference.sh)
sq
Dépannage¶
Mémoire insuffisante (GPU)¶
Si vous voulez exécuter AlphaFold3 avec plus de 5120 jetons ou sur un GPU avec moins de mémoire (par exemple, sur un A100 avec 40 Go de mémoire), vous pouvez activer la fonctionnalité de mémoire unifiée.
Dans le script de soumission à l'étape d'inférence, ajoutez les variables d'environnement suivantes :
export XLA_PYTHON_CLIENT_PREALLOCATE=false
export TF_FORCE_UNIFIED_MEMORY=true
export XLA_CLIENT_MEM_FRACTION=2.0 # 2 x 40GB = 80 GB
et ajustez en conséquence la quantité de mémoire allouée à la tâche, par exemple #SBATCH --mem=80G.