跳转至

modules

modules 提供了一系列预定义模块,供用户实现自己的架构。

MultiMolecule 建立在 🤗 生态系统之上,拥抱类似的设计理念:不要 重复自己。 我们遵循 单一模型文件策略,其中 models 包中的每个模型都包含一个且仅有一个描述网络设计的 modeling.py 文件。

modules 包旨在提供简单、可重用的模块,这些模块在多个模型中保持一致。这种方法最大程度地减少了代码重复,并促进了干净、易于维护的代码。

核心特性

  • 可重用性:modules 包括一些在不同模型中常用的组件,例如 SequencePredictionHead。这减少了冗余,并简化了开发过程。
  • 一致性:通过集中常见模块,我们确保更新和改进在所有模型中一致应用,提高了可靠性和性能。
  • 灵活性:虽然变换网络编码器等模块被广泛使用,但它们在实现细节上经常有所不同(例如,前-归一化 vs. 后-归一化,不同的残差连接策略)。modules 包专注于更简单的组件,将复杂的、特定于模型的变化留给每个模型的 modeling.py 中定义。

Modules

Models

modules 暴露了一个由 runner 包消费的小型模型层:

  • ModelBase:抽象基类。定义所有 multimolecule 模型必须实现的 forwardtrainable_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: mononetwork.type: poly 以绕过分发器。