【MIIT program】add TransPolymer models #296
Conversation
|
|
| } | ||
|
|
||
|
|
||
| def transpolymer_collate_fn(batch): |
There was a problem hiding this comment.
辛苦使用默认的ppmat/dataset/collator_fn
There was a problem hiding this comment.
参考已有的model readme格式,完整的训练log,结果
| PE-I test R2: 0.4508 | ||
| ``` | ||
|
|
||
| Local PyTorch baseline in the same server environment: |
| import paddle | ||
| from paddle.io import Dataset | ||
|
|
||
| from ppmat.models.transpolymer.tokenizer import PolymerSmilesTokenizer |
There was a problem hiding this comment.
迁移到model里,dataset里只保留原始数据,并且需实现cache的功能,dataloader只加载数据,不处理embedding向量
There was a problem hiding this comment.
让 dataset 返回原始 SMILES,把 roberta-base tokenizer 的加载、缓存和编码逻辑放到模型输入处理或 transform 中
| ckpt/pretrain.pt/model_state.pdparams | ||
| ``` | ||
|
|
||
| ## Environment |
| and pretrained checkpoints should be uploaded to BCE by the reviewer and the | ||
| download links should be filled in here before merge. | ||
|
|
||
| ## Pretrained Checkpoint |
| <th nowrap="nowrap">GPUs</th> | ||
| <th nowrap="nowrap">Training time</th> | ||
| <th nowrap="nowrap">Config</th> | ||
| <th nowrap="nowrap">Checkpoint | Log</th> |
|
提供训练好的预训练模型权重 |
|
百度网盘的数据不完整 |
模型权重也放到百度网盘了,是需要直接传到仓库吗 |
需要完整的训练模型的权重和log,预训练模型权重需注册到registry 支持一键推理 |
但是注册到registry的下载链接我们怎么做呢,或者把训练模型的权重和log放到哪里然后您这边来上传获取下载链接 |
是的,提供给我链接,我会给你上传到网上的链接 |
|
另外原工作有多个数据,辛苦都实现下 |
…mer README,补充数据集说明、下载链接、解压路径和结果表;说明预训练权重/数据集与下游训练权重/log 的 artifact 拆分方式;新增预测示例 CSV;
There was a problem hiding this comment.
缺少md5 name url,构建build molecule和build sequence缺失
There was a problem hiding this comment.
没有cahce的逻辑,已有的mp20都有实现了
| from ppmat.models.transpolymer.transpolymer import TransPolymerRegressor | ||
|
|
||
| __all__ = [ | ||
| "RobertaConfig", |
| max_position_embeddings: int = 514 | ||
| type_vocab_size: int = 1 | ||
| initializer_range: float = 0.02 | ||
| layer_norm_eps: float = 1e-12 | ||
| pad_token_id: int = 1 | ||
| bos_token_id: int = 0 | ||
| eos_token_id: int = 2 | ||
| position_embedding_type: str = "absolute" | ||
|
|
||
| @classmethod | ||
| def from_dict(cls, values): | ||
| fields = cls.__dataclass_fields__ | ||
| return cls(**{k: v for k, v in values.items() if k in fields}) | ||
|
|
||
| @classmethod | ||
| def from_pretrained(cls, path): | ||
| with open(os.path.join(path, "config.json"), "r", encoding="utf-8") as f: | ||
| return cls.from_dict(json.load(f)) | ||
|
|
||
| def to_dict(self): | ||
| result = asdict(self) | ||
| result["model_type"] = "roberta" | ||
| return result | ||
|
|
||
| def save_pretrained(self, save_directory): | ||
| os.makedirs(save_directory, exist_ok=True) | ||
| with open(os.path.join(save_directory, "config.json"), "w", encoding="utf-8") as f: | ||
| json.dump(self.to_dict(), f, ensure_ascii=False, indent=2) |
| class ModelOutput: | ||
| def __init__(self, **kwargs): | ||
| self.__dict__.update(kwargs) | ||
|
|
||
| def __getitem__(self, item): | ||
| values = tuple(v for v in self.__dict__.values() if v is not None) | ||
| return values[item] | ||
|
|
||
| def __iter__(self): | ||
| return iter(tuple(v for v in self.__dict__.values() if v is not None)) |
| elif "model" in param_state_dict: | ||
| param_state_dict = param_state_dict["model"] |
| self.model.eval() | ||
|
|
||
| predict_config = config.get("Predict", None) | ||
| predict_config = config.get("Predict", None) or {} |
| model_params = config.get("Model", {}).get("__init_params__", {}) | ||
| self.smiles_key = model_params.get("smiles_key", "smiles") |
1. 概述
本 PR 新增 TransPolymer 在 PaddleMaterials 中的支持,用于聚合物性质预测任务。
TransPolymer 是一个基于 RoBERTa 结构的聚合物序列语言模型,可通过预训练聚合物序列表示,并在下游聚合物性质预测任务中进行微调。本 PR 提供 Paddle 版本模型实现、PE-I 下游微调配置、数据集适配、tokenizer、预训练权重加载方式以及最小 smoke test。
2. 本 PR 合入内容
2.1 模型实现
新增模型文件:
主要包含:
RobertaModelRobertaForMaskedLMTransPolymerRegressorPolymerSmilesTokenizer2.2 数据集适配
新增 PE-I CSV 数据集适配:
支持:
input_ids、attention_mask和回归标签2.3 训练入口
新增 TransPolymer 专用训练入口:
说明:当前 PaddleMaterials 的通用
property_prediction/train.py主要面向图结构模型;TransPolymer 输入是 tokenized polymer strings,因此本 PR 暂时提供任务专用训练入口。同时,模型和数据集仍放入ppmat/models与ppmat/datasets,方便后续继续接入统一 Trainer。2.4 配置与文档
新增 PE-I 微调配置和说明文档:
2.5 测试
新增最小 smoke test:
覆盖:
3. 文件放置位置
本 PR 新增文件包括:
需要在模型注册处补充:
需要在数据集注册处补充:
4. 数据集与预训练权重
PE-I 数据集和转换后的 Paddle 预训练权重已打包到外部链接:
压缩包结构:
下载后请放到 PaddleMaterials 根目录下:
5. 运行方式
在 PaddleMaterials 根目录执行:
运行 smoke test:
6. 验证环境
已验证环境:
7. 验证结果
7.1 PyTorch / Paddle 前向一致性
转换 PyTorch checkpoint 后,与原始 PyTorch 模型进行 forward parity 检查:
7.2 PE-I 下游微调结果
本地 Paddle 结果:
同一服务器环境下 PyTorch baseline:
论文参考结果:
当前 Paddle 版本结果已达到与本地 PyTorch baseline 同量级,但与论文报告结果仍存在一定差距。后续可继续对齐原始依赖版本、训练细节和多 seed 结果。
8. 迁移与修复说明
本次 Paddle 迁移过程中已验证并修复以下关键问题:
Embedding(padding_idx=...)的运行时 padding 输出置零行为,以对齐 HuggingFace/PyTorch checkpoint 行为。9. 说明
大体积数据集和模型权重未直接提交到仓库,已通过外部链接提供。后续如需正式合入,可由 reviewer 上传至 BCE,并将 README 中的数据和权重链接替换为 BCE 链接。