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

news2024/11/22 23:39:22

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

DrugChat

论文:DrugChat: Towards Enabling ChatGPT-Like Capabilities on Drug Molecule Graphs

DrugChat,基于图神经网络和大型语言模型的原型系统,能够实现类似ChatGPT的功能,对药物分子图进行交互式问答和文本描述。本文收集了两个包含药物分子图和问题答案配对的数据集,用于训练 DrugChat。DrugChat 的目标是革新与药物分子图的交互方式,加速药物发现,预测药物性质,提供药物设计和优化的建议等。这是第一个将图数据与大型语言模型结合的系统,可以扩展到其他类型的图数据分析。

系统的工作流程如下:

  1. 用户输入一个药物分子图或一个问题。
  2. 系统将药物分子图转换为一个图向量,然后将其与问题拼接起来,形成一个输入序列。
  3. 系统将输入序列输入到一个预训练的大型语言模型中,得到一个输出序列。
  4. 系统将输出序列解码为一个答案或一个文本描述,返回给用户。

部署的模型需要重新训练。


1. 配置环境

1.1 配置基础 Docker 环境

启动 Docker 环境:

nvidia-docker run -it --privileged --network bridge --shm-size 32G --name gpt-[your name] -p 9300:9300 -v /nfs:/nfs glm:nvidia-pytorch-1.11.0-cu116-py3

安装 conda 环境:

cd files/
bash Miniconda3-py38_23.3.1-0-Linux-x86_64.sh

配置 pip 环境:

rm /opt/conda/pip.conf
rm /root/.config/pip/pip.conf
rm /root/.pip/pip.conf
mkdir ~/.pip
vim ~/.pip/pip.conf

pip.conf中配置如下:

[global]
no-cache-dir = true
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
extra-index-url = https://pypi.ngc.nvidia.com
trusted-host = pypi.ngc.nvidia.com, pypi.tuna.tsinghua.edu.cn

配置 conda 环境:

cp .condarc ~/.conda/.condarc

.condarc中配置如下:

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
channel_priority: disabled
allow_conda_downgrades: true

完成全部配置:

source ~/.bashrc
nvidia-smi

2.2 配置专属 Docker 环境

构建 PyTorch 环境:

git clone https://github.com/UCSD-AI4H/drugchat
cd drugchat
cat environment.yml
conda env create -f environment.yml
conda activate drugchat

安装时间较长,请耐心等待。

检查 PyTorch 是否可用:

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

如果不可用,卸载 PyTorch,并重新安装:

conda list | grep "torch"
conda uninstall torch pytorch torchvision torchaudio cudatoolkit

检查 CUDA 环境,选择安装命令:

nvidia-smi
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.[6 or 4 by your version] -c pytorch -c conda-forge

构建 PyTorch Geometric 环境:

conda install pyg=2.3.0 pytorch-scatter=2.1.0 -c pyg

准备 vicuna_weights,由LLaMA-13B-hfVicuna-13B的参数合成:

# 参数位置
workspace/vicuna-13b-weight

参数地址,位于 pipeline/configs/models/drugchat.yaml,修改路径:

# Vicuna
llama_model: "/home/h5guo/shared/Mini-GPT4/vicuna_weights"

2. 训练模型

运行训练命令,确保没有任何错误:

nvidia-smi
CUDA_VISIBLE_DEVICES=1 bash finetune_gnn.sh
CUDA_VISIBLE_DEVICES=1 nohup bash finetune_gnn.sh > nohup.finetune_gnn.out &

等待运行完成,运行较慢 Loading LLAMA ,如遇问题,请参考 Bugfix 部分。

训练日志,大约需要4~5h * 10 = 40~50h,即3天,如下:

2023-06-25 15:47:38,120 [INFO] Start training epoch 0, 130458 iters per inner epoch.
Train: data epoch: [0]  [     0/130458]  eta: 2 days, 21:47:19  lr: 0.000001  loss: 2.5360  time: 1.9258  data: 0.0000  max mem: 27346
2023-06-25 15:47:40,048 [INFO] Reducer buckets have been rebuilt in this iteration.
Train: data epoch: [0]  [    50/130458]  eta: 5:54:04  lr: 0.000001  loss: 2.1791  time: 0.1299  data: 0.0000  max mem: 28622
...

输出的模型文件位于:

drugchat/pipeline/output/pipeline_stage2_finetune/20230625163

3. 推理模型

复制已训练的模型,例如:

# 第2个epoch
cp pipeline/output/pipeline_stage2_finetune/20230625163/checkpoint_2.pth ckpt/with_gnn_node_feat.pth

运行 SMILES 服务以及 Chat 服务:

pip install rdkit omegaconf
python dataset/smiles2graph_demo.py  # 启动SMILES解析服务

CUDA_VISIBLE_DEVICES=2 bash demo.sh  # 启动Chat服务

注意,需要修改 demo.pygradio服务的映射IP与端口,才能从Docker之外访问,即:

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

测试数据:

N=C(N)c1ccc(OCCCOc2ccc(C3=NCCN3)cc2)cc1
# CCN1C2=C(C(=O)N(C1=O)CC)N(C(=N2)C=CC3=CC(=C(C=C3)OC)OC)C
what masks this compound unique?
what diseases can this compound potentially treat?

SMILES 转换 PDB 的在线服务:https://novoprolabs.com/tools/smiles2pdb

化学分子如下:

Molecule

效果如下:

DrugGPT

下载开源数据的测试模型,参考

Bugfix

Bug1: ImportError: libGL.so.1: cannot open shared object file: No such file or directory

OpenCV 异常,安装相应的包即可

sudo apt-get update 
sudo apt-get install ffmpeg libsm6 libxext6  -y

安装时遇到时间选项:选择 6 (Asia) 和 70 (Shanghai)

Bug2: FileNotFoundError: [Errno 2] No such file or directory: ‘ckpt/with_gnn_node_feat.pth’

修改源码 pipeline/models/mini_gpt4.py

...
ckpt_path = cfg.get("ckpt", "")  # load weights of MiniGPT-4
import os
if ckpt_path and os.path.exists(ckpt_path):
    ckpt = torch.load(ckpt_path, map_location="cpu")
...

Bug3: RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling cublasCreate(handle)

CUDA缓存过低,使用 CUDA_VISIBLE_DEVICES 选择不同的卡:

nvidia-smi
CUDA_VISIBLE_DEVICES=1,2,3,5 bash finetune_gnn.sh

Bug4: SMILES 转换服务无法启动

修改 dataset/smiles2graph_demo.py 中的循环调用即可:

...
def smiles2graph(smiles_string):
    """
    Converts SMILES string to graph Data object
    :input: SMILES string (str)
    :return: graph object
    """

    mol = Chem.MolFromSmiles(smiles_string)
    if not mol:  # 避免异常
        return {}
...

参考:

  • CSDN - Docker的常用命令(Image、Container、Jupiter)
  • CSDN - 高性能的 PyTorch 训练环境配置 (PyTorch3D 和 FairScale)
  • CSDN - 基于 Vicuna-13B 参数计算搭建私有 ChatGPT 在线聊天
  • CSDN - ModuleNotFoundError: No module named torch_geometric
  • 基于Gradio可视化部署机器学习应用
  • StackOverflow - Docker app server ip address 127.0.0.1 difference of 0.0.0.0 ip

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

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

相关文章

便携式明渠流量计比对装置的基本要求

便携式明渠流量计比对装置的基本要求有哪些? 符合国标要求中对流量监测单元的比对(每2分钟采集一次数据,连续记录 6次数据与在线流量计数据进行液位误差比对,测量10分钟内的流量数据与在线流量计数据进行流量误差比对)…

springboot服务时间筛选问题,同一服务部署在本地和Linux服务器,同样的时间筛选数据不一致

项目场景: springboot项目通过时间筛选数据、 问题描述 时间筛选问题,同一服务部署在本地和Linux服务器,同样的时间筛选数据不一致 接收的参数 JsonFormat(pattern "yyyy-MM-dd") private Date queryDate;服务器打印日志出来的…

Linux常用命令——fsck命令

在线Linux命令查询工具 fsck 检查并且试图修复文件系统中的错误 补充说明 fsck命令被用于检查并且试图修复文件系统中的错误。当文件系统发生错误四化,可用fsck指令尝试加以修复。 语法 fsck(选项)(参数)选项 -a:自动修复文件系统,不询…

JavaScript数组遍历的各种方式

目录 第一种方式(for循环) 第二种方式(forEach 遍历) 第三种方式(for...in) 第四种方式(for...of) 第五种方式(map方法遍历) 六、性能对比 第一种方式&…

【yolov5系列】将yolov5s模型部署到SigmaStar的9383芯片上

今年年初,接触了星宸科技(sigmastar)的芯片9383,将深度学习模型进行部署,使用sigmastar的深度学习加速硬件IPU进行模型推理。这里简单记录下sigmastar相关内容。 补充说明,之前使用的是瑞芯微的芯片&#x…

大数据从0到1的完美落地之Flume案例_3

案例演示 案例演示:SyslogtcpMemLogger Syslogtcp: syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中…

经济统计类的实证论文解剖

整理来源 UP主:Michaelscholar https://space.bilibili.com/550661456/video 截图 1.读什么文献 国内:中文CSSCI 期刊:中国社会科学,经济研究,经济学(季刊),管理世界&#xff0…

MySQL数据库——主从复制

目录 前言一、读写分离概述1. 什么是读写分离?2. 为什么要读写分离呢?3. 什么时候要读写分离?4. 主从复制与读写分离5. mysq支持的复制类型6. 主从复制的工作过程7. MySQL主从复制延迟 二、主从复制配置方法 前言 在实际的生产环境中&#x…

c++ GoogleTest编译使用

编译 1.下载zip源码 2.解压,使用cmake生成工程 第一处填解压生成的文件夹 第二处的build路径可以不存在,点击configure会cmake提示创建 弹出界面中要选择自己的vs版本,选择finish。 然后点击generate,然后点击open Project。 生…

使用kubesphere搭建k8s集群

目录 1准备3台虚拟机 2 每台虚拟机更新yum的软件包,时间设置等 3 关闭防火墙 4 添加三台服务器的域名设置 5 设置三台服务器之间免密 6 安装kubesphere必要依赖,每个节点都要装,不然报错:socat not found in system path 7…

校园广播对讲音柱话筒

校园广播对讲话筒 校园广播对讲话筒:增强校园沟通的利器 提起校园广播对讲话筒,你或许会想到它在紧急情况下的应用。然而,这个功能强大的设备在校园内的广泛运用,不仅仅局限于危机解决。它成为了促进校园内部沟通、加强团队协作…

Tensorflow:from tensorflow.keras import layers 报错

执行代码: from tensorflow.keras import layers 报错: keras模块不存在 查,有其他博客表示keras包在tensorflow模块的pyhon包中; 于是: from tensorflow.python.keras import layers 在类似的如此调用keras的其…

chatgpt赋能python:Python能自动化办公吗?

Python能自动化办公吗? 在当今信息时代,办公工作中我们不可避免地要使用电脑,进行各种办公处理,比如文字处理、数据处理、图表制作等。这些操作看起来简单,但从事这些工作的人员都知道,日积月累之后&#…

【MySQL】不就是MySQL——多表查询综合练习

前言 嗨咯大家好!我们学习完毕了多表查询,今天我们就要对我们所学的成果进行测验,本期主要是对多表查询相关内容的练习课程。可以先试着自己敲,遇到不会可以查看查考代码。 目录 前言 目录 练习题 1.查询员工的姓名、年龄、职位…

HDFS常见的Shell操作

HDFS常见的Shell操作 文章目录 HDFS常见的Shell操作写在前面基本语法HDFS命令大全常用命令实操准备工作上传文件下载文件HDFS直接操作 写在前面 Hadoop版本:Hadoop-3.xLinux版本:CentOS7.5 HDFS的Shell操作是入门Hadoop开发的学习重点 基本语法 Shell客…

分布式批处理:MapReduce初探

大家好,我是方圆。《数据密集型应用系统设计》第十章中有介绍到 MapReduce 相关的内容,当时觉得看得意犹未尽,所以便找了一些资料又看了一下。随着深入发现能扩展的东西实在太多,考虑时间有限,准备先把 MapReduce 基础…

基于smardaten无代码快速开发智慧城管系统

0️⃣需求背景 现代城市管理的面临着一系列问题:如执法人员不足、信息化手段应用少和时间处理不及时等,开发一个智慧城管回访系统的需求与日俱增… 通过引入智慧城管回访系统,可以提高城市管理的科学性、智能化和透明度,为城市发…

【软考网络管理员】2023年软考网管初级常见知识考点(14)- linux命令及目录相关详解

涉及知识点 Linux 目录结构, Linux 常用命令, Linux 下的文件基本属性, Linux 的启动与关闭 软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 原创于:CSDN博主-《拄杖盲学轻声码》…

HTML5 游戏开发实战 | 推箱子

经典的推箱子是一个来自日本的古老游戏,目的是在训练玩家的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙地利用有限的空间和通道,合理…

java9新特性之-String存储结构变更--集合工厂方法-- InputStream 加强--增强的 Stream API讲解

String存储结构变更 Motivation The current implementation of the String class stores characters in a char array, using two bytes (sixteen bits) for each character. Data gathered from many different applications indicates that strings are a major component o…