File size: 4,482 Bytes
a244197 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | # 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/ # 训练输出(自动创建)
```
|