4.3. 他のモデルを利用したサンプリング

abICSでは、機械学習モデルとして、aenet以外にも、 NequIP, MLIP-3を利用したサンプリングが可能となっています。 本項では、それぞれのモデルの学習およびサンプリングの方法について説明します。

4.3.1. NequIPを利用したサンプリング

NequIP のインストール

nequip の利用には、 NequIPのインストールが必要です。

下記コマンドにてインストールします。

$ python3 -m pip install wandb
$ python3 -m pip install nequip

また、abICSインストール時に[nequip]オプションを指定すれば、NequIPもインストールされます。

$ cd /path/to/abics
$ python3 -m pip install '.abics[nequip]'

インプットファイルの準備

まず、input_nequip.tomlを準備し、NequIPの実行に必要なパラメータを設定します。 下では、aenetのインプットから変更のある[sampling.solver]と[train]を抜粋しています。

[sampling.solver]
type = 'nequip'
base_input_dir = './baseinput_nequip'
perturb = 0.0
ignore_species = ["O"]

[train]
type = 'nequip'
base_input_dir = './nequip_train_input'
exe_command = { train = 'nequip-train'}
ignore_species = ["O"]
vac_map = []
restart = false

また、NequIPのインプットファイルinput.yamlをnequip_train_input/trainディレクトリに作成します。

root: results/spinel
run_name: run
seed: 123
dataset_seed: 456

# network
num_basis: 8
BesselBasis_trainable: true
PolynomialCutoff_p: 6
l_max: 1
r_max: 8.0
parity: true
num_layers: 3
num_features: 16

nonlinearity_type: gate

nonlinearity_scalars:
  e: silu
  o: tanh

nonlinearity_gates:
  e: silu
  o: tanh

model_builders:
 - SimpleIrrepsConfig
 - EnergyModel
 - PerSpeciesRescale
 - RescaleEnergyEtc


dataset: ase
dataset_file_name: structure.xyz
chemical_symbols:
  - Mg
  - Al

# logging
wandb: false
# verbose: debug

# training
n_train: 80%
n_val: 20%
batch_size: 5
train_val_split: random
#shuffle: true
metrics_key: validation_loss
use_ema: true
ema_decay: 0.99
ema_use_num_updates: true
max_epochs: 100
learning_rate: 0.01
# loss function
loss_coeffs: total_energy

モデル学習、サンプリングの方法に関してはaenetと同様です。

4.3.2. Allegroを利用したサンプリング

NequIPの拡張として実装されたモデルも、拡張パッケージをインストールし、NequIPの入力ファイルを適切に設定することで、そのまま利用可能です。Allegroは拡張パッケージの一つです。

Allegro のインストール

下記コマンドにてインストールします。

$ git clone --depth 1 https://github.com/mir-group/allegro.git
$ cd allegro
$ python3 -m pip install .

インプットファイルの準備

まず、input_allegro.tomlを準備し、Allegroの実行に必要なパラメータを設定します。 下では、aenetのインプットから変更のある[sampling.solver]と[train]を抜粋しています。

[sampling.solver]
type = 'allegro'
base_input_dir = './baseinput_allegro'
perturb = 0.0
ignore_species = ["O"]

[train]
type = 'allegro'
base_input_dir = './allegro_train_input'
exe_command = { train =  'nequip-train' }
ignore_species = ["O"]
vac_map = []
restart = false

また、Allegroのインプットファイル input.yamlallegro_train_input/train ディレクトリに作成します。

root: results/spinel
run_name: run
seed: 123
dataset_seed: 456

# network
num_basis: 8
BesselBasis_trainable: true
PolynomialCutoff_p: 6
l_max: 1
r_max: 8.0
parity: o3_full
num_layers: 2
# num_features: 16

env_embed_multiplicity: 16
embed_initial_edge: true
two_body_latent_mlp_latent_dimensions: [32, 64]
two_body_latent_mlp_nonlinearity: silu
latent_mlp_latent_dimensions: [64, 64]
latent_mlp_nonlinearity: silu
latent_mlp_initialization: uniform
latent_resnet: true
env_embed_mlp_latent_dimensions: []
env_embed_mlp_nonlinearity: null
env_embed_mlp_initialization: uniform
edge_eng_mlp_latent_dimensions: [16]
edge_eng_mlp_nonlinearity: null
edge_eng_mlp_initialization: uniform

model_builders:
 - allegro.model.Allegro
 - PerSpeciesRescale
 - RescaleEnergyEtc


dataset: ase
dataset_file_name: structure.xyz
chemical_symbols:
  - Mg
  - Al

# logging
wandb: false
# verbose: debug

# training
n_train: 80%
n_val: 20%
batch_size: 5
train_val_split: random
#shuffle: true
metrics_key: validation_loss
use_ema: true
ema_decay: 0.99
ema_use_num_updates: true
max_epochs: 100
learning_rate: 0.01
# loss function
loss_coeffs: total_energy

モデル学習、サンプリングの方法に関してはaenetと同様です。

4.3.3. MLIP-3を利用したサンプリング

MLIP-3 のインストール

mlip-3 の利用には、 MLIP-3のインストールが必要です。

下記コマンドにてインストールします。

$ git clone https://gitlab.com/ashapeev/mlip-3.git
$ cd mlip-3
$ ./configure --no-mpi
$ make mlp

インプットファイルの準備

まず、input_mlip3.tomlを準備し、mlip-3の実行に必要なパラメータを設定します。 下では、aenetのインプットから変更のある[sampling.solver]と[train]を抜粋しています。

[sampling.solver]
type = 'mlip_3'
path= '~/git/mlip-3/bin/mlp'
base_input_dir = './baseinput'
perturb = 0.0
run_scheme = 'subprocess'
ignore_species = ["O"]

[train]
type = 'mlip_3'
base_input_dir = './mlip_3_train_input'
exe_command = { train = '~/git/mlip-3/bin/mlp'}
ignore_species = ["O"]
vac_map = []
restart = false

上記の内、 [sampling.solver]path[train]exe_command では MLIP-3の実行ファイル mlp のパスを指定します。お使いの環境に合わせて変更してください。

また、MLIP-3のインプットファイル input.almtpmlip_3_train_input/train ディレクトリに作成します。

MTP
version = 1.1.0
potential_name = MTP1m
species_count = 3
potential_tag =
radial_basis_type = RBChebyshev
 min_dist = 2.3
     max_dist = 5
     radial_basis_size = 8
     radial_funcs_count = 2
alpha_moments_count = 8
alpha_index_basic_count = 5
alpha_index_basic = {{0, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}, {1, 0, 0, 0}}
alpha_index_times_count = 5
alpha_index_times = {{0, 0, 1, 5}, {1, 1, 1, 6}, {2, 2, 1, 6}, {3, 3, 1, 6}, {0, 5, 1, 7}}
alpha_scalar_moments = 5
alpha_moment_mapping = {0, 4, 5, 6, 7}

モデル学習、サンプリングの方法に関してはaenetと同様です。