SuperAPI AI 工具集

mosaic

智能体与模型

查看项目

更新于 10-15 10:04

技能介绍

用途

Mosaic(Escalante Bio)是一个基于 JAX 的框架,用于“使用连续松弛进行功能性、多目标蛋白质设计”。它通过对序列空间连续松弛的软序列进行梯度下降来优化,属于 ColabDesign、RSO 和 BindCraft 一脉,但有一个关键区别:它能在单个可微损失中组合来自不同模型的多个学习目标。

何时适合使用 Mosaic

Mosaic 是用于自定义目标的框架,而不是一键式方法。README 明确指出:它“可能需要大量手动调参(调整学习率等),经常产生无法通过简单 in-silico 测试的蛋白质,[并且] 应与标准过滤方法结合使用。”当固定流程无法表达你所需的目标时,才应使用它。对于开箱即用的 binder 运行,请改用 bindcraft。

前置条件

要求 最低 推荐
Python 3.11+ 3.11
框架 带 CUDA 或 TPU 的 JAX JAX CUDA 12
GPU 显存 24GB 48GB+(取决于所用预测器)

JIT 编译会使任何损失的首次调用变慢;后续调用很快。

安装

Mosaic 在本地 JAX GPU 或 TPU 构建上运行。它没有 CLI,也没有 Modal 集成;你通过 marimo notebook 或 Python API 驱动它。

git clone https://github.com/escalante-bio/mosaic && cd mosaic
uv sync --group jax-cuda      # 或 --group jax-tpu / --group jax-cpu
uv add jax[cuda12]            # GPU 构建可能需要
uv run marimo edit examples/example_notebook.py

现成示例包括 esmfold_minibinder.py、esmfold_vhh.py、boltzgen_pipeline.py 和 batched_protenix.py。

核心思想

设计目标由 LossTerm 对象构建,你可以用普通 Python 算术添加和缩放它们,然后交给优化器。

import mosaic.losses.structure_prediction as sp

# 从界面、置信度和逆折叠项组合损失
design_loss = (
    sp.BinderTargetContact()
    + sp.WithinBinderContact()
    + 0.05 * sp.TargetBinderPAE()
    + 0.05 * sp.BinderTargetPAE()
    + 0.025 * sp.IPTMLoss()
    + 0.1 * sp.PLDDTLoss()
)

损失项可以包装一个模型并以多种方式使用(例如结构预测器同时对 binder-target 复合物和作为单体的 binder 打分)。组合不同架构还能降低找到欺骗单一预测器的对抗序列的可能性。

可以组合的内容

类别 选项
结构预测器 AF2、Boltz-1、Boltz-2、Protenix、OpenFold3、ESMFold2
生成 / 设计 BoltzGen、Proteina-Complexa
逆折叠 ProteinMPNN、SolubleMPNN、AbMPNN
语言模型 ESM-2、ESM-C、AbLang、trigram
属性头 稳定性(megascale 训练)

优化器

优化器 用途
simplex_APGM 默认;概率单纯形上的近端梯度 / 镜像下降
batched_simplex_APGM 相同,但对许多设计进行 vmapped
gradient_MCMC 用于微调序列的离散移动

合理的 simplex_APGM 步长约为 0.1 * sqrt(binder_length)。

实例:使用 ipSAE 排序

已发表的 Nipah 竞赛配方在 Boltz-2 上优化设计损失,然后用由 ipTM 和 ipSAE 构建的独立多样本损失对候选进行排序。多样本损失是 Boltz2 模型上的方法,而不是自由函数:

from mosaic.models.boltz2 import Boltz2

boltz2 = Boltz2()
ranking_loss = boltz2.build_multisample_loss(
    loss=1.00 * sp.IPTMLoss()
    + 0.5 * sp.TargetBinderIPSAE()
    + 0.5 * sp.BinderTargetIPSAE(),
    features=design_features,
    num_samples=6,
    recycling_steps=3,
)

在 Adaptyv Nipah de novo 靶点上,该配方在 9 个测试设计中产生 8 个 binder,亲和力为纳摩尔级,是公开结果中该靶点上任何方法中最高的命中率。这是一个在单一困难靶点上的小型、专家调优样本,并非跨靶点的保证,因此应将 Mosaic 视为高上限选项,奖励仔细的目标设计,而不是开箱即用的默认选择。

该工作中有两个值得借鉴的实践:

  • 让优化器选择表位。要求一个 binder 而不固定热点,可能找到比手动选择更好的界面。
  • 将过滤严格度与测定通量匹配。在高通量测试中,轻度过滤以保持多样性,而不是应用可能拒绝好 binder 的严格共识过滤器。

决策树

我应该使用 Mosaic 吗?
│
├─ 需要跨多个模型的自定义目标? → Mosaic
├─ 想要带默认过滤器的一键 binder?    → bindcraft
├─ 想要全原子扩散设计?                  → boltzgen
└─ 只想要骨架多样性?                    → rfdiffusion + proteinmpnn

成本

Adaptyv 对这些模型自己的测试显示,Mosaic 每个被接受设计的成本约为 0.55 美元,在 7 个靶点上平均,是所测试方法中每个设计成本最低的之一。这只是计算成本;设置和调优工作才是使用 Mosaic 的真正成本。

故障排除

问题 原因 修复
设计未通过简单 in-silico 检查 目标约束不足 添加逆折叠和置信度项;用 protein-qc 过滤
优化不稳定 步长过大 降低 simplex_APGM 步长
首次调用非常慢 JIT 编译 预期行为;跨设计重用编译后的损失
大型预测器 OOM 一个损失中有多个模型 使用更小的预测器或更大的 GPU

下一步:用 boltz 或 chai 验证设计,用 ipsae 排序,然后用 protein-qc 过滤。