在 Amazon SageMaker 上使用 ESMFold 语言模型加速蛋白质结构预测
蛋白质驱动着许多生物过程,如酶活性、分子输运和细胞支持。通过蛋白质的三维结构,可以深入了解蛋白质的功能以及蛋白质如何与其他生物分子相互作用。测定蛋白质结构的实验方法(如 X 射线晶体学和核磁共振波谱学)既昂贵又耗时。相比之下,最近开发的几种计算方法能够根据蛋白质的氨基酸序列快速准确地预测蛋白质的结构。这些方法对于难以通过实验研究的蛋白质至关重要,例如膜蛋白,它是许多药物的靶标。
在这些方法中,一个众所周知的例子是 AlphaFold,这是一种基于深度学习的算法,因其预测准确而闻名于世;来自 FAIR 的 ESMFold 是另一种基于深度学习的高精度方法,用于根据氨基酸序列预测蛋白质结构。ESMFold 以大型蛋白质语言模型(pLM)为骨干,进行端到端的操作。与 AlphaFold2 不同,这种方法不需要查找或 多序列比对(MSA)步骤,也不依赖外部数据库来生成预测结果。取而代之的是,FAIR Research 团队根据 UniRef 的数百万个蛋白质序列对模型进行了训练。在训练过程中,该模型开发了注意力模式,这些模式优雅地代表了序列中氨基酸之间的进化相互作用。使用 pLM 代替 MSA 后,可使预测时间比其他先进模型快60倍。这种速度使 FAIR 团队能够创建开源的 ESM 宏基因组图谱,该图谱由超过7.7亿个宏基因组蛋白质结构预测组成。
在本文中,我们使用 Hugging Face Hub 上提供的预训练 ESMFold 模型和 Amazon SageMaker,来预测曲妥珠单抗的重链结构,曲妥珠单抗是一种由 Genentech 首次开发的用于治疗 HER2 阳性乳腺癌的 单克隆抗体。如果研究人员想测试序列修饰的效果,快速预测这种蛋白质的结构可能非常有用。这有可能提高患者的生存率或减少药物副作用。这篇文章提供了一个 Jupyter notebook 示例,相关脚本位于以下 GitHub 存储库中:https://github.com/aws-samples/aws-healthcare-lifescience-ai-ml-sample-notebooks/tree/main/workshops/AI_Driven_Protein_Analysis
先决条件
我们建议在 Amazon SageMaker 工作室笔记本电脑中运行这个示例,该笔记本电脑在 ml.r5.xlarge 实例类型上运行 PyTorch 1.13 Python 3.9 CPU 优化的映像。
以视觉形式呈现
曲妥珠单抗的实验结构
首先,我们使用 biopython 库和辅助脚本从 RCSB 蛋白质数据库下载曲妥珠单抗结构:
from Bio.PDB import PDBList, MMCIFParser
from prothelpers.structure import atoms_to_pdbtarget_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 库将结构可视化为交互式 3D 视觉内容:
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()
左滑查看更多
下图显示了蛋白质数据库(PDB)中 1N8Z 的 3D 蛋白质结构。在此图中,曲妥珠单抗轻链显示为橙色,重链显示为蓝色(可变区为浅蓝色),HER2 抗原显示为绿色。
我们将首先使用 ESMFold,根据氨基酸序列预测重链(链 B)的结构。然后,将预测结果与上面显示的实验测定的结构进行对比。
使用 ESMFold
根据曲妥珠单抗重链序列预测其结构
让我们使用 ESMFold 模型来预测重链的结构,并将其与实验结果进行对比。首先,使用 Studio 中预置的 notebook 环境,该环境预装了几个重要的库,如 PyTorch。虽然我们能够使用加速实例类型来提高 notebook 分析的性能,但现在我们改用非加速实例,并在 CPU 上运行 ESMFold 预测。
首先,从 Hugging Face Hub 加载预训练的 ESMFold 模型和标记器:
from transformers import AutoTokenizer, EsmForProteinFoldingtokenizer = 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)
左滑查看更多
对于非加速实例类型(如 r5),这大约需要3分钟。
我们可以通过对比实验结构,来检验 ESMFold 预测的准确性。我们使用密歇根大学 Zhang Lab 开发的 US-Align 工具来完成这项工作:
from prothelpers.usalign import tmscoretmscore("data/prediction.pdb", "data/experimental.pdb", pymol="data/superimposed")
左滑查看更多
模板建模得分(TM-score)是评测蛋白质结构相似性的指标。得分为 1.0 表示完全匹配。得分高于 0.7 表示两个蛋白质具有相同的骨干结构。得分高于 0.9 表示蛋白质在下游使用中具有功能互换性。在我们的示例中,TM-Score 达到 0.802,表示 ESMFold 预测可能适用于结构评分或配体结合实验等应用,但可能不适用于分子置换等需要极高精度的使用案例。
我们可以通过可视化对齐结构来验证这一结果。这两个结构的重叠程度很高,但并不完全重叠。蛋白质结构预测是一个快速发展的领域,许多研究团队都在开发越来越精确的算法!
将 ESMFold 部署为
SageMaker 推理端点
在 notebook 中运行模型推理可用于实验目的,但如果需要将模型与应用程序集成呢?或者是与 MLOps 管道集成呢?在这种情况下,更好的选择是将模型部署为推理端点。在下面的示例中,我们将 ESMFold 作为 SageMaker 实时推理端点部署在加速实例上。SageMaker 实时端点提供了一种可扩展、经济高效且安全的方式来部署和托管机器学习(ML)模型。通过自动扩缩,您可以调整运行端点的实例数量以满足应用程序的需求,从而优化成本并确保高可用性。
利用预置的 Hugging Face 的 SageMaker 容器,可以轻松地为常见任务部署深度学习模型。然而,对于像蛋白质结构预测这样的新使用案例,我们需要定义一个自定义的 inference.py 脚本,来加载模型、运行预测和格式化输出内容。该脚本包含的代码与我们在 notebook 中使用的代码基本相同。我们还创建了一个 requirements.txt 文件来定义一些 Python 依赖关系,供我们的端点使用。您可以在 GitHub 存储库中看到我们创建的文件:https://github.com/aws-samples/aws-healthcare-lifescience-ai-ml-sample-notebooks/tree/main/workshops/AI_Driven_Protein_Analysis
在下图中,曲妥珠单抗重链的实验(蓝色)和预测(红色)结构非常相似,但并不完全相同。
在 code 目录中创建了必要的文件后,我们使用 SageMaker HuggingFaceModel 类部署模型。该类使用一个预置的容器,简化将 Hugging Face 模型部署到 SageMaker 的过程。请注意,创建端点可能需要 10 分钟或更长时间,具体取决于我们区域中 ml.g4dn 实例类型的可用性。
from sagemaker.huggingface import HuggingFaceModel
from datetime import datetimehuggingface_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 分数。
使用与以前相同的方法,我们可以看到 notebook 和端点的预测结果完全相同。
如下图所示,在 notebook 中生成的 ESMFold 预测结果(红色)与端点生成的预测结果(蓝色)完全一致。
清理
为了避免产生进一步的费用,我们删除了推理端点和测试数据:
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 等算法在医学和生物技术领域也有很多应用。利用这些模型生成的结构洞察,有助于我们更好地了解生物分子是如何相互作用的。这样就能为患者提供更好的诊断工具和疗法。
在这篇文章中,我们将展示如何使用 SageMaker 将 Hugging Face Hub 的 ESMFold 蛋白质语言模型部署为可扩展的推理端点。有关在 SageMaker 上部署 Hugging Face 模型的更多信息,请参阅结合使用 Hugging Face 与 Amazon SageMaker (https://docs.aws.amazon.com/sagemaker/latest/dg/hugging-face.html)。您还可以在 Awesome Protein Analysis on Amazon GitHub 存储库中找到更多蛋白质科学示例。
Original URL:
https://aws.amazon.com/blogs/machine-learning/accelerate-protein-structure-prediction-with-the-esmfold-language-model-on-amazon-sagemaker/
本篇作者
Brian Loyal
Amazon Web Services 全球医疗保健和生命科学团队的高级人工智能/机器学习解决方案架构师。他在生物技术和机器学习领域拥有超过17年的经验,热衷于协助客户解决基因组和蛋白质组学方面的难题。在业余时间,他喜欢烹饪,享受与朋友和家人的就餐时光。
Shamika Ariyawansa
Amazon Web Services 全球医疗保健和生命科学团队的人工智能/机器学习专业解决方案架构师。他热衷于与客户合作,通过提供技术指导,促进客户在亚马逊云科技上进行创新和构建安全的云解决方案,从而加快客户采用人工智能和机器学习的速度。工作之余,他喜欢滑雪和越野运动。
Yanjun Qi
Amazon Machine Learning 解决方案实验室的高级应用科学经理。她通过创新和运用机器学习,协助亚马逊云科技客户加快采用人工智能和云技术的速度。
星标不迷路,开发更极速!
关注后记得星标「亚马逊云开发者」
听说,点完下面4个按钮
就不会碰到bug了!
相关文章:

在 Amazon SageMaker 上使用 ESMFold 语言模型加速蛋白质结构预测
蛋白质驱动着许多生物过程,如酶活性、分子输运和细胞支持。通过蛋白质的三维结构,可以深入了解蛋白质的功能以及蛋白质如何与其他生物分子相互作用。测定蛋白质结构的实验方法(如 X 射线晶体学和核磁共振波谱学)既昂贵又耗时。相比…...
node.js知识系列(4)-每天了解一点
目录 11. 异步文件操作文件读取文件写入 12. 包管理器(npm)13. 子进程14. 事件发射器(EventEmitter)15. 异步编程和回调16. Node.js 集成测试工具和框架17. Express.js 中间件的 HTTP 请求流程18. 文件上传和验证19. Express.js 中…...

can not remove .unionfs
文件夹下出现unionfs 套娃,无法删除。 处理方式: 需要管理员权限umount之后删除使用fusermount -zu .unionfs ,然后再删除。...

微服务 BFF 架构设计
在现代软件开发中,由于程序、团队、数据规模太大,需要把企业的业务能力进行复用,将领域服务剥离,提供通用能力,避免重复建设和代码;另外服务功能的弹性能力不一样,比如定时任务、数据同步明确的…...
零基础学python之元组
文章目录 元组1、元组的应用场景2、定义元组3、元组的常见操作4、总结 元组 目标 元组的应用场景定义元组元组常见操作 1、元组的应用场景 思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做? 答:列…...

11. SpringBoot项目中参数获取与响应
SpringBoot项目中参数获取与响应 1. 程序结构&通信方式 程序结构: C/S : 客户端/服务器端 -Main方法。 -效果炫目、数据相对安全。 -公司成本高,因为要分别开发客户端和服务器端。 B/S: 浏览器端/服务器端 -效果依赖于浏览…...

4+1视图与UML
目录 逻辑视图过程视图开发视图物理视图(部署视图)用例视图 41视图,即逻辑视图,过程视图,实现视图,部署视图,用例视图。 为什么不用一个视图? 针对多个用户,即终端用户&a…...

没用的知识增加了,尝试用文心实现褒义词贬义词快速分类
尝试用文心实现褒义词贬义词快速分类 一、我的需求二、项目环境搭建千帆SDK安装及使用流程 三、项目实现过程创建应用获取签名调用接口计算向量积总结 百度世界大会将于10月17日在北京首钢园举办,今天进入倒计时五天了。通过官方渠道的信息了解到,这次是…...

AWS SAP-C02教程3--网络资源
架构设计中网络也是少不了的一个环节,而AWS有自身的网络结构和网络产品。本章中将带你看看AWS中不同网络产品,以及计算资源、存储资源等产品在网络架构中处于哪个位置,如何才能让它们与互联网互通、与其它产品互通。下图视图将SAP涉及到网络相关组件在一张图表示出来,图中可…...

【TensorFlow2 之012】TF2.0 中的 TF 迁移学习
#012 TensorFlow 2.0 中的 TF 迁移学习 一、说明 在这篇文章中,我们将展示如何在不从头开始构建计算机视觉模型的情况下构建它。迁移学习背后的想法是,在大型数据集上训练的神经网络可以将其知识应用于以前从未见过的数据集。也就是说,为什么…...

mysql面试题46:MySQL中datetime和timestamp的区别
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL中DATETIME和TIMESTAMP的区别 在MySQL中,DATETIME和TIMESTAMP是两种用于存储日期和时间的数据类型。虽然它们都可以用于存储日期和时间信息…...

【Spring Boot】RabbitMQ消息队列 — RabbitMQ入门
💠一名热衷于分享知识的程序员 💠乐于在CSDN上与广大开发者交流学习。 💠希望通过每一次学习,让更多读者了解我 💠也希望能结识更多志同道合的朋友。 💠将继续努力,不断提升自己的专业技能,创造更多价值。🌿欢迎来到@"衍生星球"的CSDN博文🌿 🍁本…...

Navicat定时任务
Navicat定时任务 1、启动Navicat for MySQL工具,连接数据库。 2、查询定时任务选项是否开启 查询命令:SHOW VARIABLES LIKE ‘%event_scheduler%’; ON表示打开,OFF表示关闭。 打开定时任务命令 SET GLOBAL event_scheduler 0; 或者 SET G…...

小白必备:简单几步, 使用Cpolar+Emlog在Ubuntu上搭建个人博客网站
文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总结 前言 博客作为使…...
封装 Token
什么是token? 作为计算机术语,是“令牌”的意思 。 Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请…...
CloudCompare 二次开发(17)——点云添加均匀分布的随机噪声
目录 一、概述二、代码集成三、结果展示一、概述 不依赖任何第三方点云相关库,使用CloudCompare编程实现点云添加随机噪声。添加随机噪声的算法原理见:PCL 点云添加均匀分布的随机噪声。 二、代码集成 1、mainwindow.h文件public中添加: void doActionAddRandomNoise(); …...

研发必会-异步编程利器之CompletableFuture(含源码 中)
近期热推文章: 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、基于Redis的Geo实现附近商铺搜索(含源码) 4、基于Redis实现关注、取关、共同关注及消息推送(含源码) 5…...

上海亚商投顾:沪指高开高走 锂电等新能源赛道大反攻
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日高开后强势震荡,创业板指盘中一度翻绿,随后探底回升再度走高。碳酸锂期货合约…...

力扣第235题 二又搜索树的最近公共祖先 c++
题目 235. 二叉搜索树的最近公共祖先 中等 (简单) 相关标签 树 深度优先搜索 二叉搜索树 二叉树 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q&…...

时代风口中的Web3.0基建平台,重新定义Web3.0!
近年来,Web3.0概念的广泛兴起,给加密行业带来了崭新的叙事方式,同时也为加密行业提供了更加具有想象力的应用场景与商业空间,并让越来越多的行业从业者们意识到只有更大众化的市场共性需求才能推动加密市场的持续繁荣。当前围绕这…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...