เร่งความเร็วการทำนายโครงสร้างโปรตีนด้วยโมเดลภาษา ESMFold บน Amazon SageMaker

เร่งความเร็วการทำนายโครงสร้างโปรตีนด้วยโมเดลภาษา ESMFold บน Amazon SageMaker

โปรตีนขับเคลื่อนกระบวนการทางชีวภาพหลายอย่าง เช่น กิจกรรมของเอนไซม์ การขนส่งโมเลกุล และการสนับสนุนเซลล์ โครงสร้างสามมิติของโปรตีนให้ข้อมูลเชิงลึกเกี่ยวกับหน้าที่และปฏิกิริยาของโปรตีนกับสารชีวโมเลกุลอื่นๆ วิธีการทดลองเพื่อระบุโครงสร้างโปรตีน เช่น X-ray crystallography และ NMR spectroscopy มีราคาแพงและใช้เวลานาน

ในทางตรงกันข้าม วิธีการคำนวณที่พัฒนาขึ้นเมื่อเร็วๆ นี้สามารถทำนายโครงสร้างของโปรตีนจากลำดับกรดอะมิโนได้อย่างรวดเร็วและแม่นยำ วิธีการเหล่านี้มีความสำคัญอย่างยิ่งต่อโปรตีนที่ยากต่อการศึกษาเชิงทดลอง เช่น โปรตีนเมมเบรน ซึ่งเป็นเป้าหมายของยาหลายชนิด ตัวอย่างหนึ่งที่รู้จักกันดีคือ อัลฟ่าโฟลด์อัลกอริทึมที่ใช้การเรียนรู้เชิงลึกได้รับการยกย่องจากการคาดการณ์ที่แม่นยำ

ESMFพับ เป็นวิธีการเรียนรู้เชิงลึกที่มีความแม่นยำสูงอีกวิธีหนึ่งที่พัฒนาขึ้นเพื่อทำนายโครงสร้างโปรตีนจากลำดับกรดอะมิโน ESMFold ใช้โมเดลภาษาโปรตีนขนาดใหญ่ (pLM) เป็นแกนหลักและดำเนินการตั้งแต่ต้นจนจบ ซึ่งแตกต่างจาก AlphaFold2 ตรงที่ไม่ต้องค้นหาหรือ การจัดตำแหน่งหลายลำดับ ขั้นตอน (MSA) และไม่ใช้ฐานข้อมูลภายนอกเพื่อสร้างการคาดการณ์ ทีมพัฒนาได้ฝึกฝนแบบจำลองเกี่ยวกับลำดับโปรตีนนับล้านจาก UniRef ในระหว่างการฝึกอบรม แบบจำลองได้พัฒนารูปแบบความสนใจที่แสดงถึงปฏิสัมพันธ์เชิงวิวัฒนาการระหว่างกรดอะมิโนในลำดับอย่างสวยงาม การใช้ pLM แทน MSA ทำให้สามารถคาดการณ์ได้เร็วกว่าโมเดลล้ำสมัยอื่นๆ ถึง 60 เท่า

ในโพสต์นี้ เราใช้โมเดล ESMFold ที่ฝึกไว้ล่วงหน้าจาก Hugging Face ด้วย อเมซอน SageMaker เพื่อทำนายโครงสร้างห่วงโซ่หนักของ ทราสตูซูแมบที่ โมโนโคลนอลแอนติบอดี พัฒนาโดย Genentech สำหรับการรักษา มะเร็งเต้านม HER2-positive. การทำนายโครงสร้างของโปรตีนอย่างรวดเร็วอาจมีประโยชน์หากนักวิจัยต้องการทดสอบผลของการดัดแปลงลำดับ สิ่งนี้อาจนำไปสู่การรอดชีวิตของผู้ป่วยที่ดีขึ้นหรือผลข้างเคียงน้อยลง

โพสต์นี้มีตัวอย่างสมุดบันทึก Jupyter และสคริปต์ที่เกี่ยวข้องดังต่อไปนี้ พื้นที่เก็บข้อมูล GitHub.

เบื้องต้น

เราขอแนะนำให้เรียกใช้ตัวอย่างนี้ใน สตูดิโอ Amazon SageMaker สมุดบันทึก รันอิมเมจ PyTorch 1.13 Python 3.9 CPU-optimized บนอินสแตนซ์ประเภท ml.r5.xlarge

เห็นภาพโครงสร้างการทดลองของ trastuzumab

ในการเริ่มต้นเราใช้ biopython ไลบรารีและสคริปต์ตัวช่วยเพื่อดาวน์โหลดโครงสร้าง trastuzumab จาก ธนาคารข้อมูลโปรตีน 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)

ต่อไปเราใช้ py3Dmol ห้องสมุดเพื่อแสดงภาพโครงสร้างเป็นการแสดงภาพ 3 มิติแบบโต้ตอบ:

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()

รูปต่อไปนี้แสดงถึงโครงสร้างโปรตีน 3 มิติ 1N8Z จาก Protein Data Bank (PDB) ในภาพนี้ สายเบาทราสตูซูแมบแสดงเป็นสีส้ม สายหนักเป็นสีน้ำเงิน (โดยมีบริเวณที่แปรผันเป็นสีฟ้าอ่อน) และแอนติเจน HER2 เป็นสีเขียว

เร่งการทำนายโครงสร้างโปรตีนด้วยโมเดลภาษา ESMFold บน Amazon SageMaker PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ก่อนอื่น เราจะใช้ ESMFold เพื่อทำนายโครงสร้างของสายหนัก (สาย B) จากลำดับกรดอะมิโน จากนั้นเราจะเปรียบเทียบการทำนายกับโครงสร้างที่กำหนดโดยการทดลองที่แสดงด้านบน

ทำนายโครงสร้างของโซ่หนัก Trastuzumab จากลำดับโดยใช้ ESMFold

ลองใช้แบบจำลอง ESMFold เพื่อทำนายโครงสร้างของห่วงโซ่หนักและเปรียบเทียบกับผลการทดลอง ในการเริ่มต้น เราจะใช้สภาพแวดล้อมของโน้ตบุ๊กที่สร้างไว้ล่วงหน้าใน Studio ที่มาพร้อมกับไลบรารี่สำคัญๆ มากมาย เช่น ไพทอร์ช, ติดตั้งล่วงหน้า. แม้ว่าเราจะสามารถใช้อินสแตนซ์ประเภทเร่งความเร็วเพื่อปรับปรุงประสิทธิภาพการวิเคราะห์โน้ตบุ๊กของเราได้ แต่เราจะใช้อินสแตนซ์ที่ไม่เร่งความเร็วแทน และเรียกใช้การคาดคะเน ESMFold บน CPU

ก่อนอื่น เราโหลดโมเดล ESMFold และโทเค็นไนเซอร์ที่ได้รับการฝึกอบรมล่วงหน้าจาก กอดใบหน้าฮับ:

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

ต่อไป เราคัดลอกโมเดลไปยังอุปกรณ์ของเรา (ในกรณีนี้คือ CPU) และตั้งค่าพารามิเตอร์ของโมเดล:

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

เพื่อเตรียมลำดับโปรตีนสำหรับการวิเคราะห์ เราจำเป็นต้องโทเค็น สิ่งนี้แปลสัญลักษณ์กรดอะมิโน (EVQLV…) เป็นรูปแบบตัวเลขที่โมเดล ESMFold สามารถเข้าใจได้ (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)

ต่อไป เราคัดลอกอินพุตที่เป็นโทเค็นไปยังโหมด ทำการคาดคะเน และบันทึกผลลัพธ์ลงในไฟล์:

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

ซึ่งจะใช้เวลาประมาณ 3 นาทีสำหรับประเภทอินสแตนซ์ที่ไม่เร่งความเร็ว เช่น r5

เราสามารถตรวจสอบความถูกต้องของการทำนาย ESMFold โดยเปรียบเทียบกับโครงสร้างการทดลอง เราทำสิ่งนี้โดยใช้ US-จัดตำแหน่ง เครื่องมือที่พัฒนาโดย Zhang Lab แห่งมหาวิทยาลัยมิชิแกน:

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

พีดีบีเชน1 พีดีบีเชน2 คะแนน TM
data/prediction.pdb:ก ข้อมูล/experimental.pdb:B 0.802

พื้นที่ คะแนนการสร้างแบบจำลองเทมเพลต (TM-score) เป็นตัวชี้วัดสำหรับการประเมินความคล้ายคลึงกันของโครงสร้างโปรตีน คะแนน 1.0 หมายถึงการจับคู่ที่สมบูรณ์แบบ คะแนนที่สูงกว่า 0.7 แสดงว่าโปรตีนมีโครงสร้างกระดูกสันหลังเหมือนกัน คะแนนที่สูงกว่า 0.9 แสดงว่ามีโปรตีน ใช้แทนกันได้ สำหรับการใช้งานด้านปลายน้ำ ในกรณีของเราที่ได้ TM-Score 0.802 การคาดคะเน ESMFold น่าจะเหมาะสมสำหรับการใช้งาน เช่น การให้คะแนนโครงสร้างหรือการทดสอบการจับลิแกนด์ แต่อาจไม่เหมาะกับกรณีการใช้งานเช่น การแทนที่โมเลกุล ที่ต้องการความแม่นยำสูงมาก

เราสามารถตรวจสอบผลลัพธ์นี้ได้โดยการแสดงภาพโครงสร้างที่สอดคล้องกัน โครงสร้างทั้งสองแสดงระดับการทับซ้อนกันสูง แต่ไม่สมบูรณ์ การคาดคะเนโครงสร้างโปรตีนเป็นสาขาที่มีการพัฒนาอย่างรวดเร็ว และทีมวิจัยจำนวนมากกำลังพัฒนาอัลกอริทึมที่แม่นยำยิ่งขึ้น!

ปรับใช้ ESMFold เป็นจุดสิ้นสุดการอนุมานของ SageMaker

การเรียกใช้การอนุมานโมเดลในโน้ตบุ๊กนั้นดีสำหรับการทดลอง แต่ถ้าคุณต้องการรวมโมเดลของคุณเข้ากับแอปพลิเคชันล่ะ หรือไปป์ไลน์ MLOps? ในกรณีนี้ ตัวเลือกที่ดีกว่าคือการปรับใช้โมเดลของคุณเป็นจุดสิ้นสุดการอนุมาน ในตัวอย่างต่อไปนี้ เราจะปรับใช้ ESMFold เป็นจุดสิ้นสุดการอนุมานแบบเรียลไทม์ของ SageMaker บนอินสแตนซ์แบบเร่งความเร็ว ตำแหน่งข้อมูลแบบเรียลไทม์ของ SageMaker มอบวิธีการปรับใช้และโฮสต์โมเดลแมชชีนเลิร์นนิง (ML) ที่ปรับขนาดได้ ประหยัดค่าใช้จ่าย และปลอดภัย ด้วยการปรับขนาดอัตโนมัติ คุณสามารถปรับจำนวนอินสแตนซ์ที่เรียกใช้จุดสิ้นสุดเพื่อให้ตรงกับความต้องการของแอปพลิเคชันของคุณ ปรับต้นทุนให้เหมาะสมและรับประกันความพร้อมใช้งานสูง

ที่สร้างไว้ล่วงหน้า คอนเทนเนอร์ SageMaker สำหรับ Hugging Face ทำให้ปรับใช้โมเดลการเรียนรู้เชิงลึกสำหรับงานทั่วไปได้ง่าย อย่างไรก็ตาม สำหรับกรณีการใช้งานใหม่ เช่น การทำนายโครงสร้างโปรตีน เราจำเป็นต้องกำหนดแบบกำหนดเอง inference.py สคริปต์เพื่อโหลดโมเดล รันการคาดคะเน และจัดรูปแบบเอาต์พุต สคริปต์นี้มีรหัสเดียวกันกับที่เราใช้ในสมุดบันทึกของเรา เรายังสร้าง requirements.txt ไฟล์เพื่อกำหนดการอ้างอิง Python สำหรับปลายทางของเราที่จะใช้ คุณสามารถดูไฟล์ที่เราสร้างขึ้นในไฟล์ พื้นที่เก็บข้อมูล GitHub.

ในรูปต่อไปนี้ โครงสร้างการทดลอง (สีน้ำเงิน) และที่คาดการณ์ไว้ (สีแดง) ของสายโซ่หนักทราสตูซูแมบคล้ายกันมาก แต่ไม่เหมือนกัน

เร่งการทำนายโครงสร้างโปรตีนด้วยโมเดลภาษา ESMFold บน Amazon SageMaker PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

หลังจากที่เราสร้างไฟล์ที่จำเป็นในไฟล์ code ไดเร็กทอรี เราปรับใช้โมเดลของเราโดยใช้ SageMaker HuggingFaceModel ระดับ. สิ่งนี้ใช้คอนเทนเนอร์ที่สร้างไว้ล่วงหน้าเพื่อลดความซับซ้อนของกระบวนการปรับใช้โมเดล Hugging Face กับ SageMaker โปรดทราบว่าอาจใช้เวลา 10 นาทีขึ้นไปในการสร้างจุดสิ้นสุด ขึ้นอยู่กับความพร้อมใช้งานของ ml.g4dn ประเภทอินสแตนซ์ในภูมิภาคของเรา

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()
)

เมื่อการใช้งานปลายทางเสร็จสิ้น เราสามารถส่งลำดับโปรตีนอีกครั้งและแสดงสองสามแถวแรกของการคาดคะเน:

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

เนื่องจากเราปรับใช้จุดสิ้นสุดของเรากับอินสแตนซ์แบบเร่ง การคาดคะเนจึงใช้เวลาเพียงไม่กี่วินาที แต่ละแถวในผลลัพธ์จะสอดคล้องกับอะตอมเดี่ยวและรวมถึงเอกลักษณ์ของกรดอะมิโน พิกัดเชิงพื้นที่สามพิกัด และ คะแนน pLDDT แสดงถึงความเชื่อมั่นในการทำนาย ณ ตำแหน่งนั้นๆ

PDB_GROUP ID อะตอม_ฉลาก RES_ID CHAIN_ID SEQ_ID CARTN_X CARTN_Y CARTN_Z ครอบครอง พีแอลดีที อะตอม_ไอดี
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

โดยใช้วิธีเดียวกับก่อนหน้านี้ เราจะเห็นว่าการคาดการณ์ของโน้ตบุ๊กและจุดสิ้นสุดนั้นเหมือนกัน

พีดีบีเชน1 พีดีบีเชน2 คะแนน TM
data/endpoint_prediction.pdb:ก data/prediction.pdb:ก 1.0

ตามที่สังเกตในรูปต่อไปนี้ การคาดคะเน ESMFold ที่สร้างขึ้นในโน้ตบุ๊ก (สีแดง) และโดยจุดสิ้นสุด (สีน้ำเงิน) แสดงการจัดตำแหน่งที่สมบูรณ์แบบ

เร่งการทำนายโครงสร้างโปรตีนด้วยโมเดลภาษา ESMFold บน Amazon SageMaker PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ทำความสะอาด

เพื่อหลีกเลี่ยงการเรียกเก็บเงินเพิ่มเติม เราจะลบข้อมูลปลายทางการอนุมานและข้อมูลการทดสอบ:

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

สรุป

การทำนายโครงสร้างโปรตีนด้วยคอมพิวเตอร์เป็นเครื่องมือสำคัญในการทำความเข้าใจการทำงานของโปรตีน นอกเหนือจากการวิจัยพื้นฐานแล้ว อัลกอริทึมอย่าง AlphaFold และ ESMFold ยังมีการประยุกต์ใช้มากมายในด้านการแพทย์และเทคโนโลยีชีวภาพ ข้อมูลเชิงลึกเชิงโครงสร้างที่สร้างขึ้นโดยแบบจำลองเหล่านี้ช่วยให้เราเข้าใจได้ดีขึ้นว่าชีวโมเลกุลมีปฏิสัมพันธ์กันอย่างไร สิ่งนี้สามารถนำไปสู่เครื่องมือวินิจฉัยและการรักษาที่ดีขึ้นสำหรับผู้ป่วย

ในโพสต์นี้ เราจะแสดงวิธีการปรับใช้โมเดลภาษาโปรตีน ESMFold จาก Hugging Face Hub เป็นจุดสิ้นสุดการอนุมานที่ปรับขนาดได้โดยใช้ SageMaker สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการปรับใช้โมเดล Hugging Face บน SageMaker โปรดดูที่ ใช้การกอดใบหน้ากับ Amazon SageMaker. คุณยังสามารถหาตัวอย่างทางวิทยาศาสตร์เกี่ยวกับโปรตีนเพิ่มเติมได้ใน การวิเคราะห์โปรตีนที่ยอดเยี่ยมบน AWS ที่เก็บ GitHub โปรดแสดงความคิดเห็นหากมีตัวอย่างอื่นๆ ที่คุณต้องการดู!


เกี่ยวกับผู้เขียน

เร่งการทำนายโครงสร้างโปรตีนด้วยโมเดลภาษา ESMFold บน Amazon SageMaker PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.ไบรอัน ภักดี เป็นสถาปนิกอาวุโสด้าน AI/ML Solutions ในทีม Global Healthcare and Life Sciences ที่ Amazon Web Services เขามีประสบการณ์มากกว่า 17 ปีในด้านเทคโนโลยีชีวภาพและแมชชีนเลิร์นนิง และมีความกระตือรือร้นในการช่วยลูกค้าแก้ปัญหาด้านจีโนมและโปรตีโอมิก ในเวลาว่าง เขาชอบทำอาหารและทานอาหารกับเพื่อนและครอบครัว

เร่งการทำนายโครงสร้างโปรตีนด้วยโมเดลภาษา ESMFold บน Amazon SageMaker PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.ชามิกา อริยวรรณศ เป็นสถาปนิก AI/ML Specialist Solutions ในทีม Global Healthcare and Life Sciences ที่ Amazon Web Services เขาทำงานร่วมกับลูกค้าอย่างกระตือรือร้นเพื่อเร่งการนำ AI และ ML ไปใช้โดยให้คำแนะนำทางเทคนิคและช่วยพวกเขาคิดค้นและสร้างโซลูชันระบบคลาวด์ที่ปลอดภัยบน AWS นอกเวลางาน เขาชอบเล่นสกีและขับรถวิบาก

หยานจุนฉีหยานจุนฉี เป็นผู้จัดการวิทยาศาสตร์ประยุกต์อาวุโสที่ AWS Machine Learning Solution Lab เธอคิดค้นและใช้แมชชีนเลิร์นนิงเพื่อช่วยให้ลูกค้า AWS เร่งการนำ AI และระบบคลาวด์ไปใช้

ประทับเวลา:

เพิ่มเติมจาก AWS Machine Learning AWS