在过去的两年里,DeePMD-kit的安装流程取得了显著的进展。本文旨在分享这些最新进展,并为其他科学计算软件的安装提供参考。首先,我们优化了pip安装LAMMPS接口及提供更多平台的轮子。
依托Python社区打包工程的发展,如PEP-517、PEP-518、PEP-621等规范的通过,以及setuptools、pip、wheel、build、auditwheel等工具的定位,DeePMD-kit在两年前已经采用scikit-build实现pip安装,并使用cibuildwheel构建轮子,并上传至pypi。然而,此前使用pip install deepmd-kit并非最佳实践,原因在于存在一些问题。
为了提升安装的稳定性,DeePMD-kit的安装模块进行了全面重构。依据PEP-517规范,构建自定义后端,确保在检测到未安装TensorFlow时,pip自动添加TensorFlow CPU版本作为构建依赖。同时,利用setuptools新特性,将setup.py中的元数据迁移到pyproject.toml。
考虑到TensorFlow的C++库版本可能改变ABI,之前的轮子并未固定TensorFlow版本,导致安装后可能发现不兼容。在近期更新中,我们读取TensorFlow版本号,以此固定TensorFlow版本,确保与构建所用的TensorFlow版本一致。此外,我们新增了Linux aarch64、macOS x86-64和Windows x86-64平台的轮子,并修复了其他平台的bug。同时,构建CUDA 11.8版本的GPU支持,当GPU不可用时回退至CPU版本。值得一提的是,由于CUDA 11改进了兼容性,构建的包在CUDA 11.2版本下同样可用。此外,我们对每个平台只构建一个轮子,避免对每个Python版本进行构建,因为DeePMD-kit仅链接TensorFlow,不会影响二进制库。
进一步,我们构建了LAMMPS的pypi轮子,作为DeePMD-kit的可选依赖,并通过entry points提供了CLI和plugin的入口。在加载plugin时,自动将DeePMD-kit的plugin加载到LD_LIBRARY_PATH等环境变量中。同时,_pywrap_tensorflow_internal.so文件暴露了C++接口,因此我们构建了C++库和LAMMPS plugin,使得LAMMPS支持plugin模式和从环境变量读取plugin列表。
最新版本2.2.0b中的pip安装命令已全面更新,Linux轮子需要GLIBC 2.28或以上版本,因为TensorFlow已切换至_GLIBCXX_USE_CXX11_ABI=1。然而,当前的manylinux2014镜像(如CentOS 7)的编译器不支持_GLIBCXX_USE_CXX11_ABI=1,需要采用其他方法解决。在macOS方面,GitHub Actions计划于今年Q3提供Apple M1机器,macOS arm64的轮子届时将可以构建。
在conda安装方面,libdeepmd和LAMMPS成功解耦,不再存在依赖关系。然而,当两者同时安装并在conda环境中激活时,LAMMPS plugin的环境变量加载,LAMMPS也能加载DeePMD-kit的plugin。conda-forge社区已经全面支持macOS x86-64和arm64平台,并加快了TensorFlow的构建速度,支持最新版本的macOS x86-64和arm64的Python库和C++库。LAMMPS也支持plugin包,并已添加macOS arm64支持。因此,conda-forge的DeePMD-kit与LAMMPS解耦,全面支持macOS平台。
考虑到C++接口在不同编译环境下的ABI差异,DeePMD-kit推出了C接口,不包含任何依赖,并提供一个C++实现的头文件,以便与原来的C++接口实现无缝迁移。通过GitHub Actions打包和分发Linux环境下、支持CUDA 11的libdeepmd_c.tar.gz,用户可以直接下载并解压后,与AMBER程序进行集成,大大节省了安装时间。
总之,DeePMD-kit在安装流程上的优化和新功能的引入,不仅提升了软件的稳定性和兼容性,还为用户提供了更简便的安装体验。这些改进不仅适用于DeePMD-kit自身,也为其他科学计算软件的安装提供了有益的参考。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。