SAI 服务器 DeepMD-kit 安装配置指南#
本页记录在 SAI 服务器环境中,将 dpeva-dpa4 Conda 环境里的
deepmd-kit 与本地 test/deepmd-kit 源码检出差同步的构建、安装和验证方法
(test/ 为本地参考检出,不在本仓库内)。
适用场景:
需要从本地
test/deepmd-kit源码检出差安装 DeepMD-kit,而不是使用 PyPI/Conda 预构建版本。需要保留
dpeva-dpa4环境中的torch 2.11.0+cu126。需要 CUDA 12.6.3 和 PyTorch 后端,并在 V100 GPU 上实际验证
dp embed输出descriptor、atomic_feature、structural_feature。
1. 方法来源#
本安装方法来自本仓库内的可审计来源,而不是外部临时命令:
test/deepmd-kit/pyproject.toml:确认 DeepMD-kit 使用scikit-build-core/CMake 构建,并支持通过环境变量控制后端。test/deepmd-kit/CMakeLists.txt与构建日志:确认 CUDA toolkit、Torch 库和 PyTorch 后端由 CMake 探测。test/deepmd-kit/doc/inference/embedding.md:确认dp embed的 CLI 用法和 HDF5 输出数据集。test/deepmd-kit/source/tests/pt/model/test_embedding.py:提供可运行的 SeZM/DPA4 embedding 测试模型构造方式。SAI 平台规则:登录节点只做构建、提交和轻量检查;GPU 可用性必须通过 Slurm 分配计算节点验证。
2. 当前已验证基线#
记录日期:2026-07-01。
项目 |
已验证值 |
|---|---|
Conda 环境 |
|
DeepMD-kit 源码 |
本地 |
源码提交 |
|
源码 describe |
|
安装版本 |
|
CUDA toolkit |
|
NVCC |
|
Torch |
|
Torch CUDA |
|
GPU 架构 |
V100 / |
SeZM/DPA4 邻居表依赖 |
|
3. 前置检查#
从项目根目录执行:
cd "$(git rev-parse --show-toplevel)"
source scripts/env/dpeva-dpa4.env
python -W ignore -c 'import torch; print(torch.__version__); print(torch.version.cuda)'
git -C test/deepmd-kit log -1 --pretty='commit %H%nsubject %s'
git -C test/deepmd-kit describe --tags --always --dirty
nvcc --version
预期要点:
torch为2.11.0+cu126。torch.version.cuda为12.6。nvcc来自/opt/devtools/nvidia/cuda-12.6.3/bin/nvcc。test/deepmd-kit工作树处于预期提交;若带-dirty,先确认本地改动是否 应进入安装版本。
4. 构建 wheel#
使用 wheel 构建而不是直接 editable 安装,便于保留构建产物和日志。关键点是
--no-build-isolation --no-deps:构建使用当前 dpeva-dpa4 环境里的 Torch,
避免 pip 重新解析或替换核心 CUDA/Torch 依赖。
cd "$(git rev-parse --show-toplevel)"
source scripts/env/dpeva-dpa4.env
STAMP=$(date +%Y%m%d-%H%M%S)
LOGDIR="$PWD/logs/deepmd-dpeva-dpa4-$STAMP"
mkdir -p "$LOGDIR/wheelhouse"
git -C test/deepmd-kit log -1 --pretty='commit %H%nsubject %s' | tee "$LOGDIR/build.log"
git -C test/deepmd-kit describe --tags --always --dirty | tee -a "$LOGDIR/build.log"
python -W ignore -c 'import torch; print("torch", torch.__version__); print("torch_cuda", torch.version.cuda)' | tee -a "$LOGDIR/build.log"
nvcc --version | sed -n '1,6p' | tee -a "$LOGDIR/build.log"
export MAX_JOBS=4
export CMAKE_BUILD_PARALLEL_LEVEL=4
export CMAKE_ARGS="-DCMAKE_CUDA_ARCHITECTURES=70"
export DP_VARIANT=cuda
export DP_ENABLE_PYTORCH=1
export DP_ENABLE_TENSORFLOW=0
export DP_ENABLE_PADDLE=0
export DP_ENABLE_JAX=0
python -m pip wheel \
--no-build-isolation \
--no-deps \
--verbose \
--wheel-dir "$LOGDIR/wheelhouse" \
test/deepmd-kit 2>&1 | tee -a "$LOGDIR/build.log"
构建日志中应出现类似信息:
Found CUDAToolkit: /opt/devtools/nvidia/cuda-12.6.3
Found CUDA in /opt/devtools/nvidia/cuda-12.6.3/bin, build nv GPU support
PyTorch: CUDA detected: 12.6
PyTorch: CUDA nvcc is: /opt/devtools/nvidia/cuda-12.6.3/bin/nvcc
Found Torch: .../.conda/envs/dpeva-dpa4/.../torch/lib/libtorch.so
Added CUDA NVCC flags for: -gencode;arch=compute_70,code=sm_70
Enabled backends:
- PyTorch
Created deepmd_kit-...whl
5. 安装 wheel#
cd "$(git rev-parse --show-toplevel)"
source scripts/env/dpeva-dpa4.env
LOGDIR=/path/to/logs/deepmd-dpeva-dpa4-YYYYmmdd-HHMMSS
python -m pip install --no-deps --force-reinstall \
"$LOGDIR"/wheelhouse/deepmd_kit-*.whl 2>&1 | tee "$LOGDIR/install.log"
安装后核对:
python -W ignore - <<'PY'
import importlib.metadata as md
import deepmd
import torch
print("deepmd-kit", md.version("deepmd-kit"))
print("deepmd.__version__", getattr(deepmd, "__version__", "NO_ATTR"))
print("deepmd.__file__", deepmd.__file__)
print("torch", torch.__version__)
print("torch_cuda", torch.version.cuda)
PY
dp --version
dp --pt -h | grep -E 'embed|eval-desc'
dp --pt embed -h
dp --pt -h 必须列出 embed 子命令。
6. 安装 SeZM/DPA4 embedding 运行依赖#
dp embed 对 SeZM/DPA4 模型会走内建邻居表路径。当前 DeepMD-kit 源码要求
nvalchemiops 或 vesin 至少一个可导入;本环境采用 vesin[torch]。
先 dry-run,确认不会替换 Torch:
source scripts/env/dpeva-dpa4.env
python -m pip install --dry-run 'vesin[torch]'
确认只会新增 vesin 与 vesin-torch 后安装:
python -m pip install 'vesin[torch]'
核对:
python - <<'PY'
for name in ("vesin", "vesin.torch", "nvalchemiops"):
try:
mod = __import__(name)
print(name, "OK", getattr(mod, "__version__", "NO_VERSION"))
except Exception as exc:
print(name, "MISSING", type(exc).__name__, exc)
PY
nvalchemiops 可缺失;只要 vesin 和 vesin.torch 可导入,SeZM/DPA4
embedding 的邻居表构建即可运行。
7. CPU 侧 dp embed smoke test#
建议用 test/deepmd-kit/source/tests/pt/model/test_embedding.py 中的小型 SeZM
配置生成临时 checkpoint,再用 DeePMD system 目录测试 CLI。测试产物可放在本次
LOGDIR/embed-fixture/。
最小验收标准:
dp --pt embed退出码为 0。HDF5 中有
descriptor、atomic_feature、structural_feature。三个 dataset 的 dtype 与
--dtype fp32一致,且数值全部 finite。
示例 HDF5 读回检查:
python - <<'PY'
import h5py
import numpy as np
path = "embedding.hdf5"
with h5py.File(path, "r") as f:
keys = []
def walk(name, obj):
if hasattr(obj, "shape"):
arr = obj[()]
keys.append(name)
print(name, obj.shape, obj.dtype, bool(np.isfinite(arr).all()))
f.visititems(walk)
present = {k.split("/")[-1] for k in keys}
missing = {"descriptor", "atomic_feature", "structural_feature"} - present
if missing:
raise SystemExit(f"missing datasets: {sorted(missing)}")
PY
8. GPU 验证#
登录节点没有可用 NVIDIA driver,不能作为 GPU 可用性证据。必须通过 Slurm 分配 GPU 计算节点验证。
单卡快速验证优先使用支持 1 GPU 的分区/QOS,例如:
srun \
--partition=4V100 \
--qos=rush-1o2gpu \
--nodes=1 \
--ntasks=1 \
--gpus-per-node=1 \
--time=00:10:00 \
bash -lc 'source scripts/env/dpeva-dpa4.env && python - <<PY
import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))
PY'
若单卡资源排队过久,8V100V0 可能要求每节点 GPU 数量按 4 的倍数申请;此时
可用 --gpus-per-node=4 跑同一单进程验证。不要在同一时间保留多个等价验证作业;
切换分区前先取消旧的等待作业。
完整 GPU 验证需要同时检查版本、CUDA 可见性和 dp embed 输出:
srun --partition=8V100V0 --nodes=1 --ntasks=1 --gpus-per-node=4 --time=00:10:00 bash -lc '
set -euo pipefail
cd "$(git rev-parse --show-toplevel)"
LOGDIR=/path/to/logs/deepmd-dpeva-dpa4-YYYYmmdd-HHMMSS
source scripts/env/dpeva-dpa4.env
export OMP_NUM_THREADS=1
hostname
nvidia-smi -L
python -W ignore - <<PY
import importlib.metadata as md
import deepmd
import torch
import vesin
import vesin.torch
print("deepmd-kit", md.version("deepmd-kit"))
print("deepmd_version", getattr(deepmd, "__version__", "NO_ATTR"))
print("torch", torch.__version__)
print("torch_cuda", torch.version.cuda)
print("vesin", getattr(vesin, "__version__", "NO_VERSION"))
print("vesin_torch", getattr(vesin.torch, "__version__", "NO_VERSION"))
print("cuda_available", torch.cuda.is_available())
print("cuda_device_count", torch.cuda.device_count())
if not torch.cuda.is_available():
raise SystemExit("CUDA is not available")
print("cuda_device_name", torch.cuda.get_device_name(0))
PY
out="${SLURM_TMPDIR:-/tmp}/dpeva-dpa4-sezm-embed-${SLURM_JOB_ID}.hdf5"
export out
rm -f "$out"
dp --pt embed \
-m "$LOGDIR/embed-fixture/sezm_embed.pt" \
-s "$LOGDIR/embed-fixture/system" \
-o "$out" \
--dtype fp32
python - <<PY
import os
import h5py
import numpy as np
out = os.environ["out"]
print("hdf5_path", out)
with h5py.File(out, "r") as f:
keys = []
def walk(name, obj):
if hasattr(obj, "shape"):
arr = obj[()]
keys.append(name)
print("dataset", name, obj.shape, obj.dtype, bool(np.isfinite(arr).all()))
f.visititems(walk)
present = {k.split("/")[-1] for k in keys}
missing = {"descriptor", "atomic_feature", "structural_feature"} - present
if missing:
raise SystemExit("missing datasets: " + ", ".join(sorted(missing)))
PY
'
任务完成后用 Slurm 再确认退出状态:
sacct -j <jobid> --format=JobID,State,ExitCode,Elapsed,NodeList -P
9. 常见问题#
9.1 dp embed 报 DPA4/SeZM model supports ... but got ener#
该错误说明测试模型不是当前 dp embed SeZM/DPA4 路径支持的 fitting type。不要修改
DeepMD-kit 代码绕过错误;换用同版本测试中构造的 SeZM/DPA4 checkpoint,或使用
真实的 DPA4/SeZM 训练 checkpoint。
9.2 SeZM neighbor-list construction requires either 'nvalchemiops' or 'vesin'#
安装 vesin[torch]。安装前先 --dry-run,确认不会替换当前 torch。
9.3 QOSMinGRES#
资源形态不符合 SAI QOS/分区策略。1 GPU 作业使用支持单卡的 QOS,例如
4V100 + rush-1o2gpu;如果在 8V100V0 上验证,通常按每节点 4 GPU 申请。
9.4 登录节点 nvidia-smi 失败#
登录节点没有 NVIDIA driver 或不可访问 GPU 是正常现象。GPU 可用性结论必须来自 Slurm 分配的计算节点。
10. 维护原则#
每次升级
test/deepmd-kit后,都重新记录源码提交、wheel 版本、Torch/CUDA 版本 和 GPU smoke test job id。不要把
pip install deepmd-kit[...]作为本环境升级方式;本项目环境要求以test/deepmd-kit源码和当前dpeva-dpa4Torch/CUDA 栈为准。不要依赖交互式 shell 的隐式状态;Slurm 脚本中通过
source scripts/env/dpeva-dpa4.env显式加载环境。构建日志、wheel、安装日志和验证 fixture 应保留在
logs/deepmd-dpeva-dpa4-*下, 便于复盘。