ESMC-600M蛋白质语言模型本地部署攻略

前言

之前介绍了ESMC-6B模型的网络接口调用方法,但申请token比较慢,有网友问能不能出一个本地部署ESMC小模型的攻略,遂有本文。

其实本地部署并不复杂,官方github上面也比较清楚了。

操作过程

环境配置:CUDA 12.1、torch 2.2.1+cu121、esm 3.1.1

完整的环境包列表:(因为做了些其他任务,这个里面其实不是所有都会用到,可以先把上面三个安装好,差哪些库再补哪些库)

Package                  Version
------------------------ ------------
asttokens                3.0.0
attrs                    24.3.0
biopython                1.84
biotite                  0.41.2
Brotli                   1.1.0
certifi                  2024.12.14
charset-normalizer       3.4.0
cloudpathlib             0.20.0
decorator                5.1.1
einops                   0.8.0
esm                      3.1.1
executing                2.1.0
filelock                 3.13.1
fsspec                   2024.2.0
huggingface-hub          0.27.0
idna                     3.10
ipython                  8.30.0
jedi                     0.19.2
Jinja2                   3.1.3
joblib                   1.4.2
MarkupSafe               2.1.5
matplotlib-inline        0.1.7
mpmath                   1.3.0
msgpack                  1.1.0
msgpack-numpy            0.4.8
networkx                 3.2.1
numpy                    1.26.3
nvidia-cublas-cu12       12.1.3.1
nvidia-cuda-cupti-cu12   12.1.105
nvidia-cuda-nvrtc-cu12   12.1.105
nvidia-cuda-runtime-cu12 12.1.105
nvidia-cudnn-cu12        8.9.2.26
nvidia-cufft-cu12        11.0.2.54
nvidia-curand-cu12       10.3.2.106
nvidia-cusolver-cu12     11.4.5.107
nvidia-cusparse-cu12     12.1.0.106
nvidia-nccl-cu12         2.19.3
nvidia-nvjitlink-cu12    12.1.105
nvidia-nvtx-cu12         12.1.105
packaging                24.2
pandas                   2.2.3
parso                    0.8.4
pexpect                  4.9.0
pillow                   10.2.0
pip                      24.2
prompt_toolkit           3.0.48
ptyprocess               0.7.0
pure_eval                0.2.3
Pygments                 2.18.0
python-dateutil          2.9.0.post0
pytz                     2024.2
PyYAML                   6.0.2
regex                    2024.11.6
requests                 2.32.3
safetensors              0.4.5
scikit-learn             1.6.0
scipy                    1.14.1
setuptools               75.1.0
six                      1.17.0
stack-data               0.6.3
sympy                    1.13.1
tenacity                 9.0.0
threadpoolctl            3.5.0
tokenizers               0.20.3
torch                    2.2.1+cu121
torchdata                0.7.1
torchtext                0.17.1
torchvision              0.17.1+cu121
tqdm                     4.67.1
traitlets                5.14.3
transformers             4.46.3
triton                   2.2.0
typing_extensions        4.9.0
tzdata                   2024.2
urllib3                  2.2.3
wcwidth                  0.2.13
wheel                    0.44.0

下载ESMC-600m的权重:

EvolutionaryScale/esmc-600m-2024-12 at main

下载之后把权重放在工作目录下的这个地址:data/weights

代码

和官方github上给出的例子比较类似,不过加了些修改。

from esm.models.esmc import ESMC
from esm.sdk.api import *
import torch
import os
import pickle
from esm.tokenization import EsmSequenceTokenizer# 使用预下载的参数
os.environ["INFRA_PROVIDER"] = "True"
device = torch.device("cuda:0")
client = ESMC.from_pretrained("esmc_600m",device=device)# 读取蛋白质序列,这里需要根据自己的数据格式进行调整
def read_seq(seqfilepath):with open(seqfilepath,"r") as f:line = f.readline()seq = f.readline()return seq# 这里沿用了上一次逆向出来的编码格式,可以替换为ESM自带的编码格式
all_amino_acid_number = {'A':5, 'C':23,'D':13,'E':9, 'F':18,'G':6, 'H':21,'I':12,'K':15,'L':4,'M':20,'N':17,'P':14,'Q':16,'R':10,'S':8, 'T':11,'V':7, 'W':22,'Y':19,'_':32}
def esm_encoder_seq(seq, pad_len):s = [all_amino_acid_number[x] for x in seq]while len(s)<pad_len:s.append(1)s.insert(0,0)s.append(2)return torch.tensor(s)def get_esm_embedding(seq):protein_tensor = ESMProteinTensor(sequence=esm_encoder_seq(seq,len(seq)).to(device))logits_output = client.logits(protein_tensor, LogitsConfig(sequence=True, return_embeddings=True))esm_embedding = logits_output.embeddingsassert isinstance(esm_embedding,torch.Tensor)return esm_embedding# 这个路径设置并不重要,可以自行调整
seq_path = "seq.fasta"
seq = read_seq(seq_path)
print(seq)# 获取序列embedding
seq_list = [seq]
emb = get_esm_embedding(seq)
with open("seq_emb.pkl","wb") as f:pickle.dump(emb,f)
print(emb.shape)

 随便用了一个序列,得到的运行结果,tensor形状是[1,序列长度+2,1152]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot中如何实现异步处理

在 Spring Boot 中实现异步处理可以通过使用 Async 注解和 EnableAsync 注解来实现。以下是如何配置和使用异步处理的步骤和示例代码。 步骤&#xff1a; 启用异步支持&#xff1a; 在 Spring Boot 配置类上使用 EnableAsync 注解启用异步处理。使用 Async 注解异步方法&…

HTML<hgroup>标签

例子&#xff1a; 使用hgroup元素标记标题和段落是相关的&#xff1a; <hgroup> <h2>Norway</h2> <p>The land with the midnight sun.</p> </hgroup> 定义和用法&#xff1a; 标签<hgroup>用于包围标题和一个或多个<p&g…

人工智能在医疗领域的应用与挑战

人工智能在医疗领域的应用与挑战 摘要&#xff1a;本文深入探讨了人工智能在医疗领域的应用现状&#xff0c;分析了其在疾病诊断、药物研发、医疗影像分析等方面的显著成果&#xff0c;同时也剖析了人工智能在医疗应用中面临的数据隐私、伦理道德、技术可靠性等挑战&#xff0…

JavaScript 验证 API:全面解析与实战指南

JavaScript 验证 API:全面解析与实战指南 引言 随着互联网技术的不断发展,前端开发领域的重要性日益凸显。JavaScript 作为前端开发的核心技术之一,其功能性和可扩展性得到了广泛关注。验证功能是JavaScript中不可或缺的一部分,它保证了用户输入数据的正确性和有效性。本…

web端ActiveMq测试工具

如何用vue3创建简单的web端ActiveMq测试工具&#xff1f; 1、复用vue3模板框架 创建main.js,引入APP文件&#xff0c;createApp创建文件&#xff0c;并加载element插件&#xff0c;然后挂载dom节点 2、配置vue.config.js脚本配置 mport { defineConfig } from "vite&qu…

3.DrawCall的概念

DrawCall是渲染管线中的一个重要概念&#xff0c;指的是CPU向GPU发送的一个绘制命令&#xff0c;告诉GPU&#xff1a;“请根据我提供的数据&#xff0c;画一个物体&#xff08;或一部分物体&#xff09;。” 通俗易懂讲解&#xff1a;DrawCall就像给画师下订单 想象你是一个老…

低代码系统-产品架构案例介绍、简道云(七)

今天分析另外一个零代码、低代码产品-简道云&#xff0c;跟所有低代码产品的架构图一样&#xff0c;高、大、炫、美。 依然是从下至上&#xff0c;从左到右的顺序。 开发层 搭建中心 表单、流程、报表、用户中心&#xff0c;还是这些内容&#xff0c;自定义打印很多平台都有&am…

【Oracle篇】使用Hint对优化器的执行计划进行干预(含单表、多表、查询块、声明四大类Hint干预)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…

C# lock使用的逻辑和情景

情景&#xff1a;扣库存&#xff0c;会出现超扣的情况&#xff0c;因为同一个单子会有不同的工作人员使用&#xff0c;要保证数据的一致性。那么就用锁。 优化锁对象管理 使用 Lazy 初始化锁对象&#xff1a; 使用 ConcurrentDictionary 的 GetOrAdd 方法结合 Lazy 确保锁对象只…

LabVIEW项目中的工控机与普通电脑选择

工控机&#xff08;Industrial PC&#xff09;与普通电脑在硬件设计、性能要求、稳定性、环境适应性等方面存在显著差异。了解这些区别对于在LabVIEW项目中选择合适的硬件至关重要。下面将详细分析这两种设备的主要差异&#xff0c;并为LabVIEW项目中的选择提供指导。 ​ 硬件设…

未初始化数据恢复全攻略

没有初始化概述 在日常使用电脑、硬盘、U盘等存储设备时&#xff0c;我们可能会遇到“没有初始化”的提示。这一情况通常发生在存储设备突然无法被系统正常识别或访问时&#xff0c;系统往往要求我们先进行初始化操作。然而&#xff0c;初始化操作意味着对存储设备进行格式化&…

Vue.js组件开发-如何实现全选反选

在 Vue.js 中实现全选和反选功能&#xff0c;可以通过结合v-model、计算属性和事件处理来完成。 实现思路 • 数据绑定&#xff1a;为每个复选框绑定一个选中状态。 • 全选控制&#xff1a;通过一个复选框控制所有复选框的选中状态。 • 反选控制&#xff1a;通过一个按钮或…

Mybatis——sql映射文件中的增删查改

映射文件内的增删查改 准备工作 准备一张数据表&#xff0c;用于进行数据库的相关操作。新建maven工程&#xff0c; 导入mysql-connector-java和mybatis依赖。新建一个实体类&#xff0c;类的字段要和数据表的数据对应编写接口编写mybatis主配置文件 public class User {priva…

Spring MVC (三) —— 实战演练

项目设计 我们会将前端的代码放入 static 包下&#xff1a; 高内聚&#xff0c;低耦合 这是我们在实现项目的设计思想&#xff0c;一个项目里存在很多个模块&#xff0c;每一个模块内部的要求类与类、方法与方法要相互配合紧密联系&#xff0c;这就是高内聚&#xff0c;低耦合…

Typescript泛型类详细解读

代码示例 (() > {// 定义一个类,类中的属性值的类型是不确定,方法中的参数及返回值的类型也是不确定// 定义一个泛型类class GenericNumber<T>{// 默认的属性的值的类型是泛型类型defaultValue: Tadd: (x: T, y: T) > Tconstructor(defaultValue: T) {this.defaul…

OpenCV:图像处理中的低通滤波

目录 简述 什么是低通滤波&#xff1f; 各种滤波器简介与实现 方盒滤波 均值滤波 中值滤波 高斯滤波 双边滤波 各种滤波的对比与应用场景 相关阅读 OpenCV基础&#xff1a;图像变换-CSDN博客 OpenCV&#xff1a;图像滤波、卷积与卷积核-CSDN博客 简述 低通滤波是一…

Vivado生成X1或X4位宽mcs文件并固化到flash

1.生成mcs文件 01.在vivado里的菜单栏选择"tools"工具栏 02.在"tools"里选择"生成内存配置文件" 03.配置参数 按照FPGA板上的flash型号进行选型&#xff0c;相关配置步骤可参考下图。 注意&#xff1a;Flash数据传输位宽如果需要选择X4位宽&am…

rust学习-rust中的保留字

rust学习-rust中的保留字 已使用的保留字未来可能使用的保留字 保留字是语言中预定义的标识符&#xff0c;不能用作变量名、函数名或其他自定义标识符&#xff0c;Rust的保留字大致可以分为两类&#xff1a;已使用的保留字和未来可能使用的保留字 已使用的保留字 as&#xff1…

【第七天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的分治算法(持续更新)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的分治算法2. 分治算法3.详细的分治代码1&#xff09;一种常见的分治算法 总结 前言 提示&#xff1a;这…

奖励模型:解析大语言模型的关键工具

标题&#xff1a;奖励模型&#xff1a;解析大语言模型的关键工具 文章信息摘要&#xff1a; 奖励模型是理解和审核大语言模型(LLM)的重要工具&#xff0c;通过简单的评估方式提供了模型内部表征和性能的深入洞察。它不仅能静态比较模型表现&#xff0c;还可帮助诊断训练问题&a…