Skip to content

pair_style deepmd/kk does not populate global virial / thermo pressure for a DPA4 pt_expt model #5983

Description

@BDxka

Bug summary

When using a converted DPA4 pt_expt model with LAMMPS, pair_style deepmd/kk produces correct per-atom virials but fails to populate the global virial used by LAMMPS thermo pressure. As a result, Press, Pxx, Pyy, and Pzz contain only the kinetic contribution; at zero velocity they are exactly zero.
The same structure and model work correctly with the non-Kokkos path, pair_style deepmd.
This is important for NPT simulations: the barostat receives an incorrect pressure signal, which can cause unphysical cell evolution.

DeePMD-kit Version

Source checkout at commit 14a71f1

Backend and its version

PyTorch 2.11.0+cu126 (CUDA 12.6)

How did you download the software?

Built from source

Input Files, Running Commands, Error Log, etc.

Environment

  • LAMMPS: patch_4Jul2026 (LAMMPS (4 Jul 2026))

  • GPU: NVIDIA A40

  • CUDA: 12.6

  • DeePMD-kit was built from source at commit 14a71f13.

  • The DPA4 model was converted with:

    dp convert-backend --atomic-virial DPA4-Pro-MPtrj.pt DPA4-Pro-converted.pt2

Minimal test

The same relaxed alpha-quartz SiO2 structure was evaluated with zero velocities and run 0.
Input:

read_data quartz_dpa_relaxed.lmp
mass 1 28.0855
mass 2 15.9994
pair_style deepmd/kk DPA4-Pro-converted.pt2
pair_coeff * * Si O
compute stress all centroid/stress/atom NULL virial
thermo_style custom step temp press pxx pyy pzz
run 0

Observed behavior

With pair_style deepmd/kk, thermo output is exactly zero at zero velocity:
Press = 0
Pxx = 0
Pyy = 0
Pzz = 0

However, compute centroid/stress/atom returns nonzero per-atom virials. Their sum agrees with an independent ASE stress calculation within approximately 0.1%.
For the same structure and converted model, replacing only:
pair_style deepmd/kk DPA4-Pro-converted.pt2
with:
pair_style deepmd DPA4-Pro-converted.pt2
produces nonzero thermo pressure/stress consistent with both ASE and the summed per-atom virial.
Therefore, the issue appears specific to the Kokkos path.

Steps to Reproduce

  1. Convert a DPA4-Pro-MPtrj checkpoint to pt_expt format with:
    dp convert-backend --atomic-virial DPA4-Pro-MPtrj.pt DPA4-Pro-converted.pt2
  2. Build LAMMPS with Kokkos/CUDA support against this DeePMD-kit checkout.
  3. Run the input below (relaxed alpha-quartz SiO2, 72 atoms) with
    pair_style deepmd/kk, using:
    lmp -k on g 1 -sf kk -pk kokkos newton on neigh half -in in.lammps
  4. Observe that thermo Press/Pxx/Pyy/Pzz are exactly zero, while
    compute centroid/stress/atom still gives correct nonzero per-atom
    virials (summed, they agree with an independent ASE calculation
    within ~0.1%).
  5. Repeat step 3 with pair_style deepmd (no /kk) instead, changing
    nothing else. Thermo pressure/stress becomes correct and nonzero.

Further Information, Files, and Links

Source-level observation:

  • source/lmp/pair_deepmd.cpp performs the explicit global-virial reduction under if (vflag).
  • source/lmp/pair_deepmd_kokkos.cpp performs the corresponding reduction under if (vflag_global).
    In the failing reproduction, vflag is nonzero (10 when the per-atom virial compute is requested), whereas vflag_global = 0. Therefore, the explicit Kokkos reduction is skipped. The per-atom virial buffer is nevertheless nonzero and agrees with the non-Kokkos result; the LAMMPS global virial[] / thermo pressure remains zero.
    I have attached a zip archive containing the minimal structure, the two LAMMPS input files, the two comparison logs, and a README. The converted model is not included because it is large; it can be regenerated from the DPA4-Pro-MPtrj checkpoint using the conversion command given above.
    The DEBUG_VFLAG lines in the attached logs were added locally for diagnosis and are not part of the upstream DeePMD-kit output.

deepmd_kk_virial_bug_report.zip

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions