|
1 | | -# test libdeepmd_c.tar.gz works with gcc 4.9.0, glibc 2.19 |
| 1 | +# test libdeepmd_c.tar.gz works on a manylinux 2.28 runtime |
2 | 2 | set -e |
3 | 3 |
|
4 | | -SCRIPT_PATH=$(dirname $(realpath -s $0)) |
| 4 | +SCRIPT_PATH=$(dirname "$(realpath -s "$0")") |
| 5 | +MANYLINUX_IMAGE=${MANYLINUX_IMAGE:-quay.io/pypa/manylinux_2_28_x86_64:latest} |
| 6 | +PYTHON_BIN=${PYTHON_BIN:-/opt/python/cp311-cp311/bin/python} |
| 7 | +PYTORCH_DEPENDENCY_GROUP=${PYTORCH_DEPENDENCY_GROUP:-pin_pytorch_cpu} |
| 8 | +PYTORCH_TORCH_BACKEND=${PYTORCH_TORCH_BACKEND:-cpu} |
5 | 9 |
|
6 | 10 | # assume libdeepmd_c.tar.gz has been created |
7 | 11 |
|
8 | | -docker run --rm -v ${SCRIPT_PATH}/../..:/root/deepmd-kit -w /root/deepmd-kit \ |
9 | | - gcc:4.9 \ |
10 | | - /bin/sh -c "tar vxzf libdeepmd_c.tar.gz \ |
11 | | - && cd examples/infer_water \ |
12 | | - && gcc convert_model.c -std=c99 -L ../../libdeepmd_c/lib -I ../../libdeepmd_c/include -Wl,--no-as-needed -ldeepmd_c -Wl,-rpath=../../libdeepmd_c/lib -o convert_model \ |
13 | | - && gcc infer_water.c -std=c99 -L ../../libdeepmd_c/lib -I ../../libdeepmd_c/include -Wl,--no-as-needed -ldeepmd_c -Wl,-rpath=../../libdeepmd_c/lib -o infer_water \ |
14 | | - && ./convert_model \ |
15 | | - && ./infer_water" |
| 12 | +docker run --rm -v "${SCRIPT_PATH}/../..":/root/deepmd-kit -w /root/deepmd-kit \ |
| 13 | + -e CHECK_PYTORCH_RUNTIME="${CHECK_PYTORCH_RUNTIME:-0}" \ |
| 14 | + -e PYTHON_BIN="${PYTHON_BIN}" \ |
| 15 | + -e PYTORCH_DEPENDENCY_GROUP="${PYTORCH_DEPENDENCY_GROUP}" \ |
| 16 | + -e PYTORCH_TORCH_BACKEND="${PYTORCH_TORCH_BACKEND}" \ |
| 17 | + "${MANYLINUX_IMAGE}" \ |
| 18 | + /bin/bash -lc 'set -euo pipefail |
| 19 | + export PATH="$(dirname "${PYTHON_BIN}"):${PATH}" |
| 20 | + tar vxzf libdeepmd_c.tar.gz |
| 21 | + if [ -f libdeepmd_c/download_libtorch.sh ]; then |
| 22 | + sh -n libdeepmd_c/download_libtorch.sh |
| 23 | + fi |
| 24 | + cd examples/infer_water |
| 25 | + gcc convert_model.c -std=c99 -L ../../libdeepmd_c/lib -I ../../libdeepmd_c/include -Wl,--no-as-needed -ldeepmd_c -Wl,-rpath=../../libdeepmd_c/lib -o convert_model |
| 26 | + gcc infer_water.c -std=c99 -L ../../libdeepmd_c/lib -I ../../libdeepmd_c/include -Wl,--no-as-needed -ldeepmd_c -Wl,-rpath=../../libdeepmd_c/lib -o infer_water |
| 27 | + ./convert_model |
| 28 | + ./infer_water |
| 29 | + cd /root/deepmd-kit |
| 30 | + if [ "${CHECK_PYTORCH_RUNTIME}" = "1" ]; then |
| 31 | + "${PYTHON_BIN}" -m pip install uv |
| 32 | + source/install/uv_with_retry.sh pip install --python "${PYTHON_BIN}" --group "${PYTORCH_DEPENDENCY_GROUP}" --torch-backend "${PYTORCH_TORCH_BACKEND}" |
| 33 | + TORCH_RUNTIME_LIB_DIRS=$("${PYTHON_BIN}" - <<'"'"'PY'"'"' |
| 34 | +import pathlib |
| 35 | +import site |
| 36 | +import sys |
| 37 | +
|
| 38 | +import torch |
| 39 | +
|
| 40 | +dirs = [pathlib.Path(torch.__file__).resolve().parent / "lib"] |
| 41 | +roots = [] |
| 42 | +try: |
| 43 | + roots.extend(site.getsitepackages()) |
| 44 | +except AttributeError: |
| 45 | + pass |
| 46 | +try: |
| 47 | + roots.append(site.getusersitepackages()) |
| 48 | +except AttributeError: |
| 49 | + pass |
| 50 | +roots.extend(sys.path) |
| 51 | +for root in roots: |
| 52 | + if not root: |
| 53 | + continue |
| 54 | + nvidia_dir = pathlib.Path(root) / "nvidia" |
| 55 | + if nvidia_dir.is_dir(): |
| 56 | + dirs.extend(sorted(path for path in nvidia_dir.glob("*/lib") if path.is_dir())) |
| 57 | +seen = set() |
| 58 | +unique_dirs = [] |
| 59 | +for path in dirs: |
| 60 | + path = path.resolve() |
| 61 | + if path in seen: |
| 62 | + continue |
| 63 | + seen.add(path) |
| 64 | + unique_dirs.append(str(path)) |
| 65 | +print(":".join(unique_dirs)) |
| 66 | +PY |
| 67 | +) |
| 68 | + RUNTIME_LIBRARY_PATH="${PWD}/libdeepmd_c/lib:${TORCH_RUNTIME_LIB_DIRS}" |
| 69 | + if [ -n "${LD_LIBRARY_PATH:-}" ]; then |
| 70 | + RUNTIME_LIBRARY_PATH="${RUNTIME_LIBRARY_PATH}:${LD_LIBRARY_PATH}" |
| 71 | + fi |
| 72 | + LD_LIBRARY_PATH="${RUNTIME_LIBRARY_PATH}" ldd libdeepmd_c/lib/libdeepmd_backend_pt.so > /tmp/deepmd_pt_ldd.txt |
| 73 | + LD_LIBRARY_PATH="${RUNTIME_LIBRARY_PATH}" ldd libdeepmd_c/lib/libdeepmd_backend_ptexpt.so >> /tmp/deepmd_pt_ldd.txt |
| 74 | + LD_LIBRARY_PATH="${RUNTIME_LIBRARY_PATH}" ldd libdeepmd_c/lib/libdeepmd_op_pt.so >> /tmp/deepmd_pt_ldd.txt |
| 75 | + cat /tmp/deepmd_pt_ldd.txt |
| 76 | + if grep -q "not found" /tmp/deepmd_pt_ldd.txt; then |
| 77 | + exit 1 |
| 78 | + fi |
| 79 | + LD_LIBRARY_PATH="${RUNTIME_LIBRARY_PATH}" "${PYTHON_BIN}" - <<'"'"'PY'"'"' |
| 80 | +import ctypes |
| 81 | +import os |
| 82 | +import pathlib |
| 83 | +
|
| 84 | +import torch # noqa: F401 |
| 85 | +
|
| 86 | +libdir = pathlib.Path("libdeepmd_c/lib").resolve() |
| 87 | +for name in [ |
| 88 | + "libdeepmd_op_pt.so", |
| 89 | + "libdeepmd_backend_pt.so", |
| 90 | + "libdeepmd_backend_ptexpt.so", |
| 91 | +]: |
| 92 | + ctypes.CDLL(str(libdir / name), mode=os.RTLD_NOW | os.RTLD_LOCAL) |
| 93 | +PY |
| 94 | + fi' |
0 commit comments