PSP - 基于擴散生成模型預測蛋白質結構 EigenFold 算法與環境配置

歡迎關注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/132357976

EigenFold

Paper: EigenFold: Generative Protein Structure Prediction with Diffusion Models

EigenFold 是用于蛋白質結構預測的擴散生成模型(即,已知序列 至 結構分布)。基于諧波擴散,將鍵約束納入擴散建模框架,并且產生一個級聯分辨率的生成過程。

  • 擴散生成模型 (Diffusion Generative Model):利用隨機擴散過程,生成數據樣本的機器學習模型。
  • 諧波擴散 (Harmonic Diffusion):考慮諧波勢能對于擴散過程的影響的數學模型。
  • 鍵約束 (Bond Constraints):限制蛋白質中原子間距離和角度變化范圍的物理條件。
  • 級聯分辨率 (Cascading-Resolution) :從粗糙到精細,逐步提高生成結果質量的方法。
  • OmegaFold 嵌入向量(OmegaFold Embeddings):由 OmegaFold 模型產生的,表示蛋白質序列特征的向量。

關于 EigenFold,即:

We define a diffusion process that models the structure as a system of harmonic oscillators and which naturally induces a cascading-resolution generative process along the eigenmodes of the system.
擴散過程,即將結構模型化為諧振子 (Harmonic Oscillators) 系統,該過程自然地沿著系統的本征模式 (Eigenmodes),產生級聯分辨率的生成過程。

EigenFold 算法重點:

  • 蛋白質結構生成的新方法: 基于擴散模型的生成式模型,可以從給定的蛋白質序列生成一組可能的結構。該模型利用 OmegaFold 的預訓練嵌入和得分網絡來學習蛋白質結構的概率分布。
  • 諧波擴散過程:定義新的擴散過程,將蛋白質結構建模為一系列諧振子,其勢能為相鄰殘基之間的距離的二次函數。該過程可以保證采樣的結構滿足化學約束,并且可以沿著系統的本征模式進行投影,實現逐步精細化的生成過程。
  • 得分網絡架構:使用基于 E3NN 的圖神經網絡作為得分網絡,輸入為殘基坐標和 OmegaFold 嵌入向量,輸出為梯度向量。該網絡具有 SE(3) 等變性,保證最終模型密度也具有 SE(3) 不變性。

EigenFold GitHub: https://github.com/bjing2016/EigenFold


1. 結構預測

準備 new.csv 文件,預測 7skh.B 的結構,即:

# with columns name, seqres (see provided splits for examples) and run
name,valid_alphas,seq,head,resolution,deposition_date,release_date,structure_method,seqres,seqlen
7skh.B.pdb,220,NAPVFQQPHYEVVLDEGPDTINTSLITVQALDGTVTYAIVAGNIINTFRINKHTGVITAAKELDYEISHGRYTLIVTATDQCPILSHRLTSTTTVLVNVNDINDNVPTFPRDYEGPFDVTEGQPGPRVWTFLAHDRDSGPNGQVEYSVVDGDPLGEFVISPVEGVLRVRKDVELDRETIAFYNLTICARDRGVPPLSSTMLVGIRVLDINDNLEHHHHHH,cell adhesion,2.27,2021-10-20,2022-10-26,x-ray diffraction,MNAPVFQQPHYEVVLDEGPDTINTSLITVQALDLDEGPNGTVTYAIVAGNIINTFRINKHTGVITAAKELDYEISHGRYTLIVTATDQCPILSHRLTSTTTVLVNVNDINDNVPTFPRDYEGPFDVTEGQPGPRVWTFLAHDRDSGPNGQVEYSVVDGDPLGEFVISPVEGVLRVRKDVELDRETIAFYNLTICARDRGVPPLSSTMLVGIRVLDINDNLEHHHHHH,227

運行命令:

python make_embeddings.py --out_dir ./embeddings --splits mydata/new.csv
python inference.py --model_dir ./pretrained_model --ckpt epoch_7.pt --pdb_dir ./structures --embeddings_dir ./embeddings --embeddings_key name --elbo --num_samples 5 --alpha 1 --beta 3 --elbo_step 0.2 --splits mydata/new.csv

預測的蛋白質結構,如下:

  • EigenFold 算法只能預測 CA 骨架,其余需要填充。
  • 黃色是 EigenFold 的預測結構,藍色是真實的 PDB 結構 (7skh.B)。

即:

Img


2. 環境配置

下載 GitHub 工程:

git clone git@github.com:bjing2016/EigenFold.git

2.1 配置 Docker 環境

構建 Docker 環境:

nvidia-docker run -it --name eigenfold-[your name] -v [nfs path]:[nfs path] af2:v1.02

預先配置 Docker 環境中的 conda 源 與 pip 源,加速下載過程,參考 開源可訓練的蛋白質結構預測框架 OpenFold 的環境配置

如果安裝錯誤,清空 conda 環境,建議使用 rsync 快速刪除,即:

mkdir tmp
rsync -a --delete tmp/ /opt/conda/envs/eigenfold
rm -rf /opt/conda/envs/eigenfold

配置 conda 環境,即:

# 安裝 conda 環境
conda create -n eigenfold python=3.8
conda activate eigenfold

2.2 配置 PyTorch 系列包

安裝 PyTorch,建議使用 conda 安裝,而不是 pip 安裝,參考 Installing Previous Versions of PyTorch 即:

# pip 安裝異常,建議使用 conda 安裝。
# pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch

預先測試 PyTorch 是否安裝成功,即:

pythonimport torch
print(torch.__version__)  # 1.11.0
print(torch.cuda.is_available())  # True

再安裝 PyTorch 相關包,一共 5 個包,即 torch-scattertorch-sparsetorch-clustertorch-spline-convtorch-geometric,建議逐個安裝,排查問題,即:

pip install torch-scatter -f https://data.pyg.org/whl/torch-1.11.0+cu113.html
pip install torch-sparse -f https://data.pyg.org/whl/torch-1.11.0+cu113.html
pip install torch-cluster -f https://data.pyg.org/whl/torch-1.11.0+cu113.html
pip install torch-spline-conv -f https://data.pyg.org/whl/torch-1.11.0+cu113.html
pip install torch-geometric -f https://data.pyg.org/whl/torch-1.11.0+cu113.html

安裝其他依賴包:

pip install e3nn pyyaml wandb biopython matplotlib pandas

2.3 配置 OmegaFold 依賴

安裝 OmegaFold 依賴,即:

# 調用時,需要在 EigenFold 的根目錄下。
wget https://helixon.s3.amazonaws.com/release1.pt
git clone https://github.com/bjing2016/OmegaFold
pip install --no-deps -e OmegaFold

注意需要預先下載 OmegaFold 的模型 release1.pt,大約 3 個 G左右。

OmegaFold GitHub: OmegaFold

This command will download the weight from https://helixon.s3.amazonaws.com/release1.pt to ~/.cache/omegafold_ckpt/model.pt and load the model

cd EigenFold
bypy info
bypy downfile /huggingface/eigenfold/omegafold-release1.pt model.pt

2.4 配置 TMScore 與 LDDT

安裝 TMScore 與 LDDT,即:

mkdir /opt/bin
cd ~/binwget https://openstructure.org/static/lddt-linux.zip
unzip lddt-linux.zip
cp lddt-linux/lddt .
./lddt  # 測試wget https://zhanggroup.org/TM-score/TMscore.cpp
g++ -static -O3 -ffast-math -lm -o TMscore TMscore.cpp
./TMscore  # 測試export PATH="/opt/bin/:$PATH"

2.6 上傳 Docker

提交 docker image,設置標簽 (tag),以及上傳 docker 至服務器,即:

# 提交 Tag
docker ps -l
docker commit [container id] eigenfold:v1.0# 準備遠程 Tag
docker tag eigenfold:v1.0 harbor.[ip].com/[your name]/eigenfold:v1.0
docker images | grep "eigenfold"# 推送至遠程
docker push harbor.[ip].com/[your name]/eigenfold:v1.0
# 從遠程拉取
docker pull harbor.[ip].com/[your name]/eigenfold:v1.0# 或者保存至本地
docker save eigenfold:v1.0 | gzip > eigenfold_v1_0.tar.gz
# 加載已保存的 docker image
docker image load -i eigenfold_v1_0.tar.gz
docker images | grep "eigenfold"

BugFix

Bug1: torch_sparse 版本不兼容問題。

RuntimeError: 
object has no attribute sparse_csc_tensor:File "/opt/conda/envs/eigenfold/lib/python3.8/site-packages/torch_sparse/tensor.py", line 520value = torch.ones(self.nnz(), dtype=dtype, device=self.device())return torch.sparse_csc_tensor(colptr, row, value, self.sizes())~~~~~~~~~~~~~~~~~~~~~~~ <--- HERE

參考: torch has no attribute sparse_csr_tensor

torch-sparse 降級至 0.6.14 版本,即可:

conda list torch-sparse
# packages in environment at /opt/conda/envs/eigenfold:
#
# Name                    Version                   Build  Channel
torch-sparse              0.6.17                   pypi_0    pypipip install torch-sparse==0.6.14 -f https://data.pyg.org/whl/torch-1.11.0+cu113.html

Bug2: Python 3.9 新特性不兼容問題

TypeError: unsupported operand type(s) for |: 'dict' and 'dict'

原因:What’s New In Python 3.9

方案1是升級至 Python3.9 版本,方案2是修改源碼,位于EigenFold/utils/pdb.py,即:

# d[key] = {'CA': 'C'} | {key: val['symbol'] for key, val in atoms.items() if val['symbol'] != 'H' and key != 'CA'}
dict1 = {'CA': 'C'}
dict2 = {key: val['symbol'] for key, val in atoms.items() if val['symbol'] != 'H' and key != 'CA'}
d[key] = {**dict1, **dict2}

其余參考:

  • Linux 下刪除大量文件效率對比,看誰刪的快!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43289.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43289.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43289.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用深度學習實現的圖像偽造檢測: 一個Python畢業項目指南

1. 引言 在當前的數字化時代&#xff0c;圖像處理和偽造技術越來越先進。從影視制作到社交媒體&#xff0c;人們常常與修飾或改變過的圖片打交道。雖然這為創意產業提供了無數機會&#xff0c;但也為不誠實的內容創造者帶來了偽造和篡改圖像的機會。因此&#xff0c;圖像偽造檢…

Selenium手動和自動兩種方式啟動Chrome驅動

1. 自動啟動chrome驅動(已經安裝了Selenium庫和Chrome驅動) 要使用Selenium自動跟隨自帶的Chrome驅動&#xff0c;你需要首先確保你已經安裝了Selenium庫和Chrome驅動。然后&#xff0c;你可以按照以下步驟進行操作&#xff1a; 導入必要的庫&#xff1a; from selenium imp…

【面試八股文】每日一題:談談你對線程的理解

每日一題-Java核心-談談你對線程的理解【面試八股文】 Java線程是Java程序中的執行單元。一個Java程序可以同時運行多個線程&#xff0c;每個線程可以獨立執行不同的任務。線程的執行是并發的&#xff0c;即多個線程可以同時執行。 1. 線程的特點 Java中的線程有如下的特點 輕…

react-native-webview使用postMessage后H5不能監聽問題(iOS和安卓的兼容問題)

/* 監聽rn消息 */ const eventListener nativeEvent > {//解析數據actionType、extraconst {actionType, extra} nativeEvent.data && JSON.parse(nativeEvent.data) || {} } //安卓用document&#xff0c;ios用window window.addEventListener(message, eventLis…

Jenkins-發送郵件配置

在Jenkins構建執行完畢后&#xff0c;需要及時通知相關人員。因此在jenkins中是可以通過郵件通知的。 一、Jenkins自帶的郵件通知功能 找到manage Jenkins->Configure System&#xff0c;進行郵件配置&#xff1a; 2. 配置Jenkins自帶的郵箱信息 完成上面的配置后&#xf…

DiffusionDet: Diffusion Model for Object Detection

DiffusionDet: Diffusion Model for Object Detection 論文概述不同之處整體流程 論文題目&#xff1a;DiffusionDet: Diffusion Model for Object Detection 論文來源&#xff1a;arXiv preprint 2022 論文地址&#xff1a;https://arxiv.org/abs/2211.09788 論文代碼&#xf…

kubesphere 使用流水線對接 sonar

官方文檔&#xff1a;使用圖形編輯面板創建流水線 創建憑證 創建 sonar 憑證 創建 gitlab 憑證 創建流水線 創建流水線&#xff0c;編輯流水線 自定義流水線 拉取代碼 代理選 kubernetes&#xff0c;label 填maven 添加步驟 - git 填寫 git 地址&#xff0c;選…

CSS 背景屬性

前言 背景屬性 屬性說明background-color背景顏色background-image背景圖background-repeat背景圖平鋪方式background-position背景圖位置background-size背景圖縮放background-attachment背景圖固定background背景復合屬性 背景顏色 可以使用background-color屬性來設置背景…

【計算機設計大賽】國賽一等獎項目分享——基于多端融合的化工安全生產監管可視化系統

文章目錄 一、計算機設計大賽國賽一等獎二、項目背景三、項目簡介四、系統架構五、系統功能結構六、項目特色&#xff08;1&#xff09;多端融合&#xff08;2&#xff09;數據可視化&#xff08;3&#xff09;計算機視覺&#xff08;目標檢測&#xff09; 七、系統界面設計&am…

esp-idf的電源管理——軟件的總體結構

idf的電源管理在軟件上,從上到下可以分為三層: freeRTOS idle taskesp pmesp sleepesp sleep又可以進一步細分為兩層,分別是軟件sleep flow以及最終落實到硬件寄存器的rtc sleep。更具體的,函數調用關系如下: #mermaid-svg-WunrsW7XSArlvBnG {font-family:"trebuchet…

前端打開后端返回的HTML格式的數據

前端打開后端返回的 HTML格式 的數據&#xff1a; 后端返回的數據格式如下示例&#xff1a; 前端通過 js 方式處理&#xff08;核心代碼如下&#xff09; console.log(回調, path); // path 是后端返回的 HTML 格式數據// 必須要存進localstorage&#xff0c;否則會報錯&am…

步入React正殿 - State進階

目錄 擴展學習資料 State進階知識點 狀態更新擴展 shouldComponentUpdate PureComponent 為何使用不變數據【保證數據引用不會出錯】 單一數據源 /src/App.js /src/components/listItem.jsx 狀態提升 /src/components/navbar.jsx /src/components/listPage.jsx src/A…

Uniapp連接藍牙設備

一、效果圖 二、流程圖 三、實現 UI <uni-list><uni-list :border="true"><!-- 顯示圓形頭像 -->

C語言案例 判斷是否為回文數-06.1

題目&#xff1a;隨機輸入一個5位數&#xff0c;判斷它是不是回文數 步驟一&#xff1a;定義程序的目標 編寫C程序&#xff0c;隨機輸入一個5位數&#xff0c;判斷它是不是回文數 步驟二&#xff1a;程序設計 原理&#xff1a;即12321是回文數&#xff0c;個位與萬位相同&#…

SpringBoot + Vue 微人事(十)

職位管理前后端接口對接 先把table中的數據展示出來&#xff0c;table里面的數據實際上是positions里面的數據&#xff0c;就是要給positions:[] 賦上值 可以在methods中定義一個initPosition方法 methods:{//定義一個初始化positions的方法initPositions(){//發送一個get請求…

2.HTML、CSS

文章目錄 1.什么是HTML、CSS2.HTML的語法特點3.HTML的快速體驗4.開發工具推薦&#xff1a;VS Code5.基本標簽&樣式5.1.標題5.1.1.標題排版5.1.2.標題樣式5.1.3.超鏈接 5.2.正文5.2.1.正文排版5.2.2.頁面布局 表格、表單標簽表格標簽表單標簽 1.什么是HTML、CSS HTML即超文本…

在vue中如何重新渲染所有組件

文章目錄 一、在根組件中給router-view動態綁定上v-if。二、調用重新加載下級組件方法。 在有些需求情況下需要重新加載頁面或者觸發組件的生命周期&#xff0c;但是刷新對用戶體驗不太友好&#xff0c;這個時候我們可以通過provide/inject可以輕松實現跨級訪問祖先組件的數據&…

web JS高德地圖標點、點聚合、自定義圖標、自定義窗體信息、換膚等功能實現和高復用性組件封裝教程

文章目錄 前言一、點聚合是什么&#xff1f;二、開發前準備三、API示例1.引入高德地圖2.創建地圖實例3.添加標點4.刪除標點5.刪除所有標點&#xff08;覆蓋物&#xff09;6.聚合點7.自定義聚合點樣式8.清除聚合9.打開窗體信息 四、實戰開發需求要求效果圖如下&#xff1a;封裝思…

LeetCode1387 將整數按權重排序

思路 首先是這種計算權重的方式很有可能出現重復&#xff0c;所以需要記憶化搜索記憶化搜索&#xff1a;先查表再計算&#xff0c;先存表再返回。將整數 x 和計算的權重分別存儲數組的0和1的位置重寫compare將數組排序按規則排序返回結果 代碼 class Solution {private Hash…