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

[Feature Request] support eval_descriptor usage in PT frozen model #4349

Closed
QuantumMisaka opened this issue Nov 13, 2024 · 3 comments
Closed

Comments

@QuantumMisaka
Copy link

Summary

The DeepEval.eval_descriptor() function should support frozen model with extension name .pth

Detailed Description

Now the DeepEval.eval_descriptor() function can only support PT model with extension .pt, when use frozen model with extension pth, error orrurs:

In [22]: DPf = DeepPot('model-64.pth')
You can use the environment variable DP_INFER_BATCH_SIZE tocontrol the inference batch size (nframes * natoms). The default value is 1024.

In [23]: anodes2 = descriptor_from_model(onedata, DPf)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[23], line 1
----> 1 anodes2 = descriptor_from_model(onedata, DPf)

Cell In[7], line 7, in descriptor_from_model(sys, model)
      5 type_trans = np.array([model_type_map.index(i) for i in sys.data['atom_names']])
      6 atypes = list(type_trans[sys.data['atom_types']])
----> 7 predict = model.eval_descriptor(coords, cells, atypes)
      8 return predict

File /data/softwares/miniconda3/envs/deepmd-devel/lib/python3.12/site-packages/deepmd/infer/deep_eval.py:445, in DeepEval.eval_descriptor(self, coords, cells, atom_types, fparam, aparam, mixed_type, **kwargs)
    398 """Evaluate descriptors by using this DP.
    399 
    400 Parameters
   (...)
    434     Descriptors.
    435 """
    436 (
    437     coords,
    438     cells,
   (...)
    443     natoms,
    444 ) = self._standard_input(coords, cells, atom_types, fparam, aparam, mixed_type)
--> 445 descriptor = self.deep_eval.eval_descriptor(
    446     coords,
    447     cells,
    448     atom_types,
    449     fparam=fparam,
    450     aparam=aparam,
    451     **kwargs,
    452 )
    453 return descriptor

File /data/softwares/miniconda3/envs/deepmd-devel/lib/python3.12/site-packages/deepmd/pt/infer/deep_eval.py:648, in DeepEval.eval_descriptor(self, coords, cells, atom_types, fparam, aparam, **kwargs)
    616 """Evaluate descriptors by using this DP.
    617 
    618 Parameters
   (...)
    645     Descriptors.
    646 """
    647 model = self.dp.model["Default"]
--> 648 model.set_eval_descriptor_hook(True)
    649 self.eval(
    650     coords,
    651     cells,
   (...)
    656     **kwargs,
    657 )
    658 descriptor = model.eval_descriptor()

File /data/softwares/miniconda3/envs/deepmd-devel/lib/python3.12/site-packages/torch/jit/_script.py:826, in RecursiveScriptModule.__getattr__(self, attr)
    823     self.__dict__[attr] = script_method
    824     return script_method
--> 826 return super().__getattr__(attr)

File /data/softwares/miniconda3/envs/deepmd-devel/lib/python3.12/site-packages/torch/jit/_script.py:533, in ScriptModule.__getattr__(self, attr)
    531 def __getattr__(self, attr):
    532     if "_actual_script_module" not in self.__dict__:
--> 533         return super().__getattr__(attr)
    534     return getattr(self._actual_script_module, attr)

File /data/softwares/miniconda3/envs/deepmd-devel/lib/python3.12/site-packages/torch/nn/modules/module.py:1931, in Module.__getattr__(self, name)
   1929     if name in modules:
   1930         return modules[name]
-> 1931 raise AttributeError(
   1932     f"'{type(self).__name__}' object has no attribute '{name}'"
   1933 )

AttributeError: 'RecursiveScriptModule' object has no attribute 'set_eval_descriptor_hook'

Further Information, Files, and Links

No response

@njzjz
Copy link
Member

njzjz commented Nov 13, 2024

It does support. In the unit tests, only .pth has been tested

descpt = self.dp.eval_descriptor(result.coord, result.box, result.atype)
expected_descpt = result.descriptor

(".pb", ".pth"), # model extension

@QuantumMisaka
Copy link
Author

The frozen process is done with 3.0.0b4 code, but the eval_descriptor usage is by using repo https://github.com/iProzd/deepmd-kit/tree/devel_compat_b4. The problem may be from there, but .pt model can be used normally

@njzjz
Copy link
Member

njzjz commented Nov 13, 2024

#4214 is merged after 3.0.0b4.

@njzjz njzjz closed this as not planned Won't fix, can't repro, duplicate, stale Nov 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants