Accélérez la prédiction de la structure des protéines avec le modèle de langage ESMFold sur Amazon SageMaker

Accélérez la prédiction de la structure des protéines avec le modèle de langage ESMFold sur Amazon SageMaker

Les protéines pilotent de nombreux processus biologiques, tels que l'activité enzymatique, le transport moléculaire et le support cellulaire. La structure tridimensionnelle d'une protéine donne un aperçu de sa fonction et de la façon dont elle interagit avec d'autres biomolécules. Les méthodes expérimentales pour déterminer la structure des protéines, telles que la cristallographie aux rayons X et la spectroscopie RMN, sont coûteuses et prennent du temps.

En revanche, les méthodes de calcul récemment développées peuvent prédire rapidement et avec précision la structure d'une protéine à partir de sa séquence d'acides aminés. Ces méthodes sont critiques pour les protéines difficiles à étudier expérimentalement, comme les protéines membranaires, cibles de nombreux médicaments. Un exemple bien connu en est AlphaFold, un algorithme basé sur l'apprentissage en profondeur réputé pour ses prédictions précises.

ESMFold est une autre méthode très précise basée sur l'apprentissage en profondeur développée pour prédire la structure des protéines à partir de sa séquence d'acides aminés. ESMFold utilise un grand modèle de langage protéique (pLM) comme colonne vertébrale et fonctionne de bout en bout. Contrairement à AlphaFold2, il n'a pas besoin d'une recherche ou Alignement de séquences multiples (MSA), ni ne s'appuie sur des bases de données externes pour générer des prédictions. Au lieu de cela, l'équipe de développement a formé le modèle sur des millions de séquences de protéines d'UniRef. Au cours de la formation, le modèle a développé des schémas d'attention qui représentent avec élégance les interactions évolutives entre les acides aminés de la séquence. Cette utilisation d'un pLM au lieu d'un MSA permet des temps de prédiction jusqu'à 60 fois plus rapides que les autres modèles de pointe.

Dans cet article, nous utilisons le modèle ESMFold pré-formé de Hugging Face avec Amazon Sage Maker prédire la structure de la chaîne lourde de trastuzumabun anticorps monoclonal d'abord développé par Genentech pour le traitement de Cancer du sein HER2-positif. Prédire rapidement la structure de cette protéine pourrait être utile si les chercheurs voulaient tester l'effet des modifications de séquence. Cela pourrait potentiellement améliorer la survie des patients ou réduire les effets secondaires.

Cet article fournit un exemple de bloc-notes Jupyter et de scripts associés dans ce qui suit GitHub référentiel.

Pré-requis

Nous vous recommandons d'exécuter cet exemple dans un Amazon SageMakerStudio cahier exécutant l'image optimisée pour le processeur PyTorch 1.13 Python 3.9 sur un type d'instance ml.r5.xlarge.

Visualisez la structure expérimentale du trastuzumab

Pour commencer, nous utilisons le biopython bibliothèque et un script d'aide pour télécharger la structure du trastuzumab à partir du Banque de données sur les protéines du RCSB:

from Bio.PDB import PDBList, MMCIFParser
from prothelpers.structure import atoms_to_pdb target_id = "1N8Z"
pdbl = PDBList()
filename = pdbl.retrieve_pdb_file(target_id, pdir="data")
parser = MMCIFParser()
structure = parser.get_structure(target_id, filename)
pdb_string = atoms_to_pdb(structure)

Ensuite, nous utilisons le py3Dmol bibliothèque pour visualiser la structure sous forme de visualisation 3D interactive :

view = py3Dmol.view()
view.addModel(pdb_string)
view.setStyle({'chain':'A'},{"cartoon": {'color': 'orange'}})
view.setStyle({'chain':'B'},{"cartoon": {'color': 'blue'}})
view.setStyle({'chain':'C'},{"cartoon": {'color': 'green'}})
view.show()

La figure suivante représente la structure protéique 3D 1N8Z de la Protein Data Bank (PDB). Dans cette image, la chaîne légère du trastuzumab est affichée en orange, la chaîne lourde est bleue (avec la région variable en bleu clair) et l'antigène HER2 est vert.

Accélérez la prédiction de la structure des protéines avec le modèle de langage ESMFold sur Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Nous allons d'abord utiliser ESMFold pour prédire la structure de la chaîne lourde (chaîne B) à partir de sa séquence d'acides aminés. Ensuite, nous comparerons la prédiction à la structure déterminée expérimentalement illustrée ci-dessus.

Prédire la structure de la chaîne lourde du trastuzumab à partir de sa séquence à l'aide d'ESMFold

Utilisons le modèle ESMFold pour prédire la structure de la chaîne lourde et la comparer au résultat expérimental. Pour commencer, nous allons utiliser un environnement de bloc-notes prédéfini dans Studio, fourni avec plusieurs bibliothèques importantes, telles que PyTorch, Pre installé. Bien que nous puissions utiliser un type d'instance accéléré pour améliorer les performances de notre analyse de bloc-notes, nous utiliserons à la place une instance non accélérée et exécuterons la prédiction ESMFold sur un processeur.

Tout d'abord, nous chargeons le modèle et le tokenizer ESMFold pré-formés à partir de Visage câlin:

from transformers import AutoTokenizer, EsmForProteinFolding tokenizer = AutoTokenizer.from_pretrained("facebook/esmfold_v1")
model = EsmForProteinFolding.from_pretrained("facebook/esmfold_v1", low_cpu_mem_usage=True)

Ensuite, nous copions le modèle sur notre appareil (CPU dans ce cas) et définissons certains paramètres du modèle :

device = torch.device("cpu")
model.esm = model.esm.float()
model = model.to(device)
model.trunk.set_chunk_size(64)

Pour préparer la séquence protéique pour l'analyse, nous devons la tokeniser. Cela traduit les symboles d'acides aminés (EVQLV…) dans un format numérique que le modèle ESMFold peut comprendre (6,19,5,10,19,…) :

tokenized_input = tokenizer([experimental_sequence], return_tensors="pt", add_special_tokens=False)["input_ids"]
tokenized_input = tokenized_input.to(device)

Ensuite, nous copions l'entrée tokenisée dans le mode, faisons une prédiction et enregistrons le résultat dans un fichier :

with torch.no_grad():
notebook_prediction = model.infer_pdb(experimental_sequence)
with open("data/prediction.pdb", "w") as f:
f.write(notebook_prediction)

Cela prend environ 3 minutes sur un type d'instance non accéléré, comme un r5.

Nous pouvons vérifier l'exactitude de la prédiction ESMFold en la comparant à la structure expérimentale. Nous le faisons en utilisant le Alignement US outil développé par le Zhang Lab de l'Université du Michigan :

from prothelpers.usalign import tmscore tmscore("data/prediction.pdb", "data/experimental.pdb", pymol="data/superimposed")

PDBchain1 PDBchain2 Score TM
data/prediction.pdb:A data/experimental.pdb:B 0.802

La score de modélisation de modèle (TM-score) est une métrique pour évaluer la similarité des structures protéiques. Un score de 1.0 indique une correspondance parfaite. Les scores supérieurs à 0.7 indiquent que les protéines partagent la même structure de squelette. Les scores supérieurs à 0.9 indiquent que les protéines sont fonctionnellement interchangeable pour une utilisation en aval. Dans notre cas d'obtention de TM-Score 0.802, la prédiction ESMFold serait probablement appropriée pour des applications telles que la notation de structure ou les expériences de liaison de ligand, mais peut ne pas convenir à des cas d'utilisation tels que remplacement moléculaire qui nécessitent une très grande précision.

Nous pouvons valider ce résultat en visualisant les structures alignées. Les deux structures présentent un degré de chevauchement élevé, mais pas parfait. La prédiction de la structure des protéines est un domaine en pleine évolution et de nombreuses équipes de recherche développent des algorithmes toujours plus précis !

Déployer ESMFold en tant que point de terminaison d'inférence SageMaker

L'exécution de l'inférence de modèle dans un bloc-notes convient à l'expérimentation, mais que se passe-t-il si vous devez intégrer votre modèle à une application ? Ou un pipeline MLOps ? Dans ce cas, une meilleure option consiste à déployer votre modèle en tant que point de terminaison d'inférence. Dans l'exemple suivant, nous allons déployer ESMFold en tant que point de terminaison d'inférence en temps réel SageMaker sur une instance accélérée. Les points de terminaison en temps réel SageMaker offrent un moyen évolutif, rentable et sécurisé de déployer et d'héberger des modèles d'apprentissage automatique (ML). Avec la mise à l'échelle automatique, vous pouvez ajuster le nombre d'instances exécutant le point de terminaison pour répondre aux exigences de votre application, optimiser les coûts et garantir une haute disponibilité.

Le pré-construit Conteneur SageMaker pour Hugging Face facilite le déploiement de modèles d'apprentissage en profondeur pour les tâches courantes. Cependant, pour de nouveaux cas d'utilisation comme la prédiction de la structure des protéines, nous devons définir un inference.py script pour charger le modèle, exécuter la prédiction et formater la sortie. Ce script inclut une grande partie du même code que nous avons utilisé dans notre cahier. Nous créons également un requirements.txt fichier pour définir certaines dépendances Python à utiliser par notre point de terminaison. Vous pouvez voir les fichiers que nous avons créés dans le GitHub référentiel.

Dans la figure suivante, les structures expérimentales (bleues) et prédites (rouges) de la chaîne lourde du trastuzumab sont très similaires, mais pas identiques.

Accélérez la prédiction de la structure des protéines avec le modèle de langage ESMFold sur Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Après avoir créé les fichiers nécessaires dans le code répertoire, nous déployons notre modèle à l'aide du SageMaker HuggingFaceModel classe. Cela utilise un conteneur pré-construit pour simplifier le processus de déploiement des modèles Hugging Face sur SageMaker. Notez que la création du point de terminaison peut prendre 10 minutes ou plus, selon la disponibilité de ml.g4dn types d'instances dans notre région.

from sagemaker.huggingface import HuggingFaceModel
from datetime import datetime huggingface_model = HuggingFaceModel(
model_data = model_artifact_s3_uri, # Previously staged in S3
name = f"emsfold-v1-model-" + datetime.now().strftime("%Y%m%d%s"),
transformers_version='4.17',
pytorch_version='1.10',
py_version='py38',
role=role,
source_dir = "code",
entry_point = "inference.py"
) rt_predictor = huggingface_model.deploy(
initial_instance_count = 1,
instance_type="ml.g4dn.2xlarge",
endpoint_name=f"my-esmfold-endpoint",
serializer = sagemaker.serializers.JSONSerializer(),
deserializer = sagemaker.deserializers.JSONDeserializer()
)

Une fois le déploiement du point de terminaison terminé, nous pouvons resoumettre la séquence protéique et afficher les premières lignes de la prédiction :

endpoint_prediction = rt_predictor.predict(experimental_sequence)[0]
print(endpoint_prediction[:900])

Étant donné que nous avons déployé notre point de terminaison sur une instance accélérée, la prédiction ne devrait prendre que quelques secondes. Chaque ligne du résultat correspond à un seul atome et comprend l'identité de l'acide aminé, trois coordonnées spatiales et un score pLDDT représentant la confiance de prédiction à cet emplacement.

PDB_GROUP ID ATOM_LABEL RES_ID CHAIN_ID SEQ_ID CARTN_X CARTN_Y CARTN_Z OCCUPATION PLDDT ATOM_ID
ATOM 1 N GLU A 1 14.578 - 19.953 1.47 1 0.83 N
ATOM 2 CA GLU A 1 13.166 - 19.595 1.577 1 0.84 C
ATOM 3 CA GLU A 1 12.737 - 18.693 0.423 1 0.86 C
ATOM 4 CB GLU A 1 12.886 - 18.906 2.915 1 0.8 C
ATOM 5 O GLU A 1 13.417 - 17.715 0.106 1 0.83 O
ATOM 6 cg GLU A 1 11.407 - 18.694 3.2 1 0.71 C
ATOM 7 cd GLU A 1 11.141 - 18.042 4.548 1 0.68 C
ATOM 8 OE1 GLU A 1 12.108 - 17.805 5.307 1 0.68 O
ATOM 9 OE2 GLU A 1 9.958 - 17.767 4.847 1 0.61 O
ATOM 10 N VAL A 2 11.678 - 19.063 - 0.258 1 0.87 N
ATOM 11 CA VAL A 2 11.207 - 18.309 - 1.415 1 0.87 C

En utilisant la même méthode que précédemment, nous constatons que les prédictions du bloc-notes et du point de terminaison sont identiques.

PDBchain1 PDBchain2 Score TM
data/endpoint_prediction.pdb:A data/prediction.pdb:A 1.0

Comme observé dans la figure suivante, les prédictions ESMFold générées dans le bloc-notes (rouge) et par le point de terminaison (bleu) montrent un alignement parfait.

Accélérez la prédiction de la structure des protéines avec le modèle de langage ESMFold sur Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Nettoyer

Pour éviter des frais supplémentaires, nous supprimons notre point de terminaison d'inférence et nos données de test :

rt_predictor.delete_endpoint()
bucket = boto_session.resource("s3").Bucket(bucket)
bucket.objects.filter(Prefix=prefix).delete()
os.system("rm -rf data obsolete code")

Résumé

La prédiction computationnelle de la structure des protéines est un outil essentiel pour comprendre la fonction des protéines. Outre la recherche fondamentale, des algorithmes comme AlphaFold et ESMFold ont de nombreuses applications en médecine et en biotechnologie. Les informations structurelles générées par ces modèles nous aident à mieux comprendre comment les biomolécules interagissent. Cela peut ensuite conduire à de meilleurs outils de diagnostic et à de meilleurs traitements pour les patients.

Dans cet article, nous montrons comment déployer le modèle de langage protéique ESMFold de Hugging Face Hub en tant que point de terminaison d'inférence évolutif à l'aide de SageMaker. Pour plus d'informations sur le déploiement des modèles Hugging Face sur SageMaker, reportez-vous à Utiliser l'étreinte du visage avec Amazon SageMaker. Vous pouvez également trouver plus d'exemples de science des protéines dans le Analyse de protéines impressionnante sur AWS Dépôt GitHub. S'il vous plaît laissez-nous un commentaire s'il y a d'autres exemples que vous aimeriez voir!


À propos des auteurs

Accélérez la prédiction de la structure des protéines avec le modèle de langage ESMFold sur Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Brian Loyal est architecte principal de solutions IA/ML au sein de l'équipe mondiale des soins de santé et des sciences de la vie chez Amazon Web Services. Il a plus de 17 ans d'expérience en biotechnologie et en apprentissage automatique, et se passionne pour aider les clients à résoudre les défis génomiques et protéomiques. Dans ses temps libres, il aime cuisiner et manger avec ses amis et sa famille.

Accélérez la prédiction de la structure des protéines avec le modèle de langage ESMFold sur Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Shamika Ariyawansa est architecte de solutions spécialisées en IA/ML au sein de l'équipe mondiale des soins de santé et des sciences de la vie chez Amazon Web Services. Il travaille avec passion avec les clients pour accélérer leur adoption de l'IA et du ML en leur fournissant des conseils techniques et en les aidant à innover et à créer des solutions cloud sécurisées sur AWS. En dehors du travail, il aime le ski et le tout-terrain.

Yanjun QiYanjun Qi est Senior Applied Science Manager au AWS Machine Learning Solution Lab. Elle innove et applique l'apprentissage automatique pour aider les clients d'AWS à accélérer leur adoption de l'IA et du cloud.

Horodatage:

Plus de Apprentissage automatique AWS