受体口袋条件下的环肽序列—结构联合生成基线
CP-Composer 先在受体结合口袋条件下,用潜空间扩散模型联合生成肽序列与三维构象;随后由 OpenMM 显式建立环化共价键并进行局部能量最小化。本机已完成官方 checkpoint 对应基线部署, 一键运行器当前聚焦并验证了 Condition 2:头尾成环。
一条命令生成头尾环肽
1. 基本命令
cd /home/luohaoxuan/work
bash run_cpcomposer.sh /absolute/path/input.pdb
2. 建议的多候选运行
CPC_SAMPLES=10 CPC_GUIDANCE=3 \
bash run_cpcomposer.sh /absolute/path/input.pdb
CPC_SAMPLES 控制随机起点数量。候选越多,越容易找到解码后首尾 N—C 距离较短的结构;
CPC_GUIDANCE 默认是 3,盲目增大可能强化闭环倾向,也可能损害局部结构质量。
3. 明确指定链
CPC_RECEPTOR_CHAIN=E CPC_PEPTIDE_CHAIN=I \
bash run_cpcomposer.sh /absolute/path/input.pdb
未指定时,运行器默认把最短的标准蛋白链当作肽,把其余候选中最长链当作受体。 多亚基体系或链长度接近时,应显式指定。
4. 输出目录
cpcomposer_outputs/
└── 样本名_时间戳/
├── dataset/ # 口袋裁剪与 mmap 数据
├── generated/
│ ├── references/ # 参考复合物
│ ├── candidates/ # 线性候选 PDB
│ └── results.jsonl # 序列、路径、pmetric
├── inference.yaml # 本次运行参数
└── cyclic/
└── 样本名_head_tail.pdb # 最终闭环 PDB
模型从输入 PDB 继承什么,不继承什么
输入必须满足
- 至少两条包含 3 个以上标准氨基酸的蛋白链;
- 肽链与受体存在至少一处小于 6 Å 的原子接触;
- 关键主链原子 N、CA、C、O 基本完整;
- 第一模型中链 ID 唯一且可被 Biopython 解析;
- 当前 baseline 主要面向标准 20 种氨基酸。
生成时的继承关系
| 信息 | 是否继承 | 用途 |
|---|---|---|
| 受体完整结构 | 保留 | 提供固定结合口袋环境 |
| 输入肽长度 | 保留 | 决定生成节点数量 |
| 输入肽序列 | Condition 2 不作为答案提示 | 数据集中会编码,但实际条件分支清零 |
| 输入肽坐标 | 推理初始化时清除 | 仅用于确定口袋和初始数据组织 |
| 肽链 ID | 保留 | 用于保存、闭环和验证 |
从复合物 PDB 到真正共价闭环
从残基档案到模型张量
| 张量 | 形状 | 含义 |
|---|---|---|
X | [N, 14, 3] | N/CA/C/O 与侧链原子坐标;缺失或 padding 由 atom_mask 屏蔽 |
S | [N] | 氨基酸或 LAT/PAD/MASK/UNK 特殊 token |
mask | [N] | False=固定受体,True=待生成肽 |
position_ids | [N] | 肽链顺序与受体原始位置索引 |
atom_mask | [N, 14] | 标记每个原子通道是否真实存在 |
L | [batch, 3, 3] | 受体 Cα 协方差的 Cholesky 因子,用于坐标白化和还原 |
白化把不同位置、朝向和空间尺度的口袋转换到较统一的坐标系;扩散结束后再恢复到输入 PDB 坐标系。
为什么不直接生成 14 个原子的完整残基
冻结的全原子自编码器
预训练 AutoEncoder 使用 AMEGNN,将待生成肽压缩成两类潜变量: H 是每残基 8 维的序列/化学特征,Z 是每残基一个三维潜坐标。 推理时自编码器冻结,扩散模型只在这个低维空间中生成。
这样可以降低维度、减少原子级噪声,并让序列与结构在同一个潜空间内联合更新。扩散完成后, 解码器再把 H、Z 还原为 20 种标准氨基酸及其主链、侧链原子。
推理初始化
- 把肽的
S替换为 LAT token; - 将肽的 8 维 H 清零,防止原序列泄漏;
- 将肽坐标清零,只启用一个潜坐标通道;
- 保留受体 H、X 作为固定上下文;
- 用标准高斯噪声替换肽的 H 和 Z。
100 步反向扩散
其中 p 分别代表 H 和 Z。模型不是一步输出最终肽,而是在每个时间步预测当前潜变量中的噪声;
t>1 时保留少量随机性,最后一步不再加新噪声。受体参与消息传递但通过 mask 保持固定。
残基图、32 维 RBF 与 AMEGNN
节点
一个残基是一个图节点;最多 14 个原子作为节点内部坐标通道。
兼顾残基级计算效率与全原子几何信息。
边
同一样本内建立 N² 条有向边,分为同区域 context 和受体–肽 interaction。
边是通信线路,不代表化学键。
更新
边消息同时更新节点隐藏特征和相对方向上的坐标位移。
距离旋转不变,相对向量随整体旋转同步变化,保持 E(n) 等变。
为什么距离要转换成 32 维 RBF
分子相互作用随距离高度非线性:1 Å 可能是严重重叠,3–5 Å 可能是有效接触,远距离影响逐渐减弱。 单个距离数字要求 MLP 自己学习复杂曲线;32 个重叠 Gaussian 则像 32 个“软距离探测器”,分别对不同区间敏感。
示意:一个距离会同时激活附近多个 RBF 通道,因此 3.49 Å 与 3.51 Å 的编码平滑相近,不会像硬分箱那样突然跳变。 普通边使用 32 维、7 Å 缩放尺度;约束边使用 32 维、20 Å 缩放尺度。
AMEGNN 的一次消息传递
序列潜变量 H 会影响坐标更新,当前坐标和距离又会影响 H 的更新,因此模型不是先选序列再摆结构, 而是在 100 个时间步中联合协调两者。
官方四类条件与当前验证范围
| Condition | 设计类型 | 代码中的主要几何/残基条件 | 本机状态 |
|---|---|---|---|
| 1 | Stapled peptide | 选择相隔 3 或 4 位的 K–D/E,代表距离约 4.5 Å | 源码存在,未纳入一键验证 |
| 2 | Head-to-tail | 首尾节点建立双向特殊边,目标代表距离 3.8 Å | 已完成端到端验证 |
| 3 | Disulfide | 选定 Cys 对并施加约 3.8 Å 的代表距离条件 | 源码存在,需对应二硫键 relaxer |
| 4 | Bicycle | i、i+6、i+12 三个位点为 Cys,组合距离约 8 Å | 源码存在,需 bicycle linker 流程 |
Condition 2 的 guidance
每个时间步运行一次带首尾特殊边的预测 εcond,再运行一次不带特殊边的预测 εuncond。
本机设置 w=3:
这会放大首尾约束造成的去噪方向变化,但它仍是软条件;最终解码后的真正末端 N—C 距离需要筛选, 再交给 OpenMM 建立正常约 1.3–1.4 Å 的共价键。
从潜表示到可用 PDB 的两阶段边界
神经网络阶段
- 取最终肽潜变量 H [L,8] 与 Z [L,1,3];
- 序列解码器输出 20 AA + UNK 的 logits;
- 屏蔽 UNK 后逐位 argmax,得到标准氨基酸序列;
- 根据残基类型确定原子清单;
- 全原子 AMEGNN 展开主链和侧链坐标;
- 写出“几何上适合闭环、拓扑仍线性”的候选 PDB。
OpenMM 阶段
- PDBFixer 补充缺失原子和氢;
- 删除第一个残基的 H2/H3;
- 删除最后一个残基的 OXT;
- 添加末端 C—N topology bond 与 CONECT;
- CHARMM36 + 自定义残基模板建系;
- 在重原子位置约束下局部能量最小化。
pmetric 的正确解释
代码计算的是序列解码器对自身 argmax 类别的平均交叉熵,数值越小表示解码器越确信;它没有取指数, 不是严格 perplexity,更不是结合亲和力、自由能或实验活性评分。
1bjr 官方 LNR 样本的端到端结果
| 项目 | 结果 | 解释 |
|---|---|---|
| 参考肽序列 | VAQGGAAGLA | 输入复合物中的原始链 I |
| 生成肽序列 | AVVHKSYGLH | 10 位序列—结构联合生成结果 |
| pmetric | 0.004066 | 序列解码置信指标,不是亲和力 |
| OpenMM 能量 | 32,854,018.042 → −3,246.541 kcal/mol | 初始值包含严重拉伸的新建键;绝对值不可当结合自由能 |
| 最终 topology | 4,121 atoms / 4,165 bonds | OpenMM 重新解析后的完整复合物 |
| 末端共价键 | 已识别 | OpenMM topology 中存在第一个 N—最后一个 C bond |
| PyMOL | PASS | 无界面模式成功加载最终 PDB |
经过兼容性调整的实际运行栈
| 组件 | 本机版本 | 部署说明 |
|---|---|---|
| 操作系统 | Ubuntu 24.04.4 LTS / Linux 7.0.0-28 | x86_64 |
| GPU | NVIDIA GeForce RTX 4070 Laptop GPU,8 GB | 驱动 595.84 |
| Python | 3.9.25 | conda 环境名 CPComposer |
| PyTorch | 2.0.1 + CUDA 11.8 build | torch.cuda.is_available() = True |
| PyG 关键扩展 | torch-scatter 2.1.1+pt20cu118 | 与 PyTorch/CUDA ABI 匹配 |
| OpenMM | 8.1.1 | 神经网络用 GPU;本机 relaxer 使用 CPU 平台 |
| RDKit | 2023.09.6 | 环境中可用 |
| SciBERT | allenai/scibert_scivocab_uncased 本地资产 | 运行层重定向作者机器硬编码路径 |
env.yaml 对 CUDA/PyTorch 组合存在不一致描述;本部署没有机械复制环境,而是选择与当前驱动、
GPU 和 torch-scatter ABI 相匹配的 PyTorch 2.0.1 + cu118 组合,并完成实际 GPU 推理验证。
常见问题与处理原则
| 现象 | 常见原因 | 建议处理 |
|---|---|---|
| 提示至少需要两条蛋白链 | 只有一条可识别标准蛋白链,或链太短 | 确认输入是受体–肽复合物;显式指定链 ID |
| 预处理后无候选 | 肽与受体没有小于 6 Å 的原子接触 | 检查肽是否位于结合口袋,避免把两条远离的链直接拼在一个 PDB |
| GPU 不可用或 torch-scatter 导入失败 | PyTorch、CUDA build 与扩展 ABI 不匹配 | 在 CPComposer 环境中检查 torch 2.0.1/cu118 与 pt20cu118 扩展 |
| 生成端点距离 ≥5 Å | 单次随机样本未满足软约束 | 提高 CPC_SAMPLES;不要只靠增大 guidance |
| OpenMM 无法识别闭环 | 末端 N/C 缺失、非标准残基或链 ID 选错 | 检查输入 PDB 主链完整性和 CPC_PEPTIDE_CHAIN |
| 能量初值极高 | 新建 bond 在最小化前仍被拉长 | 结合最终能量、拓扑和键长判断;不要把初值当结合能 |
| PyMOL 加载失败 | PDB 格式、原子记录或路径异常 | 先检查最终文件是否存在,再查看 PyMOL 无界面输出 |
哪些结论可以说,哪些不能说
本报告支持的结论
- 官方 checkpoint 能在本机 GPU 上完成推理;
- Condition 2 能生成几何上接近闭环的候选;
- OpenMM 能建立并识别末端共价键;
- 最终 PDB 键长合理且能被 PyMOL 解析;
- 模型的数据流、张量和约束路径已由源码核查。
不能从单次 demo 推出的结论
- 不能证明生成肽具有高结合亲和力;
- 不能证明动力学稳定、可合成或有细胞活性;
- 不能用 pmetric 或 OpenMM 最小化能量替代自由能计算;
- 不能据此宣称四类约束均已完成端到端部署;
- 不能把 SciBERT embedding 存在等同于文本控制已经生效。
源码与权重指纹
| 项目 | 记录 |
|---|---|
| 上游项目 | jdp22 / CP-Composer_final;ICML 2025,Zero-Shot Cyclic Peptide Design with Composable Geometric Conditions |
| 本机基线目录 | /home/luohaoxuan/work/CP-Composer_baseline |
| 基线 commit | 6263670d7b04b383e6427e096ea3a878d48248f7 |
| checkpoint | epoch37_step85234.ckpt |
| checkpoint SHA-256 | eed3bcef300036967bbaec7bf9bb0c94f06b21bf3f4e5c5c571181280e2b7133 |
| 一键运行器 | /home/luohaoxuan/work/run_cpcomposer.sh |
| 运行封装 | /home/luohaoxuan/work/cpcomposer_runtime/run_cpcomposer.py |
| 验证输出 | cpcomposer_outputs/1bjr_20260820_174844/cyclic/1bjr_head_tail.pdb |
选择该历史 commit 是为了与 checkpoint、PromptDataset、generate.py 和 sample() 的发布接口保持一致。运行封装只在内存中处理 SciBERT 路径、CONDITION 类型和本机 OpenMM 平台兼容性,未改动模型源码与权重。