Skip to content

feat(lammps): load installed backends dynamically#5707

Open
njzjz wants to merge 1 commit into
deepmodeling:masterfrom
njzjz:feat/lammps-dynamic-backends
Open

feat(lammps): load installed backends dynamically#5707
njzjz wants to merge 1 commit into
deepmodeling:masterfrom
njzjz:feat/lammps-dynamic-backends

Conversation

@njzjz

@njzjz njzjz commented Jul 1, 2026

Copy link
Copy Markdown
Member

Summary

  • avoid importing TensorFlow and PyTorch unconditionally from deepmd.lmp
  • add runtime library paths only for installed TensorFlow and/or PyTorch backends, while preserving CUDA preload and TF<2.12 libpython preload behavior
  • update the pip install docs and add focused tests for missing-backend handling

Tests

  • PYTHONPATH=$PWD pytest source/tests/test_lmp.py -v
  • ruff check .
  • ruff format . / commit hook ruff format
  • git diff --check
  • fork CI on njzjz/deepmd-kit branch feat/lammps-dynamic-backends: Build C library, Build C++, Build/upload to PyPI, CodeQL, Test Python, and Test C++ all passed; Mirror skipped

Fork CI runs:

Summary by CodeRabbit

  • New Features
    • Improved automatic runtime detection for LAMMPS so it can load available TensorFlow and/or PyTorch libraries more reliably at startup.
  • Bug Fixes
    • Better handles systems where one or more backends are missing, avoiding failed or incomplete environment setup.
    • Improves compatibility with older TensorFlow installs by finding the needed Python library automatically.
  • Documentation
    • Clarified installation guidance for LAMMPS and i-PI extras and updated backend requirements wording.

Copilot AI review requested due to automatic review settings July 1, 2026 23:47

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR refactors deepmd/lmp.py to move TensorFlow/PyTorch/CUDA library path discovery and LAMMPS environment variable setup into dedicated helper functions (_get_tensorflow_library_paths(), _get_pytorch_library_paths(), _configure_lammps_environment()), adds corresponding tests, and updates installation documentation.

Changes

LAMMPS environment refactor

Layer / File(s) Summary
Import cleanup and library path helper functions
deepmd/lmp.py
Removes top-level TF/PyTorch imports, adds Version/SHARED_LIB_DIR imports, and introduces helper functions that conditionally import TensorFlow/PyTorch and return their library/preload paths, returning empty results when a backend is unavailable.
Environment configuration function and execution
deepmd/lmp.py
Replaces inline setup with _configure_lammps_environment(), which aggregates CUDA/TF/PyTorch paths, sets preload_env/lib_env via get_env, defines op_dir, and runs at import time.
Tests and documentation updates
source/tests/test_lmp.py, doc/install/easy-install.md
Adds platform-gated tests covering both helper functions and _configure_lammps_environment() under missing/present backend scenarios; updates docs to state LAMMPS dynamically loads installed TensorFlow/PyTorch (and mentions JAX) rather than requiring both.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant lmp as deepmd/lmp.py (import time)
  participant tfHelper as _get_tensorflow_library_paths
  participant ptHelper as _get_pytorch_library_paths
  participant env as os.environ

  lmp->>tfHelper: get TF lib/preload paths
  tfHelper-->>lmp: paths or empty (if TF missing)
  lmp->>ptHelper: get PyTorch lib path
  ptHelper-->>lmp: path or empty (if torch missing)
  lmp->>lmp: compute CUDA paths (Linux)
  lmp->>env: set preload_env via get_env
  lmp->>env: set lib_env via get_env
Loading

Suggested labels: LAMMPS

Suggested reviewers: wanghan-iapcm

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: LAMMPS now dynamically loads installed TensorFlow and PyTorch backends.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
source/tests/test_lmp.py (1)

33-54: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider adding a test for the TF ≥ 2.12 branch.

Current coverage only exercises the TF_VERSION < 2.12 path (libpython preload). Add a complementary test with TF_VERSION="2.12.0" (or later) asserting the preload list stays empty, to guard the version-gated branch in _get_tensorflow_library_paths against regressions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@source/tests/test_lmp.py` around lines 33 - 54, Add a complementary test for
the TF_VERSION >= 2.12 branch in _get_tensorflow_library_paths, similar to
test_tensorflow_library_paths_include_libpython_for_old_tensorflow. Mock
deepmd.tf.env with TF_VERSION set to 2.12.0 or later and assert the returned
TensorFlow library paths are still correct while the libpython preload list is
empty, ensuring the version-gated logic does not regress.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@source/tests/test_lmp.py`:
- Around line 33-54: Add a complementary test for the TF_VERSION >= 2.12 branch
in _get_tensorflow_library_paths, similar to
test_tensorflow_library_paths_include_libpython_for_old_tensorflow. Mock
deepmd.tf.env with TF_VERSION set to 2.12.0 or later and assert the returned
TensorFlow library paths are still correct while the libpython preload list is
empty, ensuring the version-gated logic does not regress.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 256487fb-b134-4331-9a78-ff4abb1c8d12

📥 Commits

Reviewing files that changed from the base of the PR and between 42de67e and 81d8828.

📒 Files selected for processing (3)
  • deepmd/lmp.py
  • doc/install/easy-install.md
  • source/tests/test_lmp.py

@codecov

codecov Bot commented Jul 2, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 93.54839% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.07%. Comparing base (42de67e) to head (81d8828).
⚠️ Report is 2 commits behind head on master.

Files with missing lines Patch % Lines
deepmd/lmp.py 93.54% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5707      +/-   ##
==========================================
- Coverage   81.22%   81.07%   -0.16%     
==========================================
  Files         980      980              
  Lines      109352   109369      +17     
  Branches     4205     4208       +3     
==========================================
- Hits        88821    88667     -154     
- Misses      19011    19179     +168     
- Partials     1520     1523       +3     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@njzjz njzjz requested a review from wanghan-iapcm July 2, 2026 05:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants