软件(环境)运维¶
配置“环境”通常指配置环境变量和其他系统参数,以便软件程序在运行时能够正确地找到所需的依赖项和资源。
环境管理的需求来自于以下几个方面:
-
编译器的 ABI 兼容性:实际项目中往往会尝试多种编译器比较性能。不同编译器产生的二进制文件 ABI 不一定兼容,应当为一个编译器产生的二进制文件链接同一个编译器产生的库文件。
Libraries built with one compiler need to be linked with applications with the same compiler version.
链接不同编译器的库文件,可能会导致运行时错误,甚至是内存泄漏等严重问题。
-
切换依赖:我们也会尝试一种依赖的不同实现,比如 MPI 可以采用 OpenMPI、MPICH、Intel MPI 等不同的实现。所选择的依赖实现不同,构建时可能就要采用不同选项,运行时也需要配置好对应的动态链接。
要对自己的环境做改动,一般需要手动修改 PATH
等环境变量,退出并重新登录 Shell,十分繁琐。这些工作都可以交给 Lmod 等环境管理器完成。此外,Spack 等包管理器也能够集成到 Lmod 中,提供一站式的环境管理服务。
此外我们还使用 Lmod 和以下包管理器:
- Spack:管理 HPC 相关软件包和依赖。
- Conda:管理 Python 相关软件包和依赖。
还有一些 Vendor Specific 的环境、驱动、软件包,均放置在 /opt 下。如果这些不能满足你的需求,可以在家目录下使用 Spack/Conda/源码编译等方式自行管理环境。