LLM - 搭建 ProteinGPT 结合蛋白质结构 PDB 知识的行业 ChatGPT 系统

news2024/11/16 3:25:55

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://blog.csdn.net/caroline_wendy/article/details/131403263

ProteinChat

论文:ProteinChat: Towards Enabling ChatGPT-Like Capabilities on Protein 3D Structures

工程:https://github.com/UCSD-AI4H/proteinchat

ProteinChat 是基于大型语言模型(LLM)的原型系统,能够根据蛋白质的三维结构进行问答和文本解释。ProteinChat 利用一个复合编码器块和一个 LLM 解码器块,协同工作,提供蛋白质相关的洞察。复合编码器块结合了一个图神经网络(GNN)编码器块和一个 Transformer 编码器块,有效地从蛋白质结构中提取重要特征。LLM 解码器利用编码器块生成的蛋白质嵌入和用户的问题,生成信息丰富的答案。为了训练 ProteinChat,构建了RCSB-PDB蛋白质描述数据集,包含了143,508个来自公开可用资源的蛋白质-描述对。ProteinChat 是第一个利用LLM来研究蛋白质的工作,为进一步探索和利用ChatGPT-like系统在蛋白质研究中的应用奠定了基础。

参考:LLM - 搭建 DrugGPT 结合药物化学分子知识的 ChatGPT 系统


1. 配置环境

下载工程与配置 conda 环境:

# 文件较多,下载需要一段时间
# git clone https://github.com/UCSD-AI4H/proteinchat
git clone git@github.com:UCSD-AI4H/proteinchat.git  # 建议使用git模式下载

cd proteinchat
conda env create -f environment.yml
conda activate proteinchat
pip install einops

建议参考 DrugGPT 的配置方案。

安装 pytorch 相关的包:

nvidia-smi
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.6 -c pytorch -c conda-forge

验证 PyTorch 通过:

python -c "import torchvision; print(torchvision.__version__)"
0.13.1
python -c "import torch; print(torch.__version__)"
1.12.1

准备数据集:

# 链接
https://drive.google.com/u/0/uc?id=1xdiBP-FPMfwpMGBUPAKd0FyRrqQtxAEK&export=download   # qa_all.json (499M)
https://drive.google.com/u/0/uc?id=1iMgPyiIzpvXdKiNsXnRKn2YpmP92Xyub&export=download   # abstract.json (182M) 
https://drive.google.com/u/0/uc?id=1AeJW5BY5C-d8mKJjAULTax6WA4hzWS0N&export=download   # 暂时无法访问

pip install gdown
gdown https://drive.google.com/uc?id=1xdiBP-FPMfwpMGBUPAKd0FyRrqQtxAEK  # 已下载完成
gdown https://drive.google.com/uc?id=1iMgPyiIzpvXdKiNsXnRKn2YpmP92Xyub  # 已下载完成

下载 Google云盘使用 gdown 软件,参考:GitHub gdown,注意本地可以使用,服务器需要连接外网。

ESM-IF1 数据问题,等待解决,暂时使用临时数据。


2. 训练模型

准备辅助模型:

  • bert-base-uncased:参考 CSDN - Hugging Face 工程 BERT base model (uncased) 配置
  • vicuna-13b-weight:参考 CSDN - 基于 Vicuna-13B 参数计算搭建私有 ChatGPT 在线聊天

准备训练数据:

  • pt:已经从 ESM-IF1 提取的 PDB 特征。
  • ann.json:PDB的描述信息

其中,ann.json 的数据如下:

[
    {
        "pdb_id": "6nk3",
        "caption": "Mxra8 is a receptor for multiple arthritogenic alphaviruses that cause debilitating acute and chronic musculoskeletal disease in humans. Herein, we present a 2.2\u00a0\u00c5 resolution X-ray crystal structure of Mxra8 and 4 to 5\u00a0\u00c5 resolution cryo-electron microscopy reconstructions of Mxra8 bound to chikungunya (CHIKV) virus-like particles and infectious virus. The Mxra8 ectodomain contains two strand-swapped Ig-like domains oriented in a unique disulfide-linked head-to-head arrangement. Mxra8 binds by wedging into a cleft created by two adjacent CHIKV E2-E1 heterodimers in one trimeric spike and engaging a neighboring spike. Two binding modes are observed with the fully mature VLP, with one Mxra8 binding with unique contacts. Only the high-affinity binding mode was observed in the complex with infectious CHIKV, as viral maturation and E3 occupancy appear to influence receptor binding-site usage. Our studies provide insight into how Mxra8 binds CHIKV and creates a path for developing alphavirus entry inhibitors."
    },
    {
        "pdb_id": "6dbp",
        "caption": "The MUSASHI (MSI) family of RNA binding proteins (MSI1 and MSI2) contribute to a wide spectrum of cancers including acute myeloid leukemia. We find that the small molecule Ro 08-2750 (Ro) binds directly and selectively to MSI2 and competes for its RNA binding in biochemical assays. Ro treatment in mouse and human myeloid leukemia cells results in an increase in differentiation and apoptosis, inhibition of known MSI-targets, and a shared global gene expression signature similar to shRNA depletion of MSI2. Ro demonstrates in vivo inhibition of c-MYC and reduces disease burden in a murine AML leukemia model. Thus, we identify a small molecule that targets MSI's oncogenic activity. Our study provides a framework for targeting RNA binding proteins in cancer."
    },
...
]

修改训练脚本train_esm.py,支持使用 mini 训练集 或 全量数据集:

datasets_raw = ESMDataset(pdb_root="data/esm_subset/pt",
                          ann_paths="data/esm_subset/ann.json",
                          chain="A")

修改配置文件 minigpt4/configs/models/minigpt4.yaml

llama_model: "workspace/vicuna-13b-weight"

修改模型文件 minigpt4/models/blip2.py,即辅助模型 bert-base-uncased 的路径,即:

class Blip2Base(BaseModel):
    @classmethod
    def init_tokenizer(cls):
        # tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
        tokenizer = BertTokenizer.from_pretrained("workspace_v2/bert-base-uncased")
        tokenizer.add_special_tokens({"bos_token": "[DEC]"})
        return tokenizer

运行训练脚本:

nvidia-smi
CUDA_VISIBLE_DEVICES=2 bash finetune.sh

运行异常,请参考 LLM - 搭建 DrugGPT 结合药物化学分子知识的 ChatGPT 系统

训练日志,如下:

2023-06-26 17:37:16,309 [INFO] Start training
2023-06-26 17:37:16,317 [INFO] Start training epoch 15, 762 iters per inner epoch.
Train: data epoch: [15]  [  0/762]  eta: 0:33:20  lr: 0.000010  loss: 1.3494  time: 2.6249  data: 0.0000  max mem: 35719
Train: data epoch: [15]  [ 50/762]  eta: 0:03:14  lr: 0.000010  loss: 1.3266  time: 0.2184  data: 0.0000  max mem: 35719
...
Train: data epoch: [99]  [750/762]  eta: 0:00:02  lr: 0.000001  loss: 0.5560  time: 0.1983  data: 0.0000  max mem: 35720
Train: data epoch: [99]  [761/762]  eta: 0:00:00  lr: 0.000001  loss: 0.2065  time: 0.2299  data: 0.0000  max mem: 35720
Train: data epoch: [99] Total time: 0:02:52 (0.2260 s / it)
2023-06-26 21:41:19,045 [INFO] Averaged stats: lr: 0.0000  loss: 0.4527
2023-06-26 21:41:19,132 [INFO] No validation splits found.
2023-06-26 21:41:19,139 [INFO] Saving checkpoint at epoch 99 to proteinchat/minigpt4/output/minigpt4_stage2_esm/20230626164/checkpoint_99.pth.
2023-06-26 21:41:19,377 [INFO] No validation splits found.
2023-06-26 21:41:19,377 [INFO] Training time 4:47:07

Bug: RuntimeError: The server socket has failed to listen on any local network address. The server socket has failed to bind to [::]:29500 (errno: 98 - Address already in use). The server socket has failed to bind to 0.0.0.0:29500 (errno: 98 - Address already in use).

参考:CSDN - Pytorch中DDP :The server socket has failed to bind to [::]:29500

具体而言,修改 finetune.sh 文件,torchrun 增加参数 --master_port,将默认的29500修改为29501,即可:

torchrun --master_port=29501 train_esm.py --cfg-path train_configs/minigpt4_stage2_esm.yaml

3. 推理模型

已训练完成,复制模型:

cp minigpt4/output/minigpt4_stage2_esm/20230626164/checkpoint_99.pth ckpt/checkpoint_99.pth

模型位于 ckpt/checkpoint_99.pth

修改推理配置 eval_configs/proteinchat_eval.yaml

ckpt: 'ckpt/checkpoint_99.pth'

修改网页脚本 demo_esm.py,增加端口和链接:

# 默认是 127.0.0.1 无法访问
demo.launch(share=True, enable_queue=True, server_name="0.0.0.0", server_port=9300)

运行程序:

CUDA_VISIBLE_DEVICES=2 bash demo.sh

运行成功,推理特征速度较慢。

ProteinChat

参考

  • CSDN - 在服务器上下载google云端硬盘文件

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

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

相关文章

C语言学习(二十九)---内存操作函数

在上一节内容中,我们学习了有关字符串操作的函数,其中分为了限制长度和不限制长度两种方式,虽然上节内容已经在很大程度上有助于程序的实现,但是其有一个致命的缺陷,聪明的你一定已经猜到了吧,对的&#xf…

Linux 网络通信C/S、TCP/IP、Socket 最全详解( 9 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the…

【算法题】动态规划中级阶段之不同的二叉搜索树、交错字符串

动态规划中级阶段 前言一、不同的二叉搜索树1.1、思路1.2、代码实现 二、不同的二叉搜索树 II2.1、思路2.2、代码实现 三、交错字符串3.1、思路3.2、代码实现 总结 前言 动态规划(Dynamic Programming,简称 DP)是一种解决多阶段决策过程最优…

Pycharm中成功配置PyQt5(External Tools),设计好界面直接生成python代码

1、安装PyQt5和PyQt5-tools 在Pycharm中设置好Python环境,点击File-Settings-Project-Python Interpreter 设置好后退出,点击窗口下的Terminal,输入 # 直接安装输入pip install pyqt5,如果太慢可以用国内镜像源,若出…

【C++实现二叉树的遍历】

目录 一、二叉树的结构二、二叉树的遍历方式三、源码 一、二叉树的结构 二、二叉树的遍历方式 先序遍历: 根–>左–>右中序遍历: 左–>根–>右后序遍历:左–>右–>根层次遍历:顶层–>底层 三、源码 注&am…

SpringBoot04:JSR303数据校验及多环境切换

目录 一、JSR303数据校验 1、如何使用? 2、常见参数 二、多环境切换 1、多配置文件 2、yaml的多文档块 3、配置文件加载位置 一、JSR303数据校验 1、如何使用? SpringBoot中可以用Validated来校验数据,如果数据异常则会统一抛出异常…

python篇---统计列表中每个数字的出现次数

python篇—统计列表中每个数字的出现次数 # -*- coding: utf-8 -*- from collections import Counterlst [1, 2, 3, 3, 4, 1, 2, 5, 5, 5] count Counter(lst) print(每个数字在列表中的出现次数:, count) # 再将collections.Counter格式转换成dict print(dict(c…

C# 难点语法讲解之虚方法(virtual)和隐藏方法的区别---从应用需求开始讲解

这里不单独讲虚方法和隐藏方法是什么&#xff0c;很多文章都有讲&#xff0c;这里只讲他们的区别和应用理解。 另外&#xff1a;如果你不懂MonoBehaviour就别管他&#xff0c; Debug.Log就是Console.WriteLine <一>、隐藏方法 一、隐藏方法的背景故事 从前有个了不起…

C++ | 多线程资源抢占bug解决

多线程资源抢占bug解决 文章目录 多线程资源抢占bug解决bug说明原因排查解决经验>>>>> 欢迎关注公众号【三戒纪元】 <<<<< bug说明 最近调试程序&#xff0c;程序在Release版本下可运行&#xff0c;一直没有问题&#xff0c;在Debug模式下编译后…

Leetcode42 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#xf…

【javascript】防止内容被复制

在JavaScript中&#xff0c;我们可以使用onselectstart事件来防止页面内容被选取。此时无法选取所要的内容。 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><script>window.onload function() {document.bod…

计算机网络————网络层

文章目录 网络层设计思路IP地址IP地址分类IP地址与硬件地址 协议ARP和RARPIP划分子网和构造超网划分子网构造超网&#xff08;无分类编址CIDR&#xff09; ICMP 虚拟专用网VPN和网络地址转换NATVPNNAT 网络层设计思路 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数…

mysql表中出现特殊符号(逗号,点号),如何进行查询或操作

mysql表中出现特殊符号&#xff08;逗号&#xff0c;点号&#xff09;&#xff0c;如何进行查询或操作 一、背景说明二、需要把表"引"起来&#xff0c;tab键上面的那个按钮&#xff0c;不是引号 一、背景说明 当mysql表名中出现如点号&#xff08;.&#xff09;&…

安装并使用docker

1、安装docker 1.1、更新现有的包列表&#xff1a; sudo apt update 1.2、用apt安装一些允许通过HTTPS才能使用的软件包&#xff1a; sudo apt install apt-transport-https ca-certificates curl software-properties-common 1.3、将官方Docker存储库的GPG密钥添加到您的系统…

二.Elasticsearch进阶

建议从这里开始看&#xff1a;Elasticsearch快速入门及使用 Elasticsearch进阶 一.Elasticsearch检索方式1.uri 检索参数(不常用)2.uri 请求体(常用&#xff0c;也叫Query DSL) 二.Query DSL语法举例1.match全文匹配2.match_phrase短语匹配3.multi_match多字段匹配4.bool复合…

在Gradio中创建交互式代码编辑器:介绍Code模块和其功能

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Matlab评价模型--灰色关联度分析

评价模型–灰色关联度分析 灰色关联度分析 基本思想 灰色关联分析的基本思想 是根据序列曲线几何形状的相似程度来判断其联系是否紧密&#xff0c;曲线越接近&#xff0c;相应序列之间的关联度就越大&#xff0c;反之则越小。 此方法可用于 进行系统分析&#xff0c;也可应用…

uniapp顶部导航栏被遮住显示问题

解决uniapp顶部导航栏被遮住显示问题 uniapp官方给了处理的方案&#xff0c;即css变量&#xff0c;–status-bar-height&#xff0c;小程序这个值是25px&#xff0c;app则根据实际情况去变化 如下&#xff1a; //头部导航栏 <view class"header"> </view…

【算法题】动态规划中级阶段之最长回文子串、括号生成、跳跃游戏

动态规划中级阶段 前言一、最长回文子串1.1、思路1.2、代码实现 二、括号生成2.1、思路2.2、代码实现 三、跳跃游戏 II3.2、思路3.2、代码实现 总结 前言 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种解决多阶段决策过程最优化问题的方法。…

加速你的容器管理!轻松安装kubeadm、kebelet和kubectl!

1 kubernetes镜像切换成国内源 访问 阿里云镜像&#xff1a; M1M2芯片的arm64架构需要更改&#xff1a; cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_6…