msa-structure-prediction-pipeline

Par nvidia · skills

REMARQUE : votre séquence protéique et l'alignement MSA récupéré sont transmis à des API externes hébergées par NVIDIA (health.api.nvidia.com) à chaque appel. Utilisez des conteneurs NIM locaux pour les séquences confidentielles ou propriétaires. Exécutez un pipeline complet de prédiction de structure protéique à l'aide des NIMs NVIDIA BioNeMo : recherchez des alignements MSA avec MSA-Search (ColabFold), puis prédisez la structure avec OpenFold3 en utilisant les alignements récupérés. Utilisez cette skill chaque fois que l'utilisateur souhaite prédire une structure protéique avec une précision maximale en exploitant le contexte MSA, exécuter le pipeline complet de style AlphaFold3, générer des prédictions de structure informées par MSA, ou améliorer la précision de la prédiction de structure en fournissant des informations évolutives. Se déclenche sur : pipeline de prédiction de structure MSA, pipeline de prédiction de structure, prédiction informée par MSA, OpenFold3, ColabFold MSA, pipeline AlphaFold3, structure protéique, recherche d'homologie, alignement a3m, UniRef30, microservice NIM. Ce pipeline enchaîne MSA-Search et OpenFold3.

npx skills add https://github.com/nvidia/skills --skill msa-structure-prediction-pipeline

Pipeline de prédiction de structure MSA

Prédisez des structures protéiques avec une haute précision en chaînant deux NIMs BioNeMo :

Étape 1 : MSA-Search  →  Étape 2 : OpenFold3
(Recherche d'homologs)    (Prédiction de structure avec MSA)

Vue d'ensemble

Pourquoi chaîner ces NIMs ?

  • MSA-Search trouve les homologs évolutifs dans les bases de données UniRef30 et ColabFold en utilisant MMSeqs2 accéléré par GPU. L'alignement résultant fournit des informations évolutives cruciales.
  • OpenFold3 utilise le MSA pour améliorer la précision de la prédiction de structure — notamment pour les séquences dont aucun homolog proche n'existe dans la PDB.
  • Exécuter MSA-Search en premier signifie qu'OpenFold3 obtient le contexte évolutif complet plutôt qu'une prédiction sur une seule séquence.

Avant de commencer

Confirmez avec l'utilisateur :

  1. Séquence de requête : séquence d'acides aminés à prédire
  2. Profondeur MSA : nombre de séquences à récupérer (par défaut 500 ; plus = plus lent mais plus de contexte)
  3. Mode API : hébergé ou Docker local ?

Remarque : le MSA-Search local nécessite 1,4 TB de stockage de base de données — fortement recommandé en mode hébergé sauf si l'utilisateur dispose de cette infrastructure.

Pour Docker local, ne supposez pas que MSA-Search et OpenFold3 sont tous deux sur localhost:8000 simultanément. Exécutez un conteneur à la fois et transmettez le fichier A3M, ou démarrez chaque NIM sur un port d'hôte distinct et définissez les URLs explicitement.


Étape 1 : Rechercher le MSA avec MSA-Search

import requests, json, os
from pathlib import Path

NGC_API_KEY = os.getenv("NGC_API_KEY")
HOSTED = True

query_sequence = "<YOUR_PROTEIN_SEQUENCE>"

if HOSTED:
    msa_url = "https://health.api.nvidia.com/v1/biology/colabfold/msa-search/predict"
    headers = {"Content-Type": "application/json",
               "Authorization": f"Bearer {NGC_API_KEY}"}
else:
    msa_url = "http://localhost:8000/biology/colabfold/msa-search/predict"
    headers = {"Content-Type": "application/json"}

payload = {
    "sequence": query_sequence,
    "databases": ["Uniref30_2302", "colabfold_envdb_202108"],
    "e_value": 0.0001,
    "output_alignment_formats": ["a3m"],
}

r = requests.post(msa_url, headers=headers, json=payload)
r.raise_for_status()
msa_result = r.json()

# Extract the A3M alignment
a3m_alignment = msa_result["alignments"]["Uniref30_2302"]["a3m"]["alignment"]

# Save for reference
with open("query_msa.a3m", "w") as f:
    f.write(a3m_alignment)

# Count sequences in alignment
n_seqs = a3m_alignment.count(">")
print(f"Step 1 complete: found {n_seqs} homologous sequences")
print(f"MSA saved to query_msa.a3m")

Étape 2 : Prédire la structure avec OpenFold3

Passez le MSA directement dans le champ msa d'OpenFold3 :

if HOSTED:
    of3_url = "https://health.api.nvidia.com/v1/biology/openfold/openfold3/predict"
else:
    of3_url = "http://localhost:8000/biology/openfold/openfold3/predict"

# Build the OpenFold3 MSA structure from the retrieved alignment
msa_data = {
    "uniref30": {
        "a3m": {
            "alignment": a3m_alignment,
            "format": "a3m"
        }
    }
}

# Optionally also include colabfold_envdb alignment if requested
# env_alignment = msa_result["alignments"]["colabfold_envdb"]["a3m"]["alignment"]
# msa_data["colabfold_env"] = {"a3m": {"alignment": env_alignment, "format": "a3m"}}

payload = {
    "inputs": [{
        "input_id": "prediction_with_msa",
        "output_format": "pdb",
        "molecules": [
            {
                "type": "protein",
                "sequence": query_sequence,
                "diffusion_samples": 1,
                "msa": msa_data
            }
        ]
    }]
}

r = requests.post(of3_url, headers=headers, json=payload, timeout=300)
r.raise_for_status()
result = r.json()

output = result["outputs"][0]
for i, sample in enumerate(output["structures_with_scores"]):
    fmt = sample["format"]
    filename = f"predicted_structure_{i+1}.{fmt}"
    with open(filename, "w") as f:
        f.write(sample["structure"])
    print(f"\nStep 2 complete: {filename} saved")
    print(f"  Confidence:  {sample['confidence_score']:.4f}")
    print(f"  pLDDT:       {sample['complex_plddt_score']:.4f}")
    print(f"  pTM:         {sample['ptm_score']:.4f}")

Comparer la prédiction sur une seule séquence vs celle informée par MSA

Si l'utilisateur souhaite voir l'impact du MSA, exécutez OpenFold3 deux fois — une fois avec le MSA complet et une fois avec uniquement la séquence de requête comme alignement minimal :

# Minimal MSA (single sequence — same as no MSA context):
minimal_msa = {
    "main": {
        "a3m": {
            "alignment": f">query\n{query_sequence}",
            "format": "a3m"
        }
    }
}

Un MSA plus grand et de meilleure qualité produit généralement un pLDDT plus élevé et un pDE plus bas, particulièrement pour les protéines avec de nombreux homologs connus.


Pour les complexes protéiques

Utilisez le endpoint /paired/predict de MSA-Search pour obtenir des alignements appairés pour les complexes multi-chaînes, puis passez l'alignement de chaque chaîne dans les champs msa et paired_msa correspondants de la molécule :

# Paired MSA search endpoint for complexes:
msa_paired_url = "https://health.api.nvidia.com/v1/biology/colabfold/msa-search/paired/predict"
paired_payload = {
    "sequences": [chain_A_sequence, chain_B_sequence],
    "e_value": 0.0001,
}

Référence rapide — dépendances de skill

Étape Skill Endpoint clé
Recherche MSA msa-search-nim /biology/colabfold/msa-search/predict
Prédiction de structure openfold3-nim /biology/openfold/openfold3/predict

Skills similaires