AlphaFold 2.3.2 小白从零使用指南 | Singularity 容器版

发布者:张运动发布时间:2026-08-30浏览次数:10

🧬 AlphaFold 2.3.2  小白从零指南

基于 Singularity 容器 · 集群 CPU / GPU 环境完整教程
🐳 容器版  ·  适合 HPC 集群

1. 背景与技术特点 为什么用容器?

🧪 AlphaFold 是什么?
AlphaFold 是由 Google DeepMind 开发的人工智能系统,能够从蛋白质的氨基酸序列高精度预测其三维结构。 2.3.2 版本在准确性和效率上进一步优化,是结构生物学和药物发现的重要工具。

🤔 为什么用 Singularity 容器?
AlphaFold 依赖大量软件包(Python、JAX、OpenMM、HH-suite 等),版本冲突和环境配置极其复杂。 Singularity 将整套环境打包成一个 只读镜像文件 (.sif),在集群任意节点上 即拉即用, 无需安装任何依赖,且与宿主机完全隔离。

✅ 核心优势

  • 一次构建,到处运行(CPU / GPU 节点)

  • 环境完全隔离,无依赖冲突

  • 支持 --nv 直接调用 NVIDIA GPU

  • 与 Slurm 等调度系统无缝集成

  • 镜像只读,保证可复现性

📦 镜像包含内容

  • AlphaFold 2.3.2 源码

  • Python 3.10 + 全部依赖

  • JAX / OpenMM / HH-suite

  • jackhmmer / hmmsearch 等工具

  • ⚠️ 不含模型参数 & 数据库

氨基酸序列FASTA 格式MSA 搜索jackhmmer / hhblits特征提取模板 + 配对Evoformer深度学习核心StructureModule3D 结构PDB / mmCIF
图1:AlphaFold 2.3.2 核心预测流程
🖥️ 宿主机 (HPC 节点)📦 Singularity 容器AlphaFold 2.3.2 + 全部依赖只读 SIF 镜像🧮 宿主机资源CPU / 内存 / 网络NVIDIA GPU (--nv)📂 挂载目录数据库 / 输入 / 输出宿主机 ↔ 容器 共享映射挂载
图2:Singularity 容器与宿主机资源的关系

2. 环境准备 动手前必看

🔔 小白请注意: 以下操作需要在 Linux 集群登录节点个人 Linux 服务器 上执行。 如果你没有 root 权限,请确保 Singularity 已经由管理员安装好。

2.1 硬件与软件要求

💻 硬件

  • Linux x86_64 架构

  • 约 10 GB 磁盘空间(制作镜像)

  • (可选)NVIDIA GPU 用于加速

📦 软件

  • Singularity 3.x 或更高版本

  • mksquashfs(squashfs-tools)

  • (可选)Environment Modules

2.2 检查环境

在终端中依次执行以下命令,确认环境就绪:

$ singularity --versionsingularity version 3.11.0$ command -v mksquashfs/usr/sbin/mksquashfs
💡 如果 mksquashfs 未安装:
• Rocky / CentOS / RHEL:sudo dnf install -y squashfs-tools
• Ubuntu / Debian:sudo apt-get update && sudo apt-get install -y squashfs-tools

如果集群使用 Environment Modules,加载 Singularity:

$ source /etc/profile.d/modules.sh$ module load singularity/3.11.0
1. 检查Singularity2. 检查mksquashfs3. 加载Modules (可选)✅ 就绪可以制作镜像
图3:环境准备三步检查

3. 制作 Singularity 镜像 核心步骤

我们从 Docker Hub 拉取预构建的 AlphaFold 2.3.2 容器(catgumag/alphafold:2.3.2), 转换为 Singularity 的 .sif 格式镜像文件。 整个过程只需 一条命令

3.1 创建目录结构

$ export AF2_HOME="$HOME/software/alphafold"$ mkdir -p "$AF2_HOME"/{cache,tmp}$ export SINGULARITY_CACHEDIR="$AF2_HOME/cache"$ export SINGULARITY_TMPDIR="$AF2_HOME/tmp"$ cd "$AF2_HOME"
📂 目录说明:
cache — 存放拉取过程中的临时层文件,可复用
tmp — 构建时的临时工作空间
alphafold-2.3.2.sif — 最终生成的镜像文件(约 4-6 GB)

3.2 拉取并生成镜像

方式A:直连 Docker Hub(推荐)

$ singularity pull alphafold-2.3.2.sif docker://catgumag/alphafold:2.3.2

方式B:使用镜像代理(网络受限时)

$ singularity pull alphafold-2.3.2.sif docker://docker.1ms.run/catgumag/alphafold:2.3.2
⏱️ 预计耗时: 约 5-15 分钟(取决于网络速度)。镜像大小约 4-6 GB。

3.3 校验完整性

$ sha256sum alphafold-2.3.2.sif > alphafold-2.3.2.sif.sha256$ sha256sum -c alphafold-2.3.2.sif.sha256alphafold-2.3.2.sif: OK
1. 准备目录AF2_HOME / cache / tmp2. pull 镜像singularity pull3. 生成 .sif约 4-6 GB4. 校验sha256sum✅ 完成
图4:镜像制作四步流程

4. CPU 环境验证 基础测试

任何节点(登录节点或计算节点)上执行以下命令,验证镜像是否可用,以及 AlphaFold 环境是否正常。

4.1 验证 Python 环境和 JAX

$ IMAGE="$HOME/software/alphafold/alphafold-2.3.2.sif"$ singularity exec --cleanenv --pwd /app/alphafold "$IMAGE" python -c 'import alphafoldimport jaximport jax.numpy as jnptry:    import openmmexcept ModuleNotFoundError:    from simtk import openmmprint("AlphaFold:", alphafold.__file__)print("JAX:", jax.__version__)print("devices:", jax.devices())x = jnp.arange(16, dtype=jnp.float32).reshape(4,4)y = x @ xassert y.shape == (4,4)print("AlphaFold CPU environment: PASS")'AlphaFold: /app/alphafold/alphafold/__init__.pyJAX: 0.4.20devices: [CpuDevice(id=0)]AlphaFold CPU environment: PASS
✅ 看到 PASS 即表示 CPU 环境正常。 显示 CpuDevice 是预期行为。

4.2 验证外部工具

$ singularity exec --cleanenv "$IMAGE" bash -c 'for cmd in hhblits hhsearch jackhmmer hmmbuild hmmsearch kalign; do    command -v "$cmd" || exit 1doneecho "External tools: PASS"'External tools: PASS
🐧 CPU 节点无 GPU 加速🔬 JAX 测试矩阵乘法验证✅ 环境通过CpuDevice 识别正常
图5:CPU 环境验证流程

5. GPU 环境验证 (Slurm) 加速必备

NVIDIA GPU 节点 上,通过 Slurm 提交作业来验证镜像是否能调用 GPU。 你需要根据集群实际情况修改 分区 (--partition)QOS 参数。

5.1 创建 Slurm 脚本

新建文件 test-alphafold-gpu.slurm,内容如下:

#!/bin/bash#SBATCH -J af2-gpu-test#SBATCH -o af2-gpu-test-%j.out#SBATCH -e af2-gpu-test-%j.err#SBATCH -p GPU-8A100       # ⚠️ 改成你集群的GPU分区#SBATCH --qos=gpu_8a100    # ⚠️ 改成你集群的QOS#SBATCH -N 1#SBATCH -n 1#SBATCH --cpus-per-task=4#SBATCH --gres=gpu:1#SBATCH --mem=16G#SBATCH -t 00:10:00source /etc/profile.d/modules.sh
module purge
module load singularity/3.11.0

IMAGE="$HOME/software/alphafold/alphafold-2.3.2.sif"

test -r "$IMAGE" || { echo "ERROR: cannot read $IMAGE"; exit 1; }

echo "node=$(hostname)"
nvidia-smi -L

export SINGULARITYENV_XLA_PYTHON_CLIENT_PREALLOCATE=false
export SINGULARITYENV_TF_CPP_MIN_LOG_LEVEL=2

singularity exec \
    --nv \
    --cleanenv \
    --pwd /app/alphafold \
    "$IMAGE" \
    python -c '
import alphafold
import jax
import jax.numpy as jnp

print("AlphaFold:", alphafold.__file__)
print("JAX:", jax.__version__)

devices = jax.devices()
print("devices:", devices)

gpu_devices = [d for d in devices if d.platform == "gpu"]
assert gpu_devices, "JAX did not detect a GPU"

x = jnp.ones((2048, 2048), dtype=jnp.float32)
y = jnp.dot(x, x)
y.block_until_ready()

assert float(y[0, 0]) == 2048.0
print("AlphaFold GPU environment: PASS")
'
⚠️ 重要:-p--qos 参数必须替换为你集群中实际可用的 GPU 分区和 QOS。 如果不确定,咨询集群管理员或使用 sinfo 查看。

5.2 提交作业

$ sbatch test-alphafold-gpu.slurmSubmitted batch job 123456

5.3 查看结果

$ squeue -u "$USER"$ cat af2-gpu-test-123456.out

成功日志中应包含:

node=gpu-node-01GPU 0: NVIDIA A100-PCIE-40GB ...AlphaFold: /app/alphafold/alphafold/__init__.pyJAX: 0.4.20devices: [GpuDevice(id=0), ...]AlphaFold GPU environment: PASS
1. 写 Slurm脚本文件2. sbatch提交作业3. GPU 节点--nv 调用4. 验证GpuDevice✅ PASS
图6:通过 Slurm 提交 GPU 验证作业

6. 实际预测 跑起来!

🚨 重要提醒: 镜像 不包含 模型参数和序列/结构数据库。你必须自行准备并挂载到容器内。

6.1 查看所有参数

$ singularity exec --cleanenv --pwd /app/alphafold "$IMAGE" \    python /app/alphafold/run_alphafold.py --helpfull

6.2 预测命令模板

在 GPU 节点上执行预测(需挂载数据库、输入、输出目录):

$ singularity exec --nv \    -B /path/to/database:/database \    -B /path/to/input:/input \    -B /path/to/output:/output \    --cleanenv \    --pwd /app/alphafold \    "$IMAGE" \    python /app/alphafold/run_alphafold.py \    --fasta_paths=/input/target.fasta \    --output_dir=/output \    --data_dir=/database \    --model_preset=monomer \    --use_gpu_relax=True
🔧 关键参数说明:
--fasta_paths — 输入序列文件(FASTA 格式)
--output_dir — 输出目录(结果、PDB 文件等)
--data_dir — 数据库根目录(需包含所有依赖数据库)
--model_presetmonomer(单体)或 multimer(多聚体)
--use_gpu_relax — 使用 GPU 进行结构松弛(加速)
📂 容器内外目录映射🖥️ 宿主机目录/path/to/database/path/to/input/path/to/output-B 挂载📦 容器内路径/database/input/output运行🐳 镜像只读 .sif环境 + 程序无数据
图7:通过 -B 挂载数据库和输入输出目录

7. 常用命令与参数详解 查字典

7.1 Singularity 核心命令

命令作用示例
singularity pull从 Docker Hub 或其他源拉取镜像并生成 .sif 文件singularity pull image.sif docker://repo/name:tag
singularity exec在容器内执行一条命令singularity exec image.sif python script.py
singularity run执行容器的默认入口点singularity run image.sif
singularity shell在容器内启动一个交互式 shellsingularity shell image.sif

7.2 exec 常用选项

选项作用说明
--nv启用 NVIDIA GPU 支持将宿主机 GPU 驱动和 CUDA 库映射到容器
--cleanenv清空环境变量避免宿主机环境变量干扰容器
--pwd /path设置容器内工作目录确保 Python 能找到当前目录的模块
-B /host:/container绑定挂载目录将宿主机目录映射到容器内
--writable-tmpfs临时可写文件系统容器内 /tmp 可写,用于临时文件

7.3 AlphaFold run_alphafold.py 常用参数

参数作用示例值
--fasta_paths输入 FASTA 序列文件路径/input/target.fasta
--output_dir输出结果目录/output/results
--data_dir数据库根目录/database
--model_preset预测模式:monomer / multimermonomer
--use_gpu_relax是否使用 GPU 进行结构松弛True / False
--num_multimer_predictions_per_model多聚体每个模型的预测数5
--max_template_date模板最大日期(格式 YYYY-MM-DD)2022-01-01
🔧 Singularity exec 命令结构singularityexec--nv--cleanenv--pwd /appimage.sifpython主命令子命令GPU环境工作目录镜像命令
图8:singularity exec 命令各组成部分

8. 注意事项 避坑指南

⚠️

镜像只读

SIF 镜像是 只读 的,所有数据(数据库、输入、输出)必须放在 容器外部 并通过 -B 挂载。

⚠️

GPU 必须加 --nv

在 GPU 节点上运行,必须 添加 --nv 参数,否则 JAX 无法识别 GPU,会退化为 CPU 模式。

⚠️

数据库自行准备

镜像 不包含 模型参数和数据库。你需要从官方下载或使用集群已有的数据库目录。

💡

--pwd 必须正确

--pwd /app/alphafold 确保 Python 的 import alphafold 能找到源码。如果路径不对,会报 ModuleNotFoundError。

💡

环境变量传递

使用 SINGULARITYENV_VARNAME=value 可将环境变量传入容器。例如:

SINGULARITYENV_XLA_PYTHON_CLIENT_PREALLOCATE=false

这样容器内的程序就能读取该变量。

⚠️

Slurm 参数适配

脚本中的 -p--qos--gres 需要根据集群实际配置修改,不要照抄。

📌 镜像只读 + 挂载数据放外部🔌 必须 --nvGPU 节点🗄️ 自行准备 DB模型参数 + 数据库✅ 验证通过再预测先跑 CPU / GPU 测试
图9:核心注意事项速览

9. 常见问题 FAQ

❓ Q1: 制作镜像时网络连接失败怎么办?

A: 尝试使用代理镜像:docker://docker.1ms.run/catgumag/alphafold:2.3.2。如果仍失败,检查集群网络或使用 --no-https 参数。

❓ Q2: 执行验证时提示 "ModuleNotFoundError: No module named 'alphafold'"?

A: 检查是否添加了 --pwd /app/alphafold。AlphaFold 源码位于镜像内的 /app/alphafold,必须将工作目录切换到该路径。

❓ Q3: GPU 验证时显示 "CpuDevice" 而不是 "GpuDevice"?

A: 原因可能:① 没有添加 --nv 参数;② 节点没有 NVIDIA GPU;③ 驱动程序不兼容。检查 nvidia-smi 输出。

❓ Q4: Slurm 作业提交后一直 PENDING?

A: 可能是资源不足,或分区/QOS 参数不正确。用 sinfo 查看可用分区,用 squeue 查看作业状态。

❓ Q5: 预测时内存不足(OOM)?

A: AlphaFold 需要较大内存(单体约 16-32GB,多聚体更大)。在 Slurm 中增加 --mem 参数,或使用 --writable-tmpfs 让容器使用更多临时空间。

❓ Q6: 镜像文件太大,可以压缩吗?

A: SIF 格式本身已经压缩。如果空间紧张,可以删除 cache 目录(拉取时的临时层文件),只保留 .sif 文件。

❓ Q7: 本教程的验证是否等同于完整预测?

A:绝对不等同。 本教程只验证环境(JAX 能跑、GPU 可见),并未加载任何模型参数或数据库。实际预测需要大量数据和计算,请务必单独测试。

🔍 问题出现验证失败 / 报错检查参数--nv / --pwd / -B检查环境GPU / 内存 / 网络✅ 解决重新运行
图10:故障排查简易流程