Skip to content

[BUG] builtin.cmake + BUILD_SHARED_LIBS + PyTorch backend: undefined reference to torch/c10 when linking lmp #5516

Description

@bio-punk

Bug summary

Title

builtin.cmake + BUILD_SHARED_LIBS=yes + PyTorch backend: linking lmp fails with undefined references from libdeepmd_cc.so to libtorch/libc10


Environment

  • deepmd-kit: v3.1.2 (built from source, PyTorch backend)
  • Backend: PyTorch only (ENABLE_PYTORCH=ON, ENABLE_TENSORFLOW=OFF, USE_PT_PYTHON_LIBS=ON)
  • PyTorch: 2.10.0+cu126 (pip wheel, _GLIBCXX_USE_CXX11_ABI=True)
  • LAMMPS: stable_29Aug2024
  • Integration: built-in mode via source/lmp/builtin.cmake
  • LAMMPS CMake flags: BUILD_SHARED_LIBS=yes, CMAKE_INSTALL_PREFIX=<same prefix as deepmd>
  • OS: Linux (Apptainer container, GCC 13)(NGC pytorch-24.11-py3)

Steps to Reproduce

  1. Build and install deepmd-kit C++ interface with PyTorch into $PREFIX (e.g. venv).
  2. Patch LAMMPS cmake/CMakeLists.txt:
    include(/path/to/deepmd-kit/source/lmp/builtin.cmake)
    

DeePMD-kit Version

3.1.2

Backend and its version

pytorch2.10+cu126

How did you download the software?

Built from source

Input Files, Running Commands, Error Log, etc.

#!/bin/bash

DEEPMD_SRC=
LAMMPS_SRC=
VENV_PATH=
export CUDA_ROOT=/usr/local/cuda
export TMPDIR=/dev/shm
source $VENV_PATH/bin/activate

# 设置lammps的CMakeLists.txt,添加deepmd-kit的builtin.cmake
grep "include(${DEEPMD_SRC}/source/lmp/builtin.cmake)" ${LAMMPS_SRC}/cmake/CMakeLists.txt
if [ $? -ne 0 ]; then
    echo "include(${DEEPMD_SRC}/source/lmp/builtin.cmake)" >> ${LAMMPS_SRC}/cmake/CMakeLists.txt
    echo "Set CmakeLists.txt of lammps succeeded"
else
    echo "No need to set CmakeLists.txt of lammps"
fi

# 设置torch的cuda架构列表,使用v100的cuda架构
export TORCH_CUDA_ARCH_LIST="7.0"

TORCH_DIR=$(python -c "import torch; print(torch.utils.cmake_prefix_path)")

cd $LAMMPS_SRC
if [ -d build ]; then
    rm -rf build
    echo "Remove build directory"
fi
mkdir -p build
cd build
cmake \
    -D CMAKE_BUILD_TYPE=Debug \
    -D CMAKE_INSTALL_PREFIX=$VENV_PATH \
    -D CMAKE_PREFIX_PATH="${TORCH_DIR};${CUDA_ROOT};${VENV_PATH}"  \
    -D CMAKE_CXX_STANDARD=17 \
    -D CMAKE_CUDA_STANDARD=17 \
    -D CMAKE_CXX_COMPILER=${LAMMPS_SRC}/lib/kokkos/bin/nvcc_wrapper \
    -D CMAKE_MPI_C_COMPILER=mpicc \
    -D CMAKE_MPI_CXX_COMPILER=mpicxx \
    -D BUILD_MPI=ON \
    -D FFT=KISS \
    -D PKG_MEAM=yes \
    -D PKG_REAXFF=yes \
    -D GPU_API=CUDA \
    -D CUDA_TOOLKIT_ROOT_DIR=$CUDA_ROOT \
    -D CUDA_ARCHITECTURES=70 \
    -D GPU_ARCH=sm_70 \
    -D CUDAToolkit_ROOT=$CUDA_ROOT \
    -D CUDA_TOOLKIT_ROOT_DIR=$CUDA_ROOT \
    -D Kokkos_ENABLE_CUDA=ON \
    -D Kokkos_ARCH_VOLTA70=ON \
    -D Kokkos_ENABLE_CUDA_LAMBDA=ON \
    -D BUILD_SHARED_LIBS=yes \
${LAMMPS_SRC}/cmake

make -j10 VERBOSE=1
if [ $? -ne 0 ]; then
    echo "Make lammps failed"
    exit 1
else
    echo "Make lammps succeeded"
    make install
    echo "Install lammps at $VENV_PATH"
fi

Steps to Reproduce

Steps to Reproduce

0. Prerequisites

  • Linux with CMake ≥ 3.25, MPI, CUDA toolkit
  • Python venv with PyTorch installed (pip install torch, cxx11 ABI)
  • deepmd-kit v3.1.2 source and LAMMPS stable_29Aug2024 source

Verify PyTorch CMake path:

source $PREFIX/bin/activate
python -c "import torch; print(torch.__version__)"
python -c "import torch; print(torch._C._GLIBCXX_USE_CXX11_ABI)"   # expect True
export TORCH_DIR=$(python -c "import torch; print(torch.utils.cmake_prefix_path)")
echo $TORCH_DIR

### Further Information, Files, and Links

PyTorch 后端 + CMake builtin + `BUILD_SHARED_LIBS=yes` 时,`builtin.cmake` 只 PUBLIC 链接 `DeePMD::deepmd_c`,而 `deepmd_c→deepmd_cc→torch` 均为 PRIVATE,导致链 `lmp``libdeepmd_cc.so` 缺少 `libc10`/`libtorch` 符号;需在 LAMMPS 侧显式 `target_link_libraries(lammps PUBLIC ${TORCH_LIBRARIES})` 或由 upstream 传递链接。

https://github.com/deepmodeling/deepmd-kit/discussions/2768
https://github.com/deepmodeling/deepmd-kit/discussions/3568
https://github.com/deepmodeling/deepmd-kit/discussions/340

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions