Spack 是一款专为 HPC/超算、Linux/macOS/Windows 设计的 开源、跨平台、多版本/多编译器/多配置 软件包管理器,核心解决科学计算软件“版本冲突、依赖地狱、编译复杂、环境不可复现”四大痛点。

Install Software Using Spack
spack-tutorial
SPACK Package Manager


一、核心定位与优势

  • 全称:Supercomputer Package Manager
  • 开发:美国 Lawrence Livermore National Lab (LLNL) 主导
  • 核心能力
    • 多版本共存:同一软件 N 个版本/编译器/配置互不干扰
    • 自动依赖解析:一键安装,自动处理全链路依赖
    • 高度定制:指定版本、编译器、编译选项、CPU 架构、依赖版本
    • 环境管理spack env 实现可复现、可分发的软件环境
    • 模块生成:自动生成 Environment Modules / Lmod 文件
    • 超大规模:支持千万核超算、跨节点集群、异构(CPU/GPU)
    • 包库丰富:内置 8000+ 包(HPC 全栈:MPI、数学库、仿真、AI 等)

二、安装(极简)

1. 克隆(无需 root)

git clone https://github.com/spack/spack.git ~/spack

2. 激活(每次登录执行)

# bash/zsh
. ~/spack/share/spack/setup-env.sh

# csh/tcsh
source ~/spack/share/spack/setup-env.csh

3. 验证

spack --version

三、核心 Spec 语法(必掌握)

spack install <spec>spec 精准定义安装需求:

符号 作用 示例
@ 指定版本 hdf5@1.14.3
% 指定编译器 hdf5 %gcc@12.2
+/- 开启/关闭特性 hdf5 +hl -szip
name=val 编译参数 hdf5 api=v110
cflags/cxxflags/fflags 编译优化 hdf5 cflags="-O3 -march=native"
target= CPU 架构 hdf5 target=icelake
^ 指定依赖版本 hdf5 ^zlib@1.2.13

复合示例

spack install hpctoolkit@2025.01 %gcc@12.2 +cuda cuda_arch=80 ^python@3.11

四、常用命令(HPC 必备)

1. 查询

spack list                # 所有可安装包
spack list hdf            # 模糊搜索
spack info hdf5           # 包详情(版本、依赖、变体)
spack versions hdf5       # 可用版本
spack compilers           # 已识别编译器
spack find                # 已安装包(含哈希)
spack find --deps hdf5     # 依赖树
spack spec hdf5 +hl       # 预演安装(不安装)

2. 安装(核心)

# 最简
spack install hdf5

# 指定版本+编译器
spack install hdf5@1.14.3 %gcc@12.2

# 开启特性+优化
spack install hdf5 +hl +threadsafe cflags="-O3 -march=native"

# GPU 软件(CUDA)
spack install petsc +cuda cuda_arch=70,80,90

# MPI 并行
spack install openmpi +cuda +pmi

# 安装后加载
spack load hdf5

3. 卸载/清理

spack uninstall hdf5       # 卸载
spack clean --all          # 清理缓存(源码/构建)
spack gc                   # 清理无用依赖

4. 环境管理(可复现)

# 1. 创建环境
spack env create my-hpc-env

# 2. 激活(-p 显示环境名)
spack env activate -p my-hpc-env

# 3. 添加包(不立即安装)
spack add hpctoolkit +cuda
spack add petsc +mpi +cuda
spack add openmpi

# 4. 解析依赖+安装
spack concretize
spack install

# 5. 退出环境
spack env deactivate

# 6. 环境备份(spack.yaml + spack.lock)
spack env activate my-hpc-env
spack env create --from-file spack.yaml new-env

5. 模块(Modules)

spack module lmod refresh   # 生成 Lmod
module avail                # 查看
module load hdf5/1.14.3-gcc-12.2

五、HPC 常用工作流(示例)

1. 安装 OpenMPI + CUDA

spack install openmpi@4.1.5 %gcc@12.2 +cuda +pmi cuda_arch=80

2. 安装 PETSc(全功能)

spack install petsc@3.20 %gcc@12.2 +mpi +cuda +metis +mumps +superlu-dist

3. 安装性能分析工具

spack install hpctoolkit +cuda
spack install tau +cuda +mpi
spack install scorep +cuda +mpi

4. 可复现环境(团队共享)

# 本地
spack env create cfd-workflow
spack env activate cfd-workflow
spack add openmpi petsc hpctoolkit
spack concretize
spack install
spack env dump > spack.yaml

# 同事
spack env create cfd-workflow --from-file spack.yaml
spack env activate cfd-workflow
spack install

六、关键特性(HPC 价值)

  1. 非破坏性安装:新版本不覆盖旧版本,多配置共存
  2. 哈希唯一标识:每个安装有唯一哈希,避免版本混淆
  3. 跨平台一致:笔记本→集群→超算同命令
  4. 二进制缓存spack buildcache 预编译,加速部署
  5. 外部包spack external find 复用系统库(如 CUDA、MPI)
  6. 自定义包spack create 轻松写 package.py(Python)

七、与 conda/pip/apt 对比

特性 Spack Conda/pip apt/yum
多版本/编译器 ✅ 极强 ❌ 弱 ❌ 不支持
从源码编译优化 ✅ 原生 ⚠️ 有限 ✅ 预编译
HPC 库覆盖 ✅ 8000+ ⚠️ 部分 ❌ 极少
超算/集群 ✅ 原生支持 ❌ 不适用 ❌ 不适用
可复现环境 spack.yaml environment.yml

八、一句话总结

Spack = HPC 领域的 conda + 源码编译 + 多版本管理 + 环境可复现
是超算中心、科研团队、个人开发者管理复杂科学计算软件栈的事实标准工具

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐