# MACE 训练 Demo ## 快速上手 ### 1. 选择配置 `configs/` 目录下提供了多个预定义的实验配置: | 配置文件 | 数据集 | GPU 数 | 说明 | | ------------------------------- | ------------ | ------ | ---------------- | | `DMC.yaml` | DMC 溶剂 XTB | 1 | 入门示例,最简单 | | `water_1dcu.yaml` | Water | 1 | 单卡训练 | | `water_4dcu.yaml` | Water | 4 | 4 卡分布式训练 | | `water_8dcu.yaml` | Water | 8 | 8 卡分布式训练 | | `ani1x_8dcu.yaml` | ANI-1x | 8 | 分布式训练 | | `nanotube_l0_8dcu.yaml` | 碳纳米管 | 8 | max_L=0 | | `nanotube_l2_8dcu.yaml` | 碳纳米管 | 8 | max_L=2 | | `nanotube_l2_16dcu.yaml` | 碳纳米管 | 2x8 | 多节点分布式 | ### 2. 运行训练 ```bash # 方式一:直接运行(交互式或在已分配的 SLURM 节点上) bash run.sh --config configs/DMC.yaml # 方式二:提交 SLURM 作业 bash run.sh --config configs/DMC.yaml --submit # 方式三:预览命令(不执行) bash run.sh --config configs/DMC.yaml --dry-run ``` ### 3. 查看输出 训练输出自动保存到 `outputs/{实验名}_{时间戳}/` 目录,包含: - 模型 checkpoint - 训练日志 - 当次使用的配置快照 (`config.yaml`) ## 创建自定义实验 1. 复制一个最接近的配置文件: ```bash cp configs/DMC.yaml configs/my_experiment.yaml ``` 2. 编辑 YAML 中的参数(只需改参数值,不用碰任何 shell 脚本) 3. 运行: ```bash bash run.sh --config configs/my_experiment.yaml ``` ## YAML 配置字段说明 ### `train_args` - 训练参数 所有字段直接映射为 `train.py` 的命令行参数。布尔值 `true` 转为标志参数(如 `swa: true` -> `--swa`),`false` 则跳过。 常用参数: | 参数 | 说明 | 示例 | | -------------- | ---------------- | ----------------------------- | | `model` | 模型类型 | `MACE` | | `r_max` | 截断半径 (A) | `4.0` - `6.0` | | `num_channels` | 通道数 | `64`, `256` | | `max_L` | 最大角动量量子数 | `0`, `2` | | `batch_size` | 训练批大小 | `2` - `128` | | `E0s` | 原子参考能量 | `average`, `isolated`, 显式字典 | | `swa` | 启用随机权重平均 | `true` | | `ema` | 启用指数移动平均 | `true` | | `distributed` | 启用分布式训练 | `true` (多卡时自动添加) | ### `launch` - 启动配置 | 参数 | 说明 | 启动方式 | | ------------------------------- | ---------- | ------------------------------ | | `num_nodes: 1, num_gpus: 1` | 单卡 | `python train.py` | | `num_nodes: 1, num_gpus: N` | 单节点多卡 | `torchrun --nproc_per_node=N` | | `num_nodes: M, num_gpus: N` | 多节点 | `srun` (需 --submit) | ### `env` - 环境配置 | 参数 | 说明 | | ----------- | ----------------------- | | `conda_env` | conda 环境名 | | `modules` | 需要加载的 module 列表 | ### `slurm` - SLURM 作业配置 | 参数 | 说明 | | --------------- | -------------- | | `partition` | SLURM 分区 | | `time` | 作业时间限制 | | `cpus_per_task` | CPU 核心数 | ### `nccl` - 多节点通信配置(可选) | 参数 | 说明 | | --------------- | ------------------- | | `socket_ifname` | InfiniBand 网卡名 | | `ib_hca` | IB HCA 设备名 | | `proto` | NCCL 协议 | ## 目录结构 ``` demo/ run.sh # 统一入口脚本 _parse_config.py # 配置解析器(内部使用) README.md # 本文件 configs/ # 实验配置 templates/ # 脚本模板 env_setup.sh # 环境初始化 preflight_check.sh # 训练前预检 slurm_header.template # SLURM header 模板 outputs/ # 训练输出(自动创建) ```