安装 moleculeSTM 踩坑日记

news2024/11/17 2:30:23

“学习 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.coloradmin.cn/o/1956176.html

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

相关文章

成为git砖家(6): git restore 命令

文章目录 1. git restore 命令是新命令2. git官方对于restore命令的说明3. 总结 1. git restore 命令是新命令 在2019年8月发布的 Git 2.23 版本中,git checkout 命令的功能被拆解到两个新的命令中: git switch: 负责分支相关的操作git restore: 负责文…

微信小程序教程001:小程序简介

文章目录 学习目标小程序简介1、小程序和普通网页开发的区别2、注册小程序账号3、获取小程序的AppID4、安装开发者工具4.1 了解开发者工具4.2 下载开发工具 5、设置开发者工具外观 学习目标 如何创建小程序项目小程序项目的基本组成结构小程序页面由几部分组成小程序常见的组件…

Vscode——如何快速搜索项目工程中的某个文件的位置

第一步:按 shift ctrl p 第二步:然后把 > 删除 第三步:输入文件名称即可

Linux环境docker部署Firefox结合内网穿透远程使用浏览器测试

文章目录 前言1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox 前言 本次实践部署环境为本地Linux环境,使用Docker部署Firefox浏览器后,并结合cpolar内网穿…

永磁同步电机双矢量模型预测(MPC)电流控制MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 在电流环中采用双矢量模型预测电流控制方法,该方法在每一个采样周期中进行两次电压矢量选择,可以在进行第二次电压矢 量选择时采用非零电压矢量,电压矢量的选择范…

RAG优化技巧 | 7大挑战与解決方式 | 提高你的LLM: 下篇

RAG优化技巧 | 7大挑战与解决方式 | 提高你的LLM:下篇 在当今快速发展的人工智能领域,大型语言模型(LLM)已经成为无处不在的技术,它们不仅改变了我们与机器交流的方式,还在各行各业中发挥着革命性的影响。…

算法笔记--哈希表

创建和使用Python字典(哈希表) 在Python中,哈希表通常是通过字典(dict)来实现的。 字典是一种可变容器模型,可以存储任意类型的对象,如字符串、数字、元组等其他容器模型。 字典的每个键值对…

GAT知识总结

《GRAPH ATTENTION NETWORKS》 解决GNN聚合邻居节点的时候没有考虑到不同的邻居节点重要性不同的问题,GAT借鉴了Transformer的idea,引入masked self-attention机制, 在计算图中的每个节点的表示的时候,会根据邻居节点特征的不同来…

【文生视频系列】MoneyPrinterTurbo项目初探

1. 背景介绍 一直有在关注文生视频方面的进展信息。比较知名的可能还是sora这类文生视频模型。但今天要讲的是另外的文生视频项目,也是偶然间在git上看到的,项目名称叫MoneyPrinterTurbo,是基于MoneyPrinter项目增加了中文支持&#xff0c…

R语言统计分析——自编函数

参考资料&#xff1a;R语言统计分析【第2版】 一个函数的结构大致如此&#xff1a; myfunction<-function(arg1,arg2,...){ statements return(object) } 函数中的对象只在函数内部使用。返回对象的数据类型是任意的。 假设我们要编写一个函数&#xff0c;用来计算数据对象…

【C++BFS算法 二分查找】2812. 找出最安全路径

本文涉及知识点 CBFS算法 C二分查找 LeetCode2812. 找出最安全路径 给你一个下标从 0 开始、大小为 n x n 的二维矩阵 grid &#xff0c;其中 (r, c) 表示&#xff1a; 如果 grid[r][c] 1 &#xff0c;则表示一个存在小偷的单元格 如果 grid[r][c] 0 &#xff0c;则表示一…

【C语言篇】C语言常见概念

文章目录 C语言常见概念C语言是什么C语⾔的历史和辉煌编译器选择编译和连接编译器对比 第一段C语言代码main函数库函数关键字介绍字符和ASCII编码转义字符语句空语句表达式语句函数调⽤语句复合语句控制语句 注释两种形式/* */的形式//形式注释会被替换注释会被替换 C语言常见概…

关键路径算法(Critical Path)

这个算法《算法导论》中并没有提及&#xff0c;很多书和博客说的有点奇怪&#xff0c;所以写本文作为笔记。 关键路径是什么 关键路径的定义非常简单&#xff1a;就是一个图中&#xff0c;权值之和最大的路径就是关键路径。 那么就可以知道关键路径不唯一。 为什么有关键路…

让大脑处于顶峰的14个保养技巧

让大脑处于顶峰的14个保养技巧 阅读。 之所以第一个写阅读&#xff0c;是因为阅读需要大脑将已认知的信息与新接触信息结合从而更容易激发人的想象力&#xff0c;而图片与视频虽然更直观&#xff0c;但理解和思考的过程却缩短了&#xff0c;大脑得到的锻炼也十分局限。阅读是让…

Typesript的type和interface的异同?

详解TypeScript中type与interface的区别_javascript技巧_脚本之家 一、相同的地方 1、都可以用来定义对象&#xff0c;描述函数 我们在用typescript开发的时候经常要用到数据类型定义&#xff0c;比如我们写一个接口或者函数的时候定义传参数据类型及字段等。这样子方便知道这…

opencascade AIS_PointCloud源码学习

AIS_PointCloud 前言 交互对象用于一组点。 表示支持两种显示模式&#xff1a; 点。 用于高亮显示的边界框。 表示通过边界框提供选择。 选择和高亮显示可以通过将默认选择模式设置为 -1 来禁用。 这样在交互视图中将无法选择对象。任何调用 AIS_InteractiveContext::AddOrRem…

Lua编程

文章目录 概述lua数据类型元表注意 闭包表现 实现 lua/c 接口编程skynet中调用层次虚拟栈C闭包注册表userdatalightuserdata 小结 概述 这次是skynet&#xff0c;需要一些lua/c相关的。写一篇博客&#xff0c;记录下。希望有所收获。 lua数据类型 boolean , number , string…

【一图学技术】2.API测试9种方法图解

9种API测试方法 冒烟测试&#xff1a;冒烟测试是一种快速的表面级测试&#xff0c;用于验证软件的基本功能是否正常工作&#xff0c;以确定是否值得进行更详细的测试。功能测试&#xff1a;功能测试是验证软件是否符合预期功能要求的测试类型。它涉及对每个功能进行测试&#…

[C++进阶]对于多态的底层逻辑

上回我们了解到了多态的定义,概念以及实现,对于多态如何使用和使用条件进行了了解,本篇我们将了解多态的原理。 一、虚函数表 首先我们看看如下代码&#xff1a; #include<iostream> using namespace std; class Base { public:virtual void Func1(){cout << &qu…