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

server/2025/2/1 3:32:30/

前言

之前介绍了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.ppmy.cn/server/163961.html

相关文章

AI 计算的未来:去中心化浪潮与全球竞争格局重塑

引言 人工智能(AI)正以前所未有的速度发展,尤其是大模型训练和推理效率的提升,使得 AI 计算成本迅速下降,呈现出向去中心化演进的趋势。 最新的 DeepSeek r1 模型,以仅 600 万美元 的训练成本,达到了 OpenAI o1 级别的性能,表明 AI 技术正迈向更具普惠性的阶段。这一趋…

Kotlin 委托详解

Kotlin 委托详解 引言 Kotlin 作为一种现代化的编程语言&#xff0c;在 Android 开发等领域得到了广泛的应用。在 Kotlin 中&#xff0c;委托&#xff08;Delegation&#xff09;是一种强大的特性&#xff0c;它可以让我们以更简洁的方式实现代码的复用和扩展。本文将详细解析…

系统思考—蝴蝶效应

“个体行为的微小差异&#xff0c;可能在系统中引发巨大且不可预测的结果。” — 诺贝尔经济学得主托马斯谢林 我们常说&#xff0c;小变动带来大影响&#xff0c;这种现象&#xff0c;在复杂系统理论中被称为“蝴蝶效应”&#xff1a;即使极小的变化&#xff0c;也能在动态系…

【ArcGIS遇上Python】批量提取多波段影像至单个波段

本案例基于ArcGIS python,将landsat影像的7个波段影像数据,批量提取至单个波段。 相关阅读:【ArcGIS微课1000例】0141:提取多波段影像中的单个波段 文章目录 一、数据准备二、效果比对二、python批处理1. 编写python代码2. 运行代码一、数据准备 实验数据及完整的python位…

分享几个好用的Edge扩展插件

为大家介绍几个实用的Edge扩展插件&#xff0c;它们能显著增强浏览器的功能&#xff0c;从广告拦截到视频倍速播放&#xff0c;从电子书搜索到双语翻译等&#xff0c;全方位提升使用体验。 AdGuard广告拦截器 能有效拦截网页弹窗、广告&#xff0c;提供多种自定义过滤选项&am…

springboot基于spark的保险平台用户行为分析与研究

基于Spring Boot和Spark的保险平台用户行为分析与研究是一个结合了现代后端开发框架与大数据处理技术的创新项目。 一、项目背景与意义 随着保险行业的快速发展&#xff0c;保险公司积累了大量的用户行为数据。这些数据包括用户的浏览记录、投保行为、理赔申请等&#xff0c;…

【数据结构】空间复杂度

目录 一、引入空间复杂度的原因 二、空间复杂度的分析 ❥ 2.1 程序运行时内存大小 ~ 程序本身大小 ❥ 2.2 程序运行时内存大小 ~ 算法运行时内存大小 ❥ 2.3 算法运行时内存大小 ❥ 2.4 不考虑算法全部运行空间的原因 三、空间复杂度 ❥ 3.1空间复杂度的定义 ❥ 3.2 空…

Excel - Binary和Text两种Compare方法

Option Compare statement VBA里可以定义默认使用的compare方法&#xff1a; Set the string comparison method to Binary. Option Compare Binary That is, "AAA" is less than "aaa". Set the string comparison method to Text. Option Compare Tex…