modules¶
modules 提供了一系列预定义模块,供用户实现自己的架构。
MultiMolecule 建立在
生态系统之上,拥抱类似的设计理念:不要 重复自己。
我们遵循 单一模型文件策略,其中 models 包中的每个模型都包含一个且仅有一个描述网络设计的 modeling.py 文件。
modules 包旨在提供简单、可重用的模块,这些模块在多个模型中保持一致。这种方法最大程度地减少了代码重复,并促进了干净、易于维护的代码。
核心特性¶
- 可重用性:
modules包括一些在不同模型中常用的组件,例如SequencePredictionHead。这减少了冗余,并简化了开发过程。 - 一致性:通过集中常见模块,我们确保更新和改进在所有模型中一致应用,提高了可靠性和性能。
- 灵活性:虽然变换网络编码器等模块被广泛使用,但它们在实现细节上经常有所不同(例如,前-归一化 vs. 后-归一化,不同的残差连接策略)。
modules包专注于更简单的组件,将复杂的、特定于模型的变化留给每个模型的modeling.py中定义。
Modules¶
- heads: 包括多种预测头,比如
SequencePredictionHead、TokenPredictionHead和ContactPredictionHead。 - embeddings:包括多种位置编码,比如
SinusoidalEmbedding和RotaryEmbedding。 - model:
Runner所使用的模型层 —— 抽象基类ModelBase加上两个具体实现:MonoModel(围绕 Hugging FaceAutoModelFor*的单任务包装)与PolyModel(backbone、可选 neck 与每任务一个 head 的组合模型)。
Models¶
modules 暴露了一个由 runner 包消费的小型模型层:
ModelBase:抽象基类。定义所有 multimolecule 模型必须实现的forward与trainable_parameters契约;runner 通过isinstance(model, ModelBase)而非具体子类来辨别模型。MonoModel:围绕 multimolecule(或 Hugging Face)AutoModelFor*预测模型的单任务包装。在state_dict层面对包装本身保持透明,因此 checkpoint 与裸 HF 模型可以互相加载。PolyModel:将 backbone、可选 neck 与每任务一个 head 组合为单个可训练模块。当任务图涉及多个标签、额外的非序列特征或 neck 变换时使用。
两者都以 "mono" 与 "poly" 注册到 [MODELS][multimolecule.MODELS]。
默认的 network.type: auto 会根据解析后的网络结构在二者之间自动分发;
用户也可以显式设置 network.type: mono 或 network.type: poly 以绕过分发器。