Uni-Mol Tools 分子性质预测实战演示指南:5 类任务训练与六大模型管理特性全测
【免费下载链接】CLI-Anything"CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anything
导读:本文围绕 CLI-Anything 仓库中 README_DEMO.md 所定义的一体化演示流程展开,讲解如何用真实分子示例数据一口气训练 5 种任务类型的 9 个模型,并在二分类项目(Task 1)上完整验证存储分析、模型排名、最优模型、性能历史、清理建议、模型对比 6 大管理特性。读完本文,你将掌握
demo_real_examples.sh的四种启动方式、脚本的完整执行链路、每个特性的底层打分/清理算法,以及脱离脚本手动复测任一项目文件的具体 CLI 命令。
一、演示总览:为什么这是官方推荐的一体化 Demo
该演示脚本(demo_real_examples.sh)的核心目标有两个:
- Part 1:使用
examples/目录下的真实示例数据训练 5 种不同类型的分子性质预测任务; - Part 2:挑选模型最多的Task 1(二分类,5 个模型),逐一测试全部 6 项模型管理新特性,并额外生成测试集预测结果。
与仓库内其他演示(demo_5_tasks.sh、demo_complete.sh)相比,本脚本之所以被标注为Recommended(推荐),是因为它直接使用随工具提供的真实示例数据,无需生成数据、数据质量达到生产级,且覆盖全部 5 种任务类型与全部 6 项特性,一次运行即可完成端到端验证:
| 维度 | demo_real_examples.sh(本文主角) | demo_5_tasks.sh | demo_complete.sh |
|---|---|---|---|
| 数据来源 | ✅ 真实 examples 数据 | 由真实数据派生 | 小型合成数据 |
| 任务数量 | 5 | 5 | 4 |
| 各任务模型数 | 5, 1, 1, 1, 1 | 5, 1, 1, 1, 1 | 5, 1, 1, 1 |
| 测试的特性 | 全部 6 项 | 全部 6 项 | 全部 6 项 |
| 数据质量 | ✅ 生产级 | 真实派生 | 仅测试用 |
| 推荐度 | ✅推荐 | 可用 | 快速测试 |
二、快速开始:四种启动方式与参数说明
脚本支持灵活的参数传入,核心用法如下:
# Option 1:同时指定 examples 目录与权重目录 bash demo_real_examples.sh /path/to/examples /path/to/weights # Option 2:只指定 examples 目录(找不到权重时自动下载) bash demo_real_examples.sh /path/to/examples # Option 3:使用相对路径(examples 位于父目录、权重位于 ../Uni-Mol 时) bash demo_real_examples.sh ../examples ../Uni-Mol/unimol_tools/weights # Option 4:自动探测(../examples 存在时直接运行) bash demo_real_examples.sh参数约定:
EXAMPLES_DIR(可选):examples 目录路径;不传时脚本自动尝试../examples,若仍不存在则打印用法帮助并退出(对应脚本 demo_real_examples.sh 的逻辑);WEIGHTS_DIR(可选):权重目录路径。脚本的查找顺序为:命令行第 2 个参数 → 环境变量UNIMOL_WEIGHT_DIR→ 常见位置(../Uni-Mol/unimol_tools/unimol_tools/weights等)自动探测 → 全部失败时提示“Weights will be downloaded”(见脚本 demo_real_examples.sh)。
更多传参示例:
# 绝对路径 bash demo_real_examples.sh /home/user/unimol_tools/examples # 相对路径 bash demo_real_examples.sh ../../unimol_tools/examples # 环境变量 EXAMPLES=/opt/data/examples bash demo_real_examples.sh $EXAMPLES权重目录同样可以通过 CLI 的--weight-dir/-w参数或UNIMOL_WEIGHT_DIR环境变量指定,对应入口实现在 unimol_tools_cli.py。
三、Part 1:5 类真实任务训练全流程
脚本采用“创建项目 → 绑定数据集 → 启动训练”三步范式,对每个任务重复执行。以下为脚本实际使用的完整命令序列(5 个任务模式相同,仅任务类型与数据路径不同)。
3.1 训练任务一览
| 任务 | 类型 | 数据来源 | 训练模型数 |
|---|---|---|---|
| Task 1 | 二分类(Binary Classification) | examples/binary_classification/(mol_train.csv / mol_test.csv) | 5 |
| Task 2 | 回归(Regression) | examples/regression/(train.csv / test.csv) | 1 |
| Task 3 | 多分类(Multiclass,3 类) | examples/multiclass/(train.csv / test.csv) | 1 |
| Task 4 | 多标签分类(Multilabel,3 标签) | examples/multilabel_classification/(train.csv / test.csv) | 1 |
| Task 5 | 多标签回归(Multilabel Regression,3 目标) | examples/multilabel_regression/(train.csv / test.csv) | 1 |
合计:5 个任务共训练9 个模型(5+1+1+1+1)。
3.2 单任务三步命令详解(以 Task 1 为例)
# ① 创建二分类项目 python -m cli_anything.unimol_tools \ project new \ --name "task1_binary" \ --task classification \ --output-dir "$PROJECT_DIR" # ② 绑定训练集 CSV python -m cli_anything.unimol_tools \ -p "$PROJECT_DIR/task1_binary/project.json" \ project set-dataset train "$EXAMPLES_DIR/binary_classification/mol_train.csv" # ③ 启动训练(10 epoch、batch size 16) python -m cli_anything.unimol_tools \ -p "$PROJECT_DIR/task1_binary/project.json" \ train start \ --epochs 10 \ --batch-size 16底层实现说明:
project new会为每个项目创建独立目录并写入project.json,目录结构为output_dir/name/{project.json, experiments/, conformers/, predictions/}(见 project.py);- 项目配置按任务类型自动选择默认指标:二分类/多标签分类默认auc,多分类默认acc,回归/多标签回归默认mae(project.py);
- 默认训练配置为 epochs=10、batch_size=16、learning_rate=1e-4、early_stopping=20、80/20 随机划分;
train start通过--epochs、--batch-size、--lr、--gpus覆盖项目配置后调用run_training,并将新增 run 写回project.json(unimol_tools_cli.py)。
3.3 数据格式要求
所有训练数据均为 CSV,必须包含:
SMILES列:分子结构;- 目标列:各任务类型取值不同——二分类为 0/1 或 True/False,回归为浮点数,多分类为整数(0,1,2,...),多标签分类为多个 0/1 列,多标签回归为多个浮点数列。
SMILES,target CCO,1 CCCO,0 CC(C)O,1四、Part 2:六大模型管理特性逐一测试
Task 1 之所以被选中用于特性测试,官方文档给出四条理由:5 个已训练模型最适合演示模型管理、真实分子数据贴近实际药物发现场景、二分类指标清晰(AUC、accuracy)、自带测试集可演示预测。
脚本在执行完 Task 1 首次训练后,会循环追加训练 4 个模型(for i in {2..5},epochs=8、batch-size=16,输出重定向到/dev/null),使 Task 1 达到 5 个模型,随后依次触发 6 项测试。
特性 1:存储分析(Storage Analysis)
python -m cli_anything.unimol_tools -p "$PROJECT_JSON" storage输出会按models / conformers / predictions三类组件统计磁盘占用、百分比,并绘制 ASCII 进度条;当存在超过 7 天的旧模型或 AUC<0.75 的低分模型时,额外给出可释放空间的清理建议(对应实现见 storage.py)。典型输出:
Total: 152.3 MB ├── Models: 145.8 MB (95.7%) ├── Conformers: 5.2 MB (3.4%) └── Predictions: 1.3 MB (0.9%)特性 2:模型排名(Models Ranking)
python -m cli_anything.unimol_tools -p "$PROJECT_JSON" models rank排名依据calculate_model_score计算的0~10 综合得分:默认权重下 AUC 占比 100%(weight_auc=1.0,另有训练时长、时间新鲜度权重可调),AUC 直接乘 10 归一化(models_manager.py)。状态按 AUC 阈值分级:≥0.85 为 Best/Good、≥0.75 为 Ok、≥0.65 为 Weak、否则为Poor(models_manager.py)。前 3 名分别以 🥇🥈🥉 高亮展示:
Rank Run ID AUC Score Status 1 run_003 0.92 9.2 Best 2 run_002 0.85 8.5 Good 3 run_001 0.78 7.8 Ok 4 run_005 0.72 7.2 Weak 5 run_004 0.68 6.8 Poor特性 3:最优模型(Best Model)
python -m cli_anything.unimol_tools -p "$PROJECT_JSON" models best底层get_best_model优先按指定指标(默认 auc)取最大值,若所有 run 均无该指标则回退到第一个 run(models_manager.py):
Best Model: run_003 AUC: 0.92 Score: 9.2特性 4:性能历史(Model History)
python -m cli_anything.unimol_tools -p "$PROJECT_JSON" models historyget_model_history按时间戳排序生成时间线,比较首尾 AUC 差值(阈值 ±0.05)判定趋势为improving / declining / stable,并输出最优模型、上升趋势、近期回落三类洞察;CLI 端还会按 AUC 值绘制字符柱状图(models_manager.py):
Trend: Improving (+0.24 AUC) Best: run_003 (AUC: 0.92)特性 5:清理建议(Cleanup Suggestions)
python -m cli_anything.unimol_tools -p "$PROJECT_JSON" cleanupcleanup支持--keep-best(默认保留前 3 名)、--min-auc(默认 0.75)、--auto(自动执行删除)三个选项。决策逻辑(models_manager.py)为:Top N 永远保留→7 天内的近期模型保留→AUC 低于阈值且较旧的删除→其余中等表现旧模型归档:
DELETE: 2 models (58.2 MB savings) KEEP: 3 models (top performers + recent)删除/归档由 cleanup.py 落地:删除即移除experiments/下对应 run 目录并更新project.json;归档则打包为~/.unimol-archive/{project}_{run_id}_{日期}.tar.gz,支持archive list/archive restore还原。
特性 6:模型对比(Model Comparison)
python -m cli_anything.unimol_tools -p "$PROJECT_JSON" models compare run_001 run_002compare_models对两模型逐指标比较(auc、accuracy、precision、recall、f1_score、mcc、log_loss 及训练时长),除 log_loss 与训练时长为“越小越好”外其余均为“越大越好”,最终按“胜出指标数”决出 overall winner(models_manager.py):
Comparing: run_001 vs run_003 Winner: run_003 (4/4 metrics)彩蛋:最优模型预测
6 项测试结束后,脚本通过models best --json解析出最优 run_id,再用它对测试集做预测并写入predictions.csv:
python -m cli_anything.unimol_tools \ -p "$PROJECT_JSON" \ predict run "$BEST_RUN" "$EXAMPLES_DIR/binary_classification/mol_test.csv" \ --output "$PROJECT_DIR/predictions.csv"五、手动复测与 JSON 输出
演示完成后,任何任务项目都可以脱离脚本手动验证特性(-p指向各任务project.json即可):
# Task 1(二分类,5 个模型)— 全特性 python -m cli_anything.unimol_tools -p demo_projects/task1_binary/project.json storage python -m cli_anything.unimol_tools -p demo_projects/task1_binary/project.json models rank python -m cli_anything.unimol_tools -p demo_projects/task1_binary/project.json models best python -m cli_anything.unimol_tools -p demo_projects/task1_binary/project.json models history python -m cli_anything.unimol_tools -p demo_projects/task1_binary/project.json cleanup python -m cli_anything.unimol_tools -p demo_projects/task1_binary/project.json models compare run_001 run_002 # Task 2(回归) python -m cli_anything.unimol_tools -p demo_projects/task2_regression/project.json storage python -m cli_anything.unimol_tools -p demo_projects/task2_regression/project.json models best # Task 3~5 存储分析 python -m cli_anything.unimol_tools -p demo_projects/task3_multiclass/project.json storage python -m cli_anything.unimol_tools -p demo_projects/task4_multilabel_cls/project.json storage python -m cli_anything.unimol_tools -p demo_projects/task5_multilabel_reg/project.json storage # JSON 结构化输出(便于 Agent / 脚本消费) python -m cli_anything.unimol_tools -p demo_projects/task1_binary/project.json storage --json注意:JSON 模式的
--json为全局选项,需置于子命令之前,例如python -m cli_anything.unimol_tools --json -p ... storage(脚本结尾的 Next Steps 亦有此提示)。该模式由统一输出函数output()集中处理,错误时同样输出 JSON 错误对象(unimol_tools_cli.py),非常适合接入 AI Agent 做自动化流程。
若只想复测特性、跳过训练环节,可改用 test_features.sh,直接对既有project.json依次执行上述 6 项测试。
六、输出目录结构与成功标准
运行结束后生成demo_projects/目录:
demo_projects/ ├── task1_binary.json # 5 个模型 ← 被选中做特性测试 ├── task2_regression.json # 1 个模型 ├── task3_multiclass.json # 1 个模型 ├── task4_multilabel_cls.json # 1 个模型 ├── task5_multilabel_reg.json # 1 个模型 └── predictions.csv # 测试集预测结果验证成功的 10 项标准:
- ✅ 创建 5 个 project.json 文件
- ✅ 训练 9 个模型(5 + 1 + 1 + 1 + 1)
- ✅ 在 Task 1 上测试全部 6 项特性
- ✅ 生成测试集预测结果
- ✅ 展示存储占用分解
- ✅ 展示带得分的模型排名
- ✅ 识别出最优模型
- ✅ 展示性能趋势
- ✅ 提供清理建议
- ✅ 展示模型对比结果
七、执行时间预估与注意事项
| 环境 | 总耗时 | 明细 |
|---|---|---|
| GPU | 约 8~12 分钟 | Task 1 约 6 分钟(5 个模型);Task 2~5 各 1~2 分钟 |
| CPU | 约 40~60 分钟 | Task 1 约 30 分钟(5 个模型);Task 2~5 各约 10 分钟 |
脚本的彩色输出约定:蓝色= 信息消息、绿色= 成功消息、黄色= 段落标题(对应脚本 demo_real_examples.sh 定义的info/success/section函数)。运行前会清理旧的demo_projects/目录;若显式传入的 examples 目录不存在,脚本会以红色错误信息退出。
八、配套资源与延伸阅读
- 演示脚本本体:demo_real_examples.sh、仅测特性脚本:test_features.sh
- CLI 入口与全部命令定义:unimol_tools_cli.py
- 核心模块源码:项目管理 project.py、模型管理 models_manager.py、存储分析 storage.py、清理归档 cleanup.py
- 单元测试:模型管理测试 test_models_manager.py 覆盖得分计算、排名、最优、对比、历史、删除建议全链路
- 项目级文档:agent-harness 说明、安装指南、快速上手、API 参考
延伸提示:真实示例数据位于examples/(各任务train.csv/test.csv),本仓库的demo_real_examples.sh默认从../examples或命令行参数读取。若本地已有该数据目录,bash demo_real_examples.sh <examples路径>即可一条命令跑完全部演示;训练完成后,还可基于 docs/guides 与 docs/tutorials 进一步深入分类、回归等专项教程。
【免费下载链接】CLI-Anything"CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anything
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考