安装 moleculeSTM 踩坑日记

“学习 LLM ,在大模型时代为自己存张船票”。
相信很多人都有这样的想法。那么,在 AI for science 领域,哪些 LLM 模型值得一试呢?
笔者认为:

  1. LLM 直接预测 SMILES 性质 or 直接生成 SMILES 的技术路线是行不通的。因为 SMILES 相比高精度 3D 数据是带有大量噪声的,从信息论的角度看,仅仅基于 SMILES 的模型是无法超过 3D 模型的。
  2. LLM 的优势是可交互性强,能够通过自然语言和用户交流,即 open vocabulary。适合做公司前台,预处理用户复杂需求。

在清楚 LLM 定位后,笔者认为,当前做得比较好的一项作品是 2023_nature machine intelligence_moleculeSTM 。

这篇文章为大家展示了很科幻的应用场景:LLM+分子编辑任务
用户输入一个分子,并添加对其描述,模型吐出修改后的分子,使其更符合需求。如下图所示:
在这里插入图片描述
在了解 moleculeSTM 后,相信大家都跃跃欲试,想要体验一下。这篇文章就记录下本人在安装过程中踩的坑:

1. 安装 apex

纵观 moleculeSTM 的多项依赖,apex 是安装难度最大的一个。apex 本身是 nvidia 开发的,用于加速神经网络特定模块。在原文档里,我们需要 clone 作者的分支并进行安装:

git clone https://github.com/chao1224/apex.git
cd apex
pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

其中难点在于,apex 要求环境中需要有 nvidia-cudakit,即

which nvcc

需要有响应。并且,pytorch 的版本需要跟 cuda 版本一致。例如,机器上的 cuda 型号是 12.1,这里只能安装在 cuda=12.1 下编译的 pytorch:

pip install -i http://mirrors.aliyun.com/pypi/simple/  --trusted-host mirrors.aliyun.com torch==2.0.0+cu121 -f https://download.pytorch.org/whl/cu121/torch_stable.html

在进行完这两项后,按照原文档可以将 apex 准备好。

2. 安装其他

基本上无需在意版本号,相对难度较低,按照原文档顺序安装即可。可能会缺一些东西,但基本上都很好解决,谷歌一下即可。一般来说,还需要再安装 nvidia-cutlass 库

3. 准备模型文件

首先,我们需要将 huggingface 上所有相关文件下载下来。一共是两个仓库,一个仓库是装 dataset 的,另一个仓库是装模型 checkpoint 的。
Dataset:
https://huggingface.co/datasets/chao1224/MoleculeSTM
Checkpoint:
https://huggingface.co/chao1224/MoleculeSTM/tree/main
如果网不好,可以淘宝找代下。
注意:
原作者在 issue 中指出,要想复现论文结果,我们需要载入特定模型:pretrained_MoleculeSTM/SciBERT-Graph-3e-5-1-1e-4-1-EBM_NCE-0.1-32-32
https://github.com/chao1224/MoleculeSTM/issues/16
这些模型可以在 hugging face 中找到。
准备好 moleculeSTM 相关文件后,我们还需要准备另外两份:

  1. 准备 pretrained_MegaMolBART,可以按照作者提供的脚本:https://github.com/chao1224/MoleculeSTM/blob/main/download_MegaMolBART.sh。但该脚本对我并不 work,随后是直接访问脚本中指向的谷歌链接,可以从那个地方下载:https://drive.usercontent.google.com/download?id=1O5u8b_n93HOrsjN1aezq6NhZojh-6dEe&export=download
  2. 准备 scibert。其实,如果开发机联网性能好的话,我们可以直接从 hugging face 中导入。但一般国内用户链接 hugging face 都比较困难。所以我这边还是选择直接下载好。原代码方法是:https://github.com/chao1224/MoleculeSTM/blob/9ba1584489369cd18bdc18d197e3bfdac6145d68/MoleculeSTM/downstream_molecule_edit_utils.py#L160。提前下载好,就是将此处的这个仓库下载到本地,并将这俩行中的地址进行替换,hugging face 地址在 https://huggingface.co/allenai/scibert_scivocab_uncased/tree/main

4. 开始跑

我们需要正确设定模型需要链接的位置。此处,我们以
https://github.com/chao1224/MoleculeSTM/blob/main/demos/demo_downstream_zero_shot_molecule_edit.ipynb
为例。我们需要修改所有改脚本中涉及文件路径的地方,将其改为,我们下载好的模型&数据目录。

最最最最后,可能还是跑不起来。
主要原因是,我们 load 的模型是在旧的 torch 框架下训练的。然而,由于第一条,我们开发机的 cuda 版本限制了 torch 版本。所以,我们只能将起冲突的地方,相关源码进行修改,使其适配新版本的 torch。以及,部分地方 load 的时候会报错:https://github.com/chao1224/MoleculeSTM/blob/9ba1584489369cd18bdc18d197e3bfdac6145d68/MoleculeSTM/downstream_molecule_edit_utils.py#L167
将其改为:

text_model.load_state_dict(state_dict, strict=False)

即可。
最终在经过长达一周的不断调试后,我在 cuda=12.1, torch=2.0.0 的开发机中成功跑通了 moleculeSTM,如下:
在这里插入图片描述
看到运行结果那一刻,我觉得所有的努力都是值得的,至少手里有了通往 LLM 时代的船票。

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

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

相关文章

搭建DNS正向解析,反向解析+搭建DNS主从架构+搭建DNS多区域+时间同步

主要在局域网中配置,不存在外网 正向解析:域名解析为IP named.conf 解决权限 named.rfc1912.zones 解决解析方式 环境准备:三台机器都做下面的操作 基础配置:网络配置,关闭安全架构,关闭防火墙&#x…

Redis常用命令第二版

目录 1. 连接 Redis 客户端 1.1 连接实例1: 1.2 连接实例2: 1.3 极速版查看键值命令: 1.4 获取 Redis 配置: 2. 启动 Redis 实例 2.1 启动实例1: 2.2 启动实例2: 2.3 启动253的实例: …

Linux相关指令

1.查看手册 man 3 free 2.调试 ①gcc link.c -g ②gbd a.out ③(gbd)r 运行 ④(gbd)q 退出 3.gcc demo8.c -lpthread -o demo8 //该指令将demo.c生成的a.out文件命名为demo8 。其中的-lpthread不是必须的,只有用到该库才输入加上。 4…/a.out 10 >>test.ret.t…

使用langchain4j调用大模型写个聊天助手

LangChain4j是一款基于Java的高效、灵活的AI大模型应用框架,专为简化Java应用程序与LLMs(大语言模型)的集成而设计。它提供统一API和模块化设计,支持多种LLM提供商和嵌入模型,以及丰富的工具箱,如AI服务和R…

光伏混合储能直流微网直流母线电压下垂控制MATLAB仿真

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 此模型以混合储能系统为研究对象,采用基于关联参数SOC的改进下垂控制策略,将初始下垂系数与储能单元SOC的n次幂的比值作为现行下垂系数,通过改变n值,…

【快速上手ESP32(ESP-IDF)】ADC数模转换(含单次转换和连续转换以及校准)

这篇为重置版。 因为准备录制视频了,然后回过头看看之前讲ADC的文章发现有不少错误的地方(但是代码是可以用的),而且讲的也不全面,因此决定写下这个重置版。 这边提供三种使用ADC的方法,第一种是老方法&a…

港科夜闻 | 香港科大与阿里巴巴合作,计划成立大数据与人工智能联合实验室

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与阿里巴巴合作,计划成立大数据与人工智能联合实验室。香港科大7月19日与阿里巴巴集团签署合作备忘录,计划成立「香港科技大学–阿里巴巴大数据与人工智能联合实验室」,就生成…

科普文:万字梳理31个Kafka问题

1、 kafka 是什么,有什么作用 2、Kafka为什么这么快 3、Kafka架构及名词解释 4、Kafka中的AR、ISR、OSR代表什么 5、HW、LEO代表什么 6、ISR收缩性 7、kafka follower如何与leader同步数据 8、Zookeeper 在 Kafka 中的作用(早期) 9、Kafka如何快…

frameworks 之BInder启动

frameworks 之BInder启动 调用 AppRuntime打开驱动 内存映射 ProcessStatePoolThread 开启 Binder 消息 进程在fork 的时候会初始化并启动对应的 Binder。 涉及到的类如下 frameworks/base/core/java/com/android/internal/os/ZygoteInit.javaframeworks/base/core/jni/include…

UDP程序设计

UDP协议概述 UDP,User Datagram Protocol,用户数据报协议,是一个简单的面向数据报(package-oriented)的传输层协议,规范为:RFC 768。 UDP提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去…

Java | Leetcode Java题解之第300题最长递增子序列

题目&#xff1a; 题解&#xff1a; class Solution {public int lengthOfLIS(int[] nums) {int len 1, n nums.length;if (n 0) {return 0;}int[] d new int[n 1];d[len] nums[0];for (int i 1; i < n; i) {if (nums[i] > d[len]) {d[len] nums[i];} else {int…

做一个能和你互动玩耍的智能机器人之四--固件

在openbot的firmware目录下我们能够找到arduino的固件源码和相关的文档。 openbot的controller目录下&#xff0c;是控制器的代码目录&#xff0c;用来控制机器人做一些动作。未来的目标是加入大模型&#xff0c;使其能够理解人的语言和动作来控制。 固件代码&#xff0c;支持…

利用小爱同学与点灯科技+esp8266+舵机,制作智能关灯神器:小白也可制作,米家同步设备可实现多部手机进行控制。(亲测有用)

利用小爱同学与点灯科技&#xff0c;制作智能关灯神器&#xff1a;小白也可制作&#xff0c;米家同步设备可实现多部手机进行控制。 文章目录 利用小爱同学与点灯科技&#xff0c;制作智能关灯神器&#xff1a;小白也可制作&#xff0c;米家同步设备可实现多部手机进行控制。1.…

19. Revit API: Parameter(参数)

一、前言 我们在前面或多或少提到也用到参数了&#xff0c;这篇便细讲一下。 首先&#xff0c;我们知道好多信息都藏在参数里&#xff0c;或者说可以从参数中获取。我们还能够通过调整参数的值&#xff0c;改变模型的形态&#xff0c;即族的参变。 其次&#xff0c;有时族上…

对接支付接口、分账系统、银行云账户如何与我们合作

以下是对接流程的优化版本&#xff0c;以提供更清晰的步骤和描述&#xff1a; 一、签约与打款&#xff1a; 客户完成合同签约。 同时进行首次打款&#xff0c;合同细节可以在后续补充。 二、对接服务专群&#xff1a; 客户与服务专群&#xff08;技术、客服等团队&#xff09;取…

一文讲透如何使用CSS美化HTML界面

上一篇文章(初识HTML文件&#xff0c;创建自己的第一个网页&#xff01;)介绍了HTML文件&#xff0c;并实战练习了如何编写一个结构简单的HTML网页&#xff0c;但最后也提到了单纯使用HTML语言创建的网页并不美观&#xff0c;有没有一个东西像PS能够美化图片一样让我们能够对我…

python 面向对象基础

1.self # 1. 定义类 class Washer (): def wash ( self ): print ( hellow world ) # <__main__.Washer object at 0x0000024BA2B34240> print ( self ) # 2. 创建对象 haier1 Washer () # <__main__.Washer object at 0x0000018B7B224240> print (…

RockyLinux 9.3 安装docker-ce

先安装yum工具 dnf install yum-utils -y

【前端 16】使用Ajax发送异步请求

Ajax 基础入门&#xff1a;实现异步请求 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。通过使用 Ajax&#xff0c;可以在后台与服务器交换数据&#xff0c;这意味着可以在不影响用户…

【代码】Python3|Scrapy框架初探(汽车之家大连市二手车车辆数据爬取、清洗与可视化)

本篇主要是整个项目的介绍&#xff0c;没提到太多琐碎的技术细节&#xff0c;以后有空的话会整理一下 Scrapy 和原生爬虫的差异&#xff0c;还有它坑人的一些地方&#xff0c;单发出来。 开源地址&#xff1a;https://github.com/shandianchengzi/car_home_spider 使用说明&a…