---
tags: tutorial, 生醫, T3, AlphaFold, GPU
---
# 如何在臺灣杉三號使用 AlphaFold v2
2023/02/23 Edited by nchcgaoqz
## AlphaFold v2 簡介
AlphaFold v2 是一個以氨基酸序列來預測該蛋白質結構的工具。若是同時給予多條氨基酸序列的資訊,則能夠預測蛋白質複合體 (protein complex) 的結構。
AlphaFold v2 預測蛋白質結構的流程可粗分成三個較耗時的階段,分別為:
1. 多重序列比對 (Multiple Sequence Alignment, MSA)
2. 人工智慧推論 (Artificial Intelligence inference, AI)
3. 蛋白質結構微調 (Relaxation, Relax)
![](https://i.imgur.com/kfsxFio.png)
MSA 的階段完全以 CPU 執行,能夠使用 GPU 加速的階段為 AI 與 Relax。
AlphaFold v2 使用五個稍微不同的 AI 模型來推論蛋白質結構,每一個模型以相同的 MSA 結果為輸入,各自給出不盡相同的推論結果,會依照內部計算方式來排序最終結構的好壞,其中 rank 1 為其估算出的最好結果。
## 輸入檔案格式需求
AlphaFold v2 僅接受 20 種標準氨基酸的單字母代號,氨基酸序列資訊需以 fasta 格式存檔,並且以 .fasta 為副檔名。多條氨基酸序列需以 fasta 格式寫入同一個 fasta 檔中。
###### 單條氨基酸的 fasta 格式範例:
```bash=1
>AAD45181.1 calmodulin [Homo sapiens]
MADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFL
TMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYE
EFVQMMTAK
```
###### 兩條氨基酸的 fasta 格式範例:
```bash=1
>1A5F_1|Chain A[auth L]|MONOCLONAL ANTI-E-SELECTIN 7A9 ANTIBODY (LIGHT CHAIN)|Mus musculus (10090)
DIVMTQSPSSLTVTTGEKVTMTCKSSQSLLNSGAQKNYLTWYQQ
KPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLSISGVQAEDLAVYYCQNNYNYPLTFGAGTK
LELKRADAAPTVSIFPPSSEQLTSG
GASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKD
STYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC
>1A5F_2|Chain B[auth H]|MONOCLONAL ANTI-E-SELECTIN 7A9 ANTIBODY (HEAVY CHAIN)|Mus musculus (10090)
EVALQQSGAELVKPGASVKLS
CAASGFTIKDAYM
HWVKQKPEQGLEWIGRIDSGSSNT
NYDPTFKGKATITADDSSNTAYLQMSSLTSEDTAVYYCARVGLSYWYAMDYWGQGTSVTVSS
AKTTPPSVYPLAPGSAAQTNSMVTLGCLV
KGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVSVPTSTETVTCNVAHAPSSTKVDKKIVPR
```
###### 三條氨基酸的 fasta 格式範例:
```bash=1
>2II7_1|Chains A, B, C, D, E, F, G, H|Anabaena sensory rhodopsin transducer protein|Anabaena sp. (1167)
MSLSIGRTCWAIAEGYIPPYGNGPEPQFISHETVCILNAG
DEDAHVEITIYYSDKEPVGPYRLTVPARRTKHVRFNDLND
PAPIPHDTDFASVIQSNVPIVVQHTRLDSRQAENALLSTIAYANTHHHHHH
>2II7_1|Chains A, B, C, D, E, F, G, H|Anabaena sensory rhodopsin transducer protein|Anabaena sp. (1167)
MSLSIGRTCWAIAEGYIPPYGNGPEPQFISHETVCILNAG
DEDAHVEITIYYSDKEPVGPYRLTVPARRTKHVRFNDLND
PAPIPHDTDFASVIQSNVPIVVQHTRLDSRQAENALLSTIAYANTHHHHHH
>2II7_1|Chains A, B, C, D, E, F, G, H|Anabaena sensory rhodopsin transducer protein|Anabaena sp. (1167)
MSLSIGRTCWAIAEGYIPPYGNGPEPQFISHETVCILNAG
DEDAHVEITIYYSDKEPVGPYRLTVPARRTKHVRFNDLND
PAPIPHDTDFASVIQSNVPIVVQHTRLDSRQAENALLSTIAYANTHHHHHH
```
## 輸出的結果
最終輸出的結果為以 PDB 格式儲存,副檔名為 .pdb 的檔案。內容除了蛋白質結構資訊,其中的 Temperature factor (又稱做 B factor) 欄位(從第61字到第66字,詳細請參考 [PDB file format 文件頁面](http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html)中 `ATOM` 的定義),為 predicted Local Distance Difference Test (pLDDT),是對每一個殘基的信心分數,數值範圍從 0 到 100,分數 100 代表對此殘基的位置最有把握。
AlphaFold v2 流程的三個主要階段都有各自的輸出檔案,部分檔案體積較大,如無需求可以選擇刪除。
## 執行臺灣杉三號最佳化版本的 AlphaFold v2
### 執行檔位置
執行檔存放於臺灣杉三號上的如下目錄:
`/opt/ohpc/Taiwania3/pkg/biology/alphafold/slurmFiles`
其中的 `twn3af2batchs` 是預設的執行檔,是連結到最新且較快的 AlphaFold v2 版本執行檔。
若 fasta 檔的名稱為 `seqNames.fasta`,專案 ID 為 `ABC123456`,執行次數為 `1`,則應執行指令如下:
```bash=1
export PATH="/opt/ohpc/Taiwania3/pkg/biology/alphafold/slurmFiles:$PATH"
twn3af2batchs ABC123456 seqNames 1
```
其中的執行次數是重複執行 AI 階段的次數,輸入 `1` 會得到 5 個結構並排序,輸入 `2` 會得到 10 個結果並排序,依此推類。
執行過程中會詢問使用者一些問題,答覆完畢沒有錯誤則會派送工作給 SLURM 執行。
### 執行範例
若 fasta 檔的名稱為 8.fasta,如下圖:
![](https://i.imgur.com/A5Z1Gwq.png)
在設定好 `PATH` 變數之後,則可執行如下圖(專案 ID 已模糊化):
![](https://i.imgur.com/ZuuXHq5.png)
如上圖顯示的第一個問題,需回答欲使用的計算資源,在此範例輸入 `1gpu`,得下圖:
![](https://i.imgur.com/jP4o1qv.png)
AF2Complex 是另一個使用 AlphaFold 為基礎來預測蛋白質複合體的工具,因為尚未更新至最新版,請先勿選擇。因此於範例輸入 `1`,得下圖:
![](https://i.imgur.com/bhYav8D.png)
此問題詢問是否保存中間過程檔案,由於中間過程檔案所佔用的空間會以序列長度平方正比成長,當序列較長時,會佔用更多硬碟空間,若無需求,可選 `1`。
若可能會使用相同序列做多次預測,除了一開始可使用較大的執行次數,亦有可能需要再次執行相同序列的預測,若有此需求,則可以選 `2` 來保留 MSA 的結果,省去再次執行時,消耗再次做 MSA 的時間。
若硬碟空間足夠,預計可能再次以相同的序列執行,並且希望將全部的結果排序,或者有其他需求,則可以選擇 `3`。
此範例選擇 `1` 得下圖:
![](https://i.imgur.com/yqGjVjf.png)
首先會使用 `dos2unix` 來更改 fasta 檔的格式,再進行檢查與必要的轉換。
其次是顯示讀取到的氨基酸序列長度。
最後是告知於 SLURM 上的 Job ID。
輸入 `ls` 可看到該目錄有如下圖的檔案與子目錄:
![](https://i.imgur.com/iV4ZOu7.png)
其中的 `8.err` 檔存有執行過程的細節訊息。如下圖(僅截取部分檔案內容):
![](https://i.imgur.com/bBhYu5O.png)
`8.log` 存有此 SLURM 工作相關的資訊,包括整體執行時間。如下圖(專案 ID 已模糊化):
![](https://i.imgur.com/hkAOz9r.png)
`8.sbatch` 儲存丟給 SLURM 的訊息。
`af664136064842j` 儲存實際執行 AlphaFold v2 的指令,此檔案名稱的數字部分為隨機產生。
`8_top.log` 儲存 cpu 與主記憶體於執行過程資訊。
`8_nv.log` 儲存使用 gpu 時才會有的執行過程資訊。
`result` 目錄存放所有 AlphaFold v2 的執行結果。如下圖:
![](https://i.imgur.com/kXHLTjE.png)
其中檔名以 `ranked` 開頭的 pdb 檔為最終的結果。
### 其他執行檔的名稱意義
若想選擇其他版本的 AlphaFold v2 來執行,目前提供如下圖的執行檔以供執行:
![](https://i.imgur.com/mX73drF.png)
除前面檔名相同的部分(`twn3af2batchs`),後面被分隔的數字依序代表 AlphaFold 的版本、TensorFlow 的版本、以及 jaxlib 的版本。
## 各階段執行時間與序列長度之關係
為方便使用者粗略預估計算資源使用量與執行時間,測試了不同單條序列長度所需的執行時間,測試結果為九次實驗的平均。這邊需注意的是,由於單台 GPU 節點有八張 GPU 卡,於測試時,其他使用者也有可能使用到相同節點的不同 GPU 來運算,若記憶體或是硬碟的傳輸量巨大,則測試的結果很可能會受到影響,此影響無法以九次實驗的結果來平均而消除。
目前無法使用多張 GPU 來為 AI 階段加速, GPU 記憶體也只能使用到單張 V100 的 GPU 記憶體(32 GiB),若序列較長而需要超過 32 GiB 的記憶體,則會使用到主記憶體,會隨著主記憶體使用量而大幅降低執行速度。由於臺灣杉三號的資源分配是依照 CPU 核心數或是 GPU 數而有相對應的主記憶體用量上限,所以當主記憶體所需用量超過 `1gpu` 所能被分配的主記憶體(90 GiB)時,則要選擇 `2gpu` 來取得更大的主記憶體用量上限(180 GiB),就算無法使用多張 V100 與其 GPU 記憶體空間。
除 AlphaFold 本身的程式以外,以下測試結果所使用的軟體版本與最佳化,於 MSA 階段皆相同,於 AI 階段會受到 TensorFlow 與 jaxlib 版本影響,於 Relax 階段會受到 jaxlib 版本影響,影響的範圍包括執行速度、記憶體使用量、以及能否執行。
###### AlphaFold 2.3.1, TensorFlow 2.9.3, jaxlib 0.3.25
![](https://i.imgur.com/TAP5Ooa.png)
藍色、紅色、與橘色,分別對應了三個不同階段。每根柱子左上方註記了目前階段使用時間是前一個序列長度使用時間的幾倍。每根柱子右上方註記了各階段使用的時間,單位為分鐘,其中綠色字體為 AI 與 Relax 兩階段的總和,兩階段都有使用到 GPU 來做加速,若 GPU 加速的過程有額外使用到主記憶體,則在柱子後面會以淡紅色底來標示,此次測試都沒有額外使用到主記憶體。
其中,序列長度為 512 個氨基酸的測試於測試過程出現錯誤,造成問題的原因可能是軟體 HH-suite,或是其所使用的資料庫有問題,詳情可以參考 [HH-suite issue #277](https://github.com/soedinglab/hh-suite/issues/277)。由於 AlphaFold 2.1 ~ 2.2 所使用的資料庫與 AlphaFold 2.3.x 所使用的資料庫不同,且舊版資料庫於此測試沒有錯誤(使用其他序列依舊可能會有錯誤),因此所需的執行時間可參考下方 AlphaFold 2.2.4 的測試結果。
###### AlphaFold 2.3.1, TensorFlow 2.5.3, jaxlib 0.1.70
![](https://i.imgur.com/ychP55y.png)
Jaxlib 版本會影響 AI 階段與 Relax 階段的執行效率與 GPU 記憶體使用量,jaxlib 0.1.70 所佔用的記憶體較 jaxlib 0.3.25 多,不使用到主記憶體的序列長度上限為 2011 個氨基酸,超過這個長度則會開始使用主記憶體。
###### AlphaFold 2.2.4, TF 2.5.3, jaxlib 0.1.70
![](https://i.imgur.com/QN47N1g.png)
###### AlphaFold 2.1.x 的早期測試結果
![](https://i.imgur.com/Ahj4d90.png)
由上圖可知,開始使用到主記憶體(序列長度超過 2011 個氨基酸)之後,執行時間急劇增加(此圖的橫軸數值變化與其他的圖不同),序列長度約略為 2011 兩倍的 4011 個氨基酸,其執行時間約增加 60 倍,若移除潛在的其他計算工作干擾,也是約增加了 30 倍的執行時間。
當長度大於 3211 個氨基酸(約略數字),則需要使用 `2gpu` 來取得大於 90 GiB 的主記憶體。由於使用到大量的記憶體,執行效率容易受到相同節點上的其他工作影響。
在實際研究需求中,曾經執行中國醫藥大學教授的研究需求,其序列長度爲 5431 個氨基酸,使用 `4gpu` 來取得大於 180 GiB 的主記憶體,執行時間為一個月。
##
### Last updated: 2023/02/23 08:27
Previous updates: 2023/02/18 13:32