这篇整理 Spack 的安装、升级、权限管理和常用 HPC 软件安装方法。适合在共享 NFS 目录中统一管理集群软件栈。
安装 Spack#
git clone https://github.com/spack/spack.git
cd spack
git checkout releases/v0.16
不建议直接使用默认开发分支。生产环境更适合固定到某个 release。
一般安装在共享目录,例如:
/opt/spack
/home/apps/spack
加载环境:
source /path/to/spack/share/spack/setup-env.sh
常用命令#
加载软件:
spack load name@version
spack load /hash
卸载当前 shell 中加载的软件:
spack unload name@version
spack unload /hash
spack unload
卸载已安装软件:
spack uninstall name@version
搜索软件:
spack find xxx
spack find --loaded
查看软件选项:
spack info xxx
查看依赖解析:
spack spec <spec_string>
安装:
spack install <spec_string>
spack install -j 32 <spec_string>
安装编译器后,让 Spack 重新发现:
spack compiler find --scope site
搜索系统已有依赖:
spack external find --scope site
升级 Spack#
git fetch
git reset --hard v0.x.y
升级后退出当前 shell,重新加载 Spack。
权限管理#
Spack 适合使用专门账户管理,避免不同管理员账户写入权限混乱。
sudo mkdir -p /home/spack_new
useradd spack_new -s /bin/zsh -d /home/spack_new
chown -R spack_new:spack_new <path-to-spack>
Spack 运行还依赖用户目录下的 ~/.spack,所以共享环境中应明确谁负责维护。
load 时补充头文件和库路径#
Spack 早期会自动设置部分头文件和库路径;后续版本移除了默认行为。如果希望 spack load 添加 C_INCLUDE_PATH、LD_LIBRARY_PATH 等,可以添加:
$SPACK_HOME/etc/spack/modules.yaml
内容:
modules:
prefix_inspections:
./include:
- C_INCLUDE_PATH
- CPLUS_INCLUDE_PATH
- INCLUDE
./lib:
- LIBRARY_PATH
- LD_LIBRARY_PATH
./lib64:
- LIBRARY_PATH
- LD_LIBRARY_PATH
CUDA#
安装:
spack install cuda@<version>%gcc@<version>
注意 CUDA 和 GCC 的兼容矩阵。版本不匹配时,nvcc 可能无法编译程序。
常见约束:
- CUDA 10.2.89 最高兼容到 GCC 8。
- CUDA 11.0 兼容到 GCC 9。
- CUDA 11.1 对 GCC 10/11 可能有限制。
CUDA 包主要是 binary,一个版本通常只需要安装一次。如果其他软件编译器版本不同,但确认运行兼容,可以用 hash 强制指定:
spack install <package> ^cuda/<hash>
UCX#
UCX 是 MPI 的重要依赖。系统自带 UCX 不一定带 CUDA 支持,HPC/GPU 场景通常需要手动安装。
查看参数:
spack spec ucx
spack info ucx
安装示例:
spack install ucx@1.14.1 +cuda+cma+dc+dm+gdrcopy+ib_hw_tm+mlx5_dv+rc+ud+rdmacm+verbs+thread_multiple
检查:
ucx_info -v
ucx_info -d | grep mlx
ucx_info -b
重点确认:
--with-cuda--with-gdrcopy--enable-mt- IB 设备是否被识别
OpenMPI#
为了使用 IB,OpenMPI 应使用 UCX 作为底层通信实现。
CUDA-aware MPI 示例:
spack install openmpi@<version> +cuda fabrics=ucx ^ucx/<hash> ^cuda/<hash>
非 CUDA-aware MPI:
spack install openmpi@<version> fabrics=ucx ^ucx/<hash>
如果需要 gdrcopy:
spack install openmpi@<version> +cuda fabrics=ucx ^ucx +cuda +gdrcopy
注意:
- OpenMPI 3 之后默认启用
thread_multiple,不要强行加老版本 flag。 - UCX 也要选择
+cuda版本。 gdrcopy内核模块和开发库需要在所有机器上安装。
检查 OpenMPI:
ompi_info --parsable | grep cuda
ompi_info --parsable | grep ucx
OSU 测试:
spack install osu-micro-benchmarks ^openmpi/<hash>
$(which mpirun) -host i1:1,i2:1 $(which osu_bw)
带宽应接近 IB 理论值。
Slurm 外部依赖#
如果系统已经安装 Slurm,可以加入 packages.yml:
packages:
slurm:
externals:
- spec: slurm@20-11-8
prefix: /usr
安装 OpenMPI 时添加:
spack install openmpi +pmi +legacylaunchers schedulers=slurm
Intel 系列#
传统 Intel 套件需要 License:
/opt/intel/licenses
常见安装:
spack install intel@<version>
spack install intel-mpi@<version>%intel@<version>
spack install intel-mkl@<version>%intel@<version>
spack install intel-parallel-studio@cluster.<version> +vtune +advisor
oneAPI:
spack install intel-oneapi-compilers@<version>
Singularity#
Spack 中的 Singularity 版本可能偏旧,集群上更推荐手动安装新版本,或者根据系统发行版使用 Apptainer。


