Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: add se_atten_v2to PyTorch and DP #3840

Merged
merged 46 commits into from
Jun 6, 2024
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
2e8396e
Add se_attn_v2 in pt
Chengqian-Zhang May 30, 2024
87c3561
Add se_attn_v2 in dp
Chengqian-Zhang May 30, 2024
9b238ad
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 30, 2024
95696ee
Delete redirect to dpa1
Chengqian-Zhang May 30, 2024
e55a891
Merge branch '3831' of github.com:Chengqian-Zhang/deepmd-kit into 3831
Chengqian-Zhang May 30, 2024
08bf55a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 30, 2024
999adc8
Change se_attn_v2 impl in dp and pt
Chengqian-Zhang May 30, 2024
0e27dc8
Fix conflict
Chengqian-Zhang May 30, 2024
c08f61d
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 30, 2024
59269f2
Add UT
Chengqian-Zhang May 30, 2024
30cc6af
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 30, 2024
46783e3
Fix bug
Chengqian-Zhang May 30, 2024
fdc67f8
Merge branch 'devel' into 3831
Chengqian-Zhang May 31, 2024
c46fb27
Merge branch 'devel' into 3831
Chengqian-Zhang Jun 3, 2024
9ae4dc7
Add UT for consistency
Chengqian-Zhang Jun 3, 2024
7e4826e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 3, 2024
d6a6e9b
change sentence
Chengqian-Zhang Jun 3, 2024
9680443
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 3, 2024
d4696a1
Delete tf UT
Chengqian-Zhang Jun 3, 2024
d5c7ace
Solve conflict
Chengqian-Zhang Jun 3, 2024
67ad350
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 3, 2024
8494c44
Change Doc of se_atten_v2
Chengqian-Zhang Jun 3, 2024
0218a01
Merge branch '3831' of github.com:Chengqian-Zhang/deepmd-kit into 3831
Chengqian-Zhang Jun 3, 2024
2e990cd
Delete tf se_atten_v2
Chengqian-Zhang Jun 3, 2024
890df1d
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 3, 2024
98d6daf
change attn-->atten
Chengqian-Zhang Jun 3, 2024
3d66922
Merge branch '3831' of github.com:Chengqian-Zhang/deepmd-kit into 3831
Chengqian-Zhang Jun 3, 2024
a14fed2
Add serialize in se_attn_v2 tf
Chengqian-Zhang Jun 3, 2024
c642823
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 3, 2024
10c8909
fix pre-commit
Chengqian-Zhang Jun 3, 2024
6b9a93e
Merge branch '3831' of github.com:Chengqian-Zhang/deepmd-kit into 3831
Chengqian-Zhang Jun 3, 2024
6177522
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 3, 2024
6813f7f
Solve conversation
Chengqian-Zhang Jun 4, 2024
45f9755
Merge branch '3831' of github.com:Chengqian-Zhang/deepmd-kit into 3831
Chengqian-Zhang Jun 4, 2024
d2fd8a2
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 4, 2024
9d4d0e3
Solve alert
Chengqian-Zhang Jun 4, 2024
d25993f
Merge branch '3831' of github.com:Chengqian-Zhang/deepmd-kit into 3831
Chengqian-Zhang Jun 4, 2024
001d21c
Solve alert
Chengqian-Zhang Jun 4, 2024
8ee1125
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 4, 2024
b0380f9
Update deepmd/dpmodel/descriptor/se_atten_v2.py
Chengqian-Zhang Jun 4, 2024
6f2473f
Update deepmd/pt/model/descriptor/se_atten_v2.py
Chengqian-Zhang Jun 4, 2024
ef94c04
Update deepmd/pt/model/descriptor/se_atten_v2.py
Chengqian-Zhang Jun 4, 2024
b39fcce
Update deepmd/utils/argcheck.py
Chengqian-Zhang Jun 4, 2024
c982d0e
Merge branch 'devel' into 3831
Chengqian-Zhang Jun 5, 2024
c3892f4
Delete doc_stripped_type_embedding
Chengqian-Zhang Jun 5, 2024
38fc569
Merge branch '3831' of github.com:Chengqian-Zhang/deepmd-kit into 3831
Chengqian-Zhang Jun 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions deepmd/dpmodel/descriptor/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: LGPL-3.0-or-later
from .dpa1 import (
DescrptDPA1,
DescrptSeAttenV2,
)
from .dpa2 import (
DescrptDPA2,
Expand All @@ -22,6 +23,7 @@
"DescrptSeA",
"DescrptSeR",
"DescrptDPA1",
"DescrptSeAttenV2",
"DescrptDPA2",
"DescrptHybrid",
"make_base_descriptor",
Expand Down
74 changes: 74 additions & 0 deletions deepmd/dpmodel/descriptor/dpa1.py
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,80 @@ def call(
)


@BaseDescriptor.register("se_atten_v2")
Chengqian-Zhang marked this conversation as resolved.
Show resolved Hide resolved
class DescrptSeAttenV2(DescrptDPA1):
def __init__(
self,
rcut: float,
rcut_smth: float,
sel: Union[List[int], int],
ntypes: int,
neuron: List[int] = [25, 50, 100],
axis_neuron: int = 8,
tebd_dim: int = 8,
resnet_dt: bool = False,
trainable: bool = True,
type_one_side: bool = False,
attn: int = 128,
attn_layer: int = 2,
attn_dotr: bool = True,
attn_mask: bool = False,
exclude_types: List[Tuple[int, int]] = [],
env_protection: float = 0.0,
set_davg_zero: bool = False,
activation_function: str = "tanh",
precision: str = DEFAULT_PRECISION,
scaling_factor=1.0,
normalize: bool = True,
temperature: Optional[float] = None,
trainable_ln: bool = True,
ln_eps: Optional[float] = 1e-5,
concat_output_tebd: bool = True,
spin: Optional[Any] = None,
stripped_type_embedding: Optional[bool] = None,
use_econf_tebd: bool = False,
type_map: Optional[List[str]] = None,
# consistent with argcheck, not used though
seed: Optional[int] = None,
) -> None:
DescrptDPA1.__init__(
self,
rcut,
rcut_smth,
sel,
ntypes,
neuron=neuron,
axis_neuron=axis_neuron,
tebd_dim=tebd_dim,
tebd_input_mode="strip",
resnet_dt=resnet_dt,
trainable=trainable,
type_one_side=type_one_side,
attn=attn,
attn_layer=attn_layer,
attn_dotr=attn_dotr,
attn_mask=attn_mask,
exclude_types=exclude_types,
env_protection=env_protection,
set_davg_zero=set_davg_zero,
activation_function=activation_function,
precision=precision,
scaling_factor=scaling_factor,
normalize=normalize,
temperature=temperature,
trainable_ln=trainable_ln,
ln_eps=ln_eps,
smooth_type_embedding=True,
concat_output_tebd=concat_output_tebd,
spin=spin,
stripped_type_embedding=stripped_type_embedding,
use_econf_tebd=use_econf_tebd,
type_map=type_map,
# consistent with argcheck, not used though
seed=seed,
)


class NeighborGatedAttention(NativeOP):
def __init__(
self,
Expand Down
4 changes: 4 additions & 0 deletions deepmd/pt/model/descriptor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
DescrptBlockSeAtten,
DescrptDPA1,
)
from .se_atten_v2 import (
DescrptSeAttenV2,
)
Chengqian-Zhang marked this conversation as resolved.
Show resolved Hide resolved
from .dpa2 import (
DescrptDPA2,
)
Expand Down Expand Up @@ -39,6 +42,7 @@
"make_default_type_embedding",
"DescrptBlockSeA",
"DescrptBlockSeAtten",
"DescrptSeAttenV2"
"DescrptSeA",
"DescrptSeR",
"DescrptDPA1",
Expand Down
153 changes: 153 additions & 0 deletions deepmd/pt/model/descriptor/se_atten_v2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# SPDX-License-Identifier: LGPL-3.0-or-later
from typing import (
List,
Optional,
Tuple,
Union,
)

from .base_descriptor import (
BaseDescriptor,
)
from deepmd.pt.model.descriptor.dpa1 import (
DescrptDPA1,
)


@BaseDescriptor.register("se_atten_v2")
class DescrptSeAttenV2(DescrptDPA1):
def __init__(
self,
rcut: float,
rcut_smth: float,
sel: Union[List[int], int],
ntypes: int,
neuron: list = [25, 50, 100],
axis_neuron: int = 16,
tebd_dim: int = 8,
set_davg_zero: bool = True,
attn: int = 128,
attn_layer: int = 2,
attn_dotr: bool = True,
attn_mask: bool = False,
activation_function: str = "tanh",
precision: str = "float64",
resnet_dt: bool = False,
exclude_types: List[Tuple[int, int]] = [],
env_protection: float = 0.0,
scaling_factor: int = 1.0,
normalize=True,
temperature=None,
concat_output_tebd: bool = True,
trainable: bool = True,
trainable_ln: bool = True,
ln_eps: Optional[float] = 1e-5,
type_one_side: bool = False,
stripped_type_embedding: Optional[bool] = None,
seed: Optional[int] = None,
use_econf_tebd: bool = False,
type_map: Optional[List[str]] = None,
# not implemented
spin=None,
type: Optional[str] = None,
old_impl: bool = False,
) -> None:
Chengqian-Zhang marked this conversation as resolved.
Show resolved Hide resolved
r"""Construct smooth version of embedding net of type `se_atten`.
Chengqian-Zhang marked this conversation as resolved.
Show resolved Hide resolved

Parameters
----------
rcut : float
The cut-off radius :math:`r_c`
rcut_smth : float
From where the environment matrix should be smoothed :math:`r_s`
sel : list[int], int
list[int]: sel[i] specifies the maxmum number of type i atoms in the cut-off radius
int: the total maxmum number of atoms in the cut-off radius
ntypes : int
Number of element types
neuron : list[int]
Number of neurons in each hidden layers of the embedding net :math:`\mathcal{N}`
axis_neuron : int
Number of the axis neuron :math:`M_2` (number of columns of the sub-matrix of the embedding matrix)
tebd_dim : int
Dimension of the type embedding
set_davg_zero : bool
Set the shift of embedding net input to zero.
attn : int
Hidden dimension of the attention vectors
attn_layer : int
Number of attention layers
attn_dotr : bool
If dot the angular gate to the attention weights
attn_mask : bool
(Only support False to keep consistent with other backend references.)
(Not used in this version.)
If mask the diagonal of attention weights
activation_function : str
The activation function in the embedding net. Supported options are |ACTIVATION_FN|
precision : str
The precision of the embedding net parameters. Supported options are |PRECISION|
resnet_dt : bool
Time-step `dt` in the resnet construction:
y = x + dt * \phi (Wx + b)
exclude_types : List[List[int]]
The excluded pairs of types which have no interaction with each other.
For example, `[[0, 1]]` means no interaction between type 0 and type 1.
env_protection : float
Protection parameter to prevent division by zero errors during environment matrix calculations.
scaling_factor : float
The scaling factor of normalization in calculations of attention weights.
If `temperature` is None, the scaling of attention weights is (N_dim * scaling_factor)**0.5
normalize : bool
Whether to normalize the hidden vectors in attention weights calculation.
temperature : float
If not None, the scaling of attention weights is `temperature` itself.
trainable_ln : bool
Whether to use trainable shift and scale weights in layer normalization.
ln_eps : float, Optional
The epsilon value for layer normalization.
type_one_side : bool
If 'False', type embeddings of both neighbor and central atoms are considered.
If 'True', only type embeddings of neighbor atoms are considered.
Default is 'False'.
seed : int, Optional
Random seed for parameter initialization.
"""
DescrptDPA1.__init__(
self,
rcut,
rcut_smth,
sel,
ntypes,
neuron=neuron,
axis_neuron=axis_neuron,
tebd_dim=tebd_dim,
tebd_input_mode="strip",
set_davg_zero=set_davg_zero,
attn=attn,
attn_layer=attn_layer,
attn_dotr=attn_dotr,
attn_mask=attn_mask,
activation_function=activation_function,
precision=precision,
resnet_dt=resnet_dt,
exclude_types=exclude_types,
env_protection=env_protection,
scaling_factor=scaling_factor,
normalize=normalize,
temperature=temperature,
concat_output_tebd=concat_output_tebd,
trainable=trainable,
trainable_ln=trainable_ln,
ln_eps=ln_eps,
smooth_type_embedding=True,
type_one_side=type_one_side,
stripped_type_embedding=stripped_type_embedding,
seed=seed,
use_econf_tebd=use_econf_tebd,
type_map=type_map,
# not implemented
spin=spin,
type=type,
old_impl=old_impl,
)
81 changes: 79 additions & 2 deletions deepmd/utils/argcheck.py
Original file line number Diff line number Diff line change
Expand Up @@ -615,14 +615,91 @@ def descrpt_se_atten_args():
]


@descrpt_args_plugin.register("se_atten_v2", doc=doc_only_tf_supported)
@descrpt_args_plugin.register("se_atten_v2")
def descrpt_se_atten_v2_args():
doc_set_davg_zero = "Set the normalization average to zero. This option should be set when `se_atten` descriptor or `atom_ener` in the energy fitting is used"
doc_trainable_ln = (
"Whether to use trainable shift and scale weights in layer normalization."
)
doc_ln_eps = "The epsilon value for layer normalization. The default value for TensorFlow is set to 1e-3 to keep consistent with keras while set to 1e-5 in PyTorch and DP implementation."
doc_tebd_dim = "The dimension of atom type embedding."
doc_use_econf_tebd = r"Whether to use electronic configuration type embedding. For TensorFlow backend, please set `use_econf_tebd` in `type_embedding` block instead."
doc_temperature = "The scaling factor of normalization in calculations of attention weights, which is used to scale the matmul(Q, K)."
doc_scaling_factor = (
"The scaling factor of normalization in calculations of attention weights, which is used to scale the matmul(Q, K). "
"If `temperature` is None, the scaling of attention weights is (N_hidden_dim * scaling_factor)**0.5. "
"Else, the scaling of attention weights is setting to `temperature`."
)
doc_normalize = (
"Whether to normalize the hidden vectors during attention calculation."
)
doc_concat_output_tebd = (
"Whether to concat type embedding at the output of the descriptor."
)
doc_stripped_type_embedding = (
"(Deprecated, kept only for compatibility.) Whether to strip the type embedding into a separate embedding network. "
Chengqian-Zhang marked this conversation as resolved.
Show resolved Hide resolved
"Setting this parameter to `True` is equivalent to setting `tebd_input_mode` to 'strip'. "
"Setting it to `False` is equivalent to setting `tebd_input_mode` to 'concat'."
"The default value is `None`, which means the `tebd_input_mode` setting will be used instead."
)

return [
*descrpt_se_atten_common_args(),
Argument(
"set_davg_zero", bool, optional=True, default=False, doc=doc_set_davg_zero
"stripped_type_embedding",
bool,
optional=True,
default=None,
doc=doc_stripped_type_embedding,
),
Argument(
"set_davg_zero", bool, optional=True, default=True, doc=doc_set_davg_zero
Chengqian-Zhang marked this conversation as resolved.
Show resolved Hide resolved
),
Argument(
"trainable_ln", bool, optional=True, default=True, doc=doc_trainable_ln
),
Argument("ln_eps", float, optional=True, default=None, doc=doc_ln_eps),
# pt only
Argument(
"tebd_dim",
int,
optional=True,
default=8,
doc=doc_only_pt_supported + doc_tebd_dim,
),
Argument(
"use_econf_tebd",
bool,
optional=True,
default=False,
doc=doc_only_pt_supported + doc_use_econf_tebd,
),
Argument(
"scaling_factor",
float,
optional=True,
default=1.0,
doc=doc_only_pt_supported + doc_scaling_factor,
),
Argument(
"normalize",
bool,
optional=True,
default=True,
doc=doc_only_pt_supported + doc_normalize,
),
Argument(
"temperature",
float,
optional=True,
doc=doc_only_pt_supported + doc_temperature,
),
Argument(
"concat_output_tebd",
bool,
optional=True,
default=True,
doc=doc_only_pt_supported + doc_concat_output_tebd,
),
]

Expand Down
Loading