fix(pd): sync Paddle backend with PT — full charge_spin end-to-end support#8
fix(pd): sync Paddle backend with PT — full charge_spin end-to-end support#8HydrogenSulfate with Copilot wants to merge 7 commits into
Conversation
… charge_spin Co-authored-by: HydrogenSulfate <23737287+HydrogenSulfate@users.noreply.github.com>
|
@copilot 你帮我看看dpa2、se_e2_a等pd后端的模型是否也需要进行类似的修改以对齐pt后端? |
…t_tebd descriptors Co-authored-by: HydrogenSulfate <23737287+HydrogenSulfate@users.noreply.github.com>
是的,PT 后端已经在这些描述符上添加了相应的接口,PD 后端需要同步。已在 commit 对
这些描述符本身不支持 charge_spin(故返回 0/False/None),但需要对齐接口以保证跨后端的一致性。 |
|
@copilot 我运行了下会报错:[2026-05-27 11:59:37,583] DEEPMD INFO -------------------------------------------------------------------------------------- |
1 similar comment
|
@copilot 我运行了下会报错:[2026-05-27 11:59:37,583] DEEPMD INFO -------------------------------------------------------------------------------------- |
…e_spin keyword Co-authored-by: HydrogenSulfate <23737287+HydrogenSulfate@users.noreply.github.com>
The training error was caused by a keyword argument mismatch I introduced: I renamed the Fixed in commit |
|
@copilot 顺便把单元测试也同步修改一下 |
Co-authored-by: HydrogenSulfate <23737287+HydrogenSulfate@users.noreply.github.com>
Done in commit
|
|
@copilot 按照 deepmodeling#5469 (review) 的建议,修改代码以与 pt 后端的代码对齐 |
…r PT backend Co-authored-by: HydrogenSulfate <23737287+HydrogenSulfate@users.noreply.github.com>
Done in commit Changes to align with PT backend (per iProzd's review):
|
|
@copilot 按照 deepmodeling#5469 (review) 的建议,修改代码以与 pt 后端的代码对齐 |
…hods Co-authored-by: HydrogenSulfate <23737287+HydrogenSulfate@users.noreply.github.com>
Done in commit
This completes the end-to-end |
Summary
PR deepmodeling#5431 decoupled
charge_spinfromfparamin the dpmodel DPA3 descriptor, addingdefault_chg_spinand related methods. However, the Paddle backend was not updated in sync, causing:This PR syncs all affected Paddle backend descriptors and the training pipeline with the PT/dpmodel interface, enabling end-to-end
charge_spinsupport fromcharge_spin.npydata loading through to model forward.Changes
dpa3.py(full charge_spin support)__init__: Addeddefault_chg_spin: list[float] | None = Noneparameter with validation (must have exactly 2 values) andself.default_chg_spinstorage.get_dim_chg_spin(),has_default_chg_spin(), andget_default_chg_spin()to match the dpmodel interface.get_default_chg_spin()returns apaddle.Tensor(matching PT backend).serialize: Added"default_chg_spin": self.default_chg_spinto the serialized dict.forward: Renamedfparamparameter tocharge_spinand updated all internal references accordingly.dpa1.py,dpa2.py,se_a.py,se_t_tebd.py(interface alignment)get_dim_chg_spin()(returns0),has_default_chg_spin()(returnsFalse), andget_default_chg_spin()(returnsNone) toDescrptDPA1,DescrptDPA2,DescrptSeA, andDescrptSeTTebd, matching the PT backend interface.charge_spin: paddle.Tensor | None = Noneparameter to theforwardmethod of these descriptors for API consistency with the PT backend.dp_atomic_model.py(separate charge_spin parameter)charge_spinas an independent parameter toforward_atomic(no longer derived fromfparam), matching the PT backend design wherecharge_spinandfparamare separate params.add_chg_spin_ebdis True andcharge_spinis None, falls back todescriptor.get_default_chg_spin().has_chg_spin_ebd(),get_dim_chg_spin(),has_default_chg_spin(),get_default_chg_spin().base_atomic_model.py(charge_spin propagation + interface methods)charge_spinparameter toforward_common_atomic()andforward(), propagated down toforward_atomic.has_chg_spin_ebd()(returnsFalse),get_dim_chg_spin()(returns0),has_default_chg_spin()(returnsFalse),get_default_chg_spin()(returnsNone), matching the PT base class.make_model.py(charge_spin propagation + interface methods)charge_spinparameter toforward_common(),forward_common_lower(), and the defaultforward()method.has_chg_spin_ebd(),get_dim_chg_spin(),has_default_chg_spin(),get_default_chg_spin()delegating toatomic_model.ener_model.py(charge_spin propagation)charge_spinparameter toforward()andforward_lower().training.py(training data pipeline)"charge_spin"toinput_keysso it is treated as model input (not label).find_charge_spin == 0.0(matching PT behavior when charge_spin data is not found).charge_spinDataRequirementIteminget_additional_data_requirement()withndof=2, atomic=False, and default fallback support viahas_default_chg_spin().wrapper.py(training wrapper)charge_spin: paddle.Tensor | None = Noneparameter toforward()and included it ininput_dictpassed to the model.Unit tests
source/tests/pd/model/test_dpa3.py: Updated descriptor calls to usecharge_spin=instead offparam=, and enabledadd_chg_spin_ebd=Truetest cases for the PD backend.source/tests/consistent/descriptor/common.py: Updatedeval_pd_descriptorto convert and forwardcharge_spinto the PD descriptor. Removed unusedfparam_pdvariable (CodeQL fix).source/tests/consistent/descriptor/test_dpa3.py: Removed theskip_pdoverride that was bypassing alladd_chg_spin_ebd=Truetest cases for the PD backend.source/tests/consistent/model/test_ener.py: Added PD model toTestEnerChgSpinEbdFparamend-to-end forward consistency test, validating dp vs pd output for all three charge_spin modes.