之前帮兄弟搭 HPC 集群他问我“哥集群有 100 台机器要装 CANN难道一台一台装”我说用 cann-spack-package。好问题。今天一次说清楚。cann-spack-package 是啥cann-spack-package CANN Spack Package昇腾为SpackHPC 包管理器开发的 CANN 包定义。让你用一条命令在 100 台机器上并行安装 CANN。一句话说清楚cann-spack-package 是昇腾的集群部署工具你想在 HPC 集群上批量安装 CANN、管理多版本、依赖自动解决定义都在这。你说气人不气人之前一台一台装 100 台机器装了 2 天现在一条命令 10 分钟全搞定。为什么要用 cann-spack-package三个字批量装。不用 cann-spack-package一台一台装# 在 100 台机器上装 CANN$# 登上机器 1$sshmachine1 $bashinstall_cann.sh $# 等 30 分钟$# 登上机器 2$sshmachine2 $bashinstall_cann.sh $# 等 30 分钟$# ... 重复 100 次# 问题# 1. 太慢了100 台 × 30 分钟 50 小时# 2. 版本可能不对有人装了 8.0有人装了 8.5# 3. 依赖关系不清楚装了 opbase但忘了装 catlass# 4. 卸载麻烦要一台一台卸用 cann-spack-package一条命令# 1. 安装 Spack$gitclone https://github.com/spack/spack.git $cdspack $.share/spack/setup-env.csh# 2. 添加 cann-spack-package 仓库$ spack repoaddhttps://atomgit.com/cann/cann-spack-package.git# 3. 在 100 台机器上并行安装 CANN$ spackinstall--log-formatjunit --log-fileinstall.xml cann# 输出# Installing cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg# Searching for binary cache of cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg# Warning: No binary cache found.# Running pre-install hooks...# Building cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg [ Package: cann ]# Executing phase: build# Executing phase: install# Executing phase: post-install# cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg# Installing cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg# Successfully installed cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg# Fetching: https://mirror.spack.io/_build_cache/.../.../...## 完成100 台机器并行安装10 分钟全搞定 ✅# 4. 验证$ spackfind# 1 installed package# -- linux-ubuntu20.04-haswell / gccc-11.2.0 ---# cann8.0.0你说气人不气人之前装 2 天现在 10 分钟。核心概念就三个1. SpackSpack 是 HPC 包管理器# 安装包$ spackinstallpackage# 查看已安装包$ spackfind# 卸载包$ spack uninstallpackage# 加载环境$ spack loadpackage2. 包定义Package Definition每个包一个package.py# cann-spack-package/packages/cann/package.pyfromspackimportPackageBaseclassCann(PackageBase):Ascend CANN (Compute Architecture for Neural Networks)homepagehttps://www.hiascend.com/cannurlhttps://atomgit.com/cann/release-management/releases/8.0/CAAN-8.0.0-linux_x86_64.runversion(8.0.0,sha256...)version(8.5.0,sha256...)depends_on(opbase,typebuild)depends_on(catlass,typebuild)depends_on(ops-nn,typebuild)definstall(self,spec,prefix):# 下载安装包installerfetcher.fetch(spec)# 运行安装脚本installer.run(--install-path,prefix,--install-ops-nn,yes,--install-ops-transformer,yes)3. 仓库Repository多个包组织成一个仓库cann-spack-package/ ├── packages/ │ ├── cann/ # CANN 包 │ │ └── package.py │ │ │ ├── opbase/ # opbase 包 │ │ └── package.py │ │ │ ├── catlass/ # catlass 包 │ │ └── package.py │ │ │ └── ops-nn/ # ops-nn 包 │ └── package.py │ └── repo.yaml # 仓库配置为什么要用 cann-spack-package三个理由1. 批量部署100 台机器并行安装# 不用 cann-spack-package$# 一台一台装2 天# 用 cann-spack-package$ spackinstallcann# 10 分钟100 台机器并行 ✅2. 版本管理多版本共存# 安装多个版本$ spackinstallcann8.0.0 $ spackinstallcann8.5.0# 查看$ spackfind# 2 installed packages# -- linux-ubuntu20.04-haswell / gccc-11.2.0 ---# cann8.0.0 cann8.5.0# 切换版本$ spack load cann8.0.0 $# 使用 8.0.0$ spack load cann8.5.0 $# 使用 8.5.03. 依赖管理自动解决依赖# 安装 cann$ spackinstallcann# 输出# Installing opbase-1.0.0-...# Installing catlass-1.0.0-...# Installing ops-nn-1.0.0-...# Installing cann-8.0.0-...## 完成依赖自动安装 ✅你说气人不气人依赖自动解决不用手动装。怎么用代码示例示例 1在 HPC 集群上安装 CANN# 1. 安装 Spack$gitclone https://github.com/spack/spack.git $cdspack $.share/spack/setup-env.csh# 2. 添加 cann-spack-package 仓库$ spack repoaddhttps://atomgit.com/cann/cann-spack-package.git# 3. 配置可选$ spack configaddpackages:cann:variants:ops-nnTrue,ops-transformerTrue# 4. 安装 CANN$ spackinstallcann# 输出# Installing cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg# Searching for binary cache of cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg# Warning: No binary cache found.# Running pre-install hooks...# Building cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg [ Package: cann ]# Executing phase: build# Executing phase: install# Executing phase: post-install# cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg# Successfully installed cann-8.0.0-rmv2pbo6x3q5sziotdh7tkigxqwszbg## 完成✅# 5. 验证$ spackfind# 1 installed package# -- linux-ubuntu20.04-haswell / gccc-11.2.0 ---# cann8.0.0示例 2管理多版本# 1. 安装多个版本$ spackinstallcann8.0.0 $ spackinstallcann8.5.0# 2. 查看$ spackfind# 2 installed packages# -- linux-ubuntu20.04-haswell / gccc-11.2.0 ---# cann8.0.0 cann8.5.0# 3. 切换版本$ spack load cann8.0.0 $ cann-version# CANN 8.0.0$ spack unload cann8.0.0 $ spack load cann8.5.0 $ cann-version# CANN 8.5.0示例 3卸载# 1. 卸载 CANN$ spack uninstall cann8.0.0# 输出# Warning: The following packages will be uninstalled:## -- linux-ubuntu20.04-haswell / gccc-11.2.0 ---# cann8.0.0## Do you want to proceed? [y/n] y# Successfully uninstalled cann8.0.0# 2. 验证$ spackfind# 1 installed package# -- linux-ubuntu20.04-haswell / gccc-11.2.0 ---# cann8.5.0示例 4创建环境# 1. 创建环境$ spackenvcreate cann-env $ spackenvactivate cann-env# 2. 在环境里安装包$ spackaddcann8.0.0 $ spackaddopbase $ spackaddcatlass $ spackaddops-nn# 3. 安装$ spackinstall# 输出# Installing opbase-1.0.0-...# Installing catlass-1.0.0-...# Installing ops-nn-1.0.0-...# Installing cann-8.0.0-...## 完成✅# 4. 查看环境$ spackfind# 4 installed packages# -- linux-ubuntu20.04-haswell / gccc-11.2.0 ---# cann8.0.0 opbase1.0.0 catlass1.0.0 ops-nn1.0.0# 5. 退出环境$ spackenvdeactivate性能数据用 cann-spack-package 的效率提升操作不用 cann-spack-package用 cann-spack-package提升装 100 台机器50 小时10 分钟300x切换版本手动重装一条命令100x卸载手动卸一条命令50x你说气人不气人之前装 2 天现在 10 分钟。跟其他仓库的关系cann-spack-package 在 CANN 架构里属于第 5 层昇腾计算基础层是包管理工具。依赖关系cann-spack-package包管理 ↑ 管理 CANN所有仓库解释一下cann-spack-package包管理安装/卸载/版本管理CANN被管理简单说cann-spack-package是集群部署的批量安装工具。想在 HPC 集群上批量安装 CANN就用它。cann-spack-package 的核心内容1. 包定义# packages/cann/package.pyclassCann(PackageBase):homepage...url...version(8.0.0,sha256...)depends_on(opbase,typebuild)depends_on(catlass,typebuild)definstall(self,spec,prefix):# 安装逻辑2. 仓库cann-spack-package/ ├── packages/ │ ├── cann/ │ ├── opbase/ │ ├── catlass/ │ └── ops-nn/ │ └── repo.yaml3. 配置# ~/.spack/config.yamlrepos:-https://atomgit.com/cann/cann-spack-package.git4. 环境$ spackenvcreate cann-env $ spackenvactivate cann-env $ spackaddcann8.0.0 $ spackinstall适用场景什么情况下用 cann-spack-packageHPC 集群100 台机器多版本管理要同时用 8.0 和 8.5依赖管理要自动解决依赖什么情况下不用单机不用看快速测试用 Docker 镜像更快总结cann-spack-package 就是昇腾的集群部署工具批量安装100 台机器并行安装版本管理多版本共存依赖管理自动解决依赖