# hpcrunner
**Repository Path**: openeuler/hpcrunner
## Basic Information
- **Project Name**: hpcrunner
- **Description**: openEuler High Performance Computing(HPC) Runner, provides universal portal for hpc users and developers.
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 49
- **Forks**: 80
- **Created**: 2022-03-17
- **Last Updated**: 2025-06-25
## Categories & Tags
**Categories**: containers
**Tags**: sig-HPC
## README
# HPCRunner : 贾维斯智能助手
## ***愿景:自动容器化助力极简部署,一站式调优HPC应用***

### 项目背景
HPC被喻为是IT行业“金字塔上的明珠”,其部署、编译、运行、性能采集分析的门槛非常高,不同的机器上部署HPC应用耗费大量精力,而且很多情况下需要同时部署ARM/X86两套环境进行验证,增加了很多的重复性工作,无法聚焦核心算法优化。

### 项目特色
- 支持ARM/X86,一键部署,采用业界权威依赖目录结构管理海量依赖,自动生成module file
- 根据HPC配置实现一键编译运行、一键CPU/GPU性能采集、一键Benchmark.
- 所有配置仅用一个文件记录,HPC应用部署到不同的机器仅需修改配置文件.
- 日志管理系统自动记录HPC应用部署过程中的所有信息.
- 软件本身无需编译开箱即用,仅依赖Python环境.
- HPC应用容器化-目前QE已经实现,参考container目录.
- (未来) 集成HPC领域常用性能调优手段、核心算法.
- (未来) 集群性能分析工具.
- (未来) 智能调优.
### 目录结构
| 目录/文件 | 说明 | 备注 |
| --------- | ---------------------------------- | -------- |
| benchmark | 矩阵运算、OpenMP、MPI、P2P性能测试 | |
| doc | 文档 | |
| downloads | 存放依赖库源码包/压缩包 | |
| examples | 性能小实验 | |
| package | 存放安装脚本和FAQ | |
| software | 依赖库二进制仓库(内置精度分析工具) | 自动生成 |
| src | 贾维斯源码 | |
| templates | 常用HPC应用的配置模板 | |
| test | 贾维斯测试用例 | |
| workloads | 常用HPC应用的算例合集 | |
| init.sh | 贾维斯初始化文件 | |
| jarvis | 贾维斯启动入口 | |
### 支持安装的依赖列表
| 软件名 | 软件信息 | 类别 |
| ------- | -------------- | --------- |
| antlr | 代码生成器,用于构建编译器和解释器 | 开发工具 |
| cairo | 2D图形库,支持多种输出设备和格式 | 图像处理 |
| fftw | 快速傅里叶变换库,支持多种算法和精度 | 数学库 |
| go | 编程语言,具有高效的垃圾回收和并发特性 | 开发工具 |
| htslib | 高通量测序数据处理库,支持多种常见格式的文件操作 | 数据库 |
| kfft | 快速傅里叶变换库鲲鹏版本 | 数学库 |
| libxml2 | 轻量级、可移植的XML解析库 | 开发工具 |
| nvhpc | NVIDIA HPC SDK,包含CUDA和Fortran编译器 | 开发工具 |
| osu | 基准测试套件,用于衡量系统性能 | 性能评估 |
| Porting | HPC应用迁移工具,支持将应用迁移到鲲鹏 | 应用迁移 |
| scotch | 科学计算软件包,包括图划分、矩阵操作等模块 | 科学计算 |
| vis5dplus | 五维数据可视化软件,支持多种数据格式和渲染方式 | 可视化 |
| arpack | 稀疏矩阵特征值计算库 | 数学库 |
| automake | GNU Autotools工具集的一部分,用于生成Makefile | 开发工具 |
| cmake | 用于管理C/C++软件构建和依赖关系的跨平台工具 | 开发工具 |
| freetype | TrueType字体渲染引擎 | 图像处理 |
| g2clib | 处理GRIB和GRIB2格式气象数据的库 | 数据库 |
| grads | 可视化气象数据的软件 | 可视化 |
| grib_api | 处理GRIB和BUFR格式气象数据的库 | 数据库 |
| Hyper-tuner | 高性能计算任务调优工具 | 性能优化 |
| hypre | 大规模稀疏线性系统求解器 | 数学库 |
| kgcc | 基于鲲鹏平台极致优化的GCC编译器 | 开发工具 |
| kml | 基于鲲鹏平台极致优化的数学库 | 数学库 |
| mesa | 开源3D图形库 | 图像处理 |
| metis | 图划分和重排列库 | 科学计算 |
| oneapi | Intel开发的工具包,支持各种体系结构的HPC应用 | 开发工具 |
| openblas | 线性代数库,实现BLAS接口 | 数学库 |
| parmetis | 划分大型稀疏图形的高性能库 | 科学计算 |
| petsc | 大规模科学计算软件包 | 科学计算 |
| precice | 进程耦合库,用于将不同物理学模型耦合起来 | 应用部署 |
| proj | 地理空间数据处理库 | 地理信息 |
| singularity | 容器化解决方案 | 应用部署 |
| slepc | 大规模特征值计算库 | 数学库 |
| wxWidgets | 跨平台窗口工具包 | 开发工具 |
| yaml-cpp | C++ YAML解析器和生成器 | 开发工具 |
| bedtools | 用于基因组特征分析的软件 | 数据库 |
| ctffind | 基于图像处理的电子显微镜聚焦软件 | 图像处理 |
| gatk | 基因组变异分析工具 | 序列分析 |
| gsl | GNU科学库,提供多种数学函数和数据结构 | 数学库 |
| ImageMagick | 处理图像的开源软件 | 图像处理 |
| lapack | 线性代数库,主要实现了BLAS接口 | 数学库 |
| mfem | 可扩展有限元方法库 | 数学库 |
| opencoarrays | 并行编程库 | 开发工具 |
| picard | 处理生物信息数据的Java库 | 序列分析 |
| python3 | Python编程语言的最新版本 | 开发工具 |
| spglib | 空间群处理库 | 科学计算 |
| zlib | 压缩库 | 工具库 |
| bisheng | 基于鲲鹏极致优化的毕晟编译器,基于LLVM体系 | 开发工具 |
| blas | 基本线性代数子程序 | 数学库 |
| curl | 数据传输工具 | 工具库 |
| cuda | NVIDIA的并行计算平台 | 并行编程 |
| gcc | GNU C和C++编译器 | 开发工具 |
| gdal | 用于地理空间数据转换和处理的开源库 | 地理信息 |
| hdf4 | HDF4数据文件格式处理库 | 科学计算 |
| hdf5 | HDF5数据文件格式处理库 | 科学计算 |
| ioapi | 常见大气化学模型输出和输入预处理库 | 数据库 |
| IPM | 描述HPC应用程序的性能测量的套件 | 性能优化 |
| libint | 提供高精度库令积分的C库 | 数学库 |
| libjpeg | JPEG图像压缩/解压缩库 | 图像处理 |
| mpich | 高性能消息传递接口库 | 并行编程 |
| mumps | 大规模稀疏线性系统求解器 | 数学库 |
| opencv | 开源计算机视觉和机器学习软件库 | 图像处理 |
| openjpeg | 用于压缩JPEG2000数据的开源库 | 图像处理 |
| pio | 访问并行IO的工具 | 数据库 |
| pixman | 图像处理和绘图库 | 图像处理 |
| R | 开源统计计算和绘图软件 | 开发工具 |
| spooles | 大规模稀疏线性代数Solver | 数学库 |
| szip | 压缩库 | 工具库 |
| boost | 十多年来一直是C++开发人员不可或缺的库 | 开发工具 |
| bowtie2 | 测序匹配工具 | 序列分析 |
| darshan | HPC应用程序性能分析工具,IO性能分析 | 性能优化 |
| eigen3 | C++模版实现的线性代数库 | 数学库 |
| glibc | GNU C语言库 | 工具库 |
| git | 分布式版本控制系统 | 开发工具 |
| hdf-eos2 | HDF-EOS2数据集处理库 | 科学计算 |
| hdf-eos5 | HDF-EOS5数据集处理库 | 科学计算 |
| jasper | 图像压缩/解压缩库 | 图像处理 |
| jellyfish | 海星组装工具 | 序列分析 |
| libpng | PNG图像格式处理库 | 图像处理 |
| libvori | 计算相邻格点之间夹角,适用于大尺寸网格 | 科学计算 |
| ncl | NCAR命令语言 | 开发工具 |
| ncview | 可视化海洋和气象数据 | 可视化 |
| openlb | 模拟流体现象的软件 | 科学计算 |
| openmpi | 高性能消息传递接口库 | 并行编程 |
| pkg-config | 安装GNU和Unix的编译器等工具所需的参数 | 工具库 |
| plumed | 对构象变化进行统计物理和化学分析的软件包 | 序列分析 |
| samtools | 处理NGS数据的磁盘和内存带索引文件的命令列表 | 数据库 |
| salmon | 快速准确地从RNA-seq读数估计转录本表达水平 | 数据库 |
| tau | HPC应用程序性能分析工具 | 性能优化 |
| udunits | 单位标准化的C程序中用于解释单位 | 开发工具 |
| bwa | 测序匹配工具 | 序列分析 |
| elpa | 提供多种实现和算法的Eigenvalue求解器 | 数学库 |
| gmp | 高精度计算库 | 数学库 |
| hmpi | 高性能消息传递接口库 | 并行编程 |
| kahip | 图划分库 | 图形计算 |
| libxc | C语言库,可用于从交换关联功能获得DFT近似 | 数学库 |
| netcdf | 处理气象和海洋科学等领域大型科学数据的C库 | 科学计算 |
| optimized-routines | BLAS,LAPACK和这些程序中相关库的优化版本 | 数学库 |
| pnetcdf | 访问并行I/O的工具库 | 数据库 |
| scalapack | 大规模稠密线性代数求解器 | 数学库 |
| valgrind | 内存调试和性能分析工具 | 开发工具 |
### 支持安装的HPC应用列表
| 应用名 | 应用信息 | 领域 |
| ---------------- | --------------------------------------------- | --------- |
| abinit | 第一个完全自主实现密度泛函理论的程序 | 科学计算 |
| agcm | 气象局自主研发的全球大气环流谱模式 | 大气科学 |
| amber | 分子动力学模拟软件 | 生命科学 |
| bowtie2 | 测序匹配工具 | 序列分析 |
| bwa | 分析二代测序数据 | 序列分析 |
| calculix | 有限元分析代码 | 工程 |
| duns | 模拟大气化学反应 | 大气科学 |
| elmer | 多物理场模拟系统 | 数学库 |
| grapes | 气象预报应用 | 大气科学 |
| gromacs | 生物分子动力学软件 | 生命科学 |
| imb | Intel MPI Benchmarks | 性能优化 |
| ImageMagick | 图像处理命令行工具 | 图像处理 |
| ioapi | I/O API支持emission和achimie模型 | 大气科学 |
| mg-cfd | 并行计算流体力学软件 | 科学计算 |
| mfem | 软件库,解决非线性问题和超大规模的并行问题 | 数学库 |
| nco | 并行化Unix / Linux命令行工具,可用于处理NetCDF文件 | 科学计算 |
| nwchem | 高性能计算量子化学模拟软件 | 化学 |
| ncview | 可视化海洋和气象数据 | 可视化 |
| openfoam | 开源的CFD软件 | 科学计算 |
| openjpeg | 图像格式处理库 | 图像处理 |
| openlb | 模拟流体现象的软件 | 科学计算 |
| opencv | 开源计算机视觉库 | 计算机视觉 |
| pytorch | Python语言驱动的深度学习框架 | 机器学习 |
| qe | 第一个基于密度泛函理论的自由软件 | 科学计算 |
| qmcpack | 基于Monte Carlo方法的量子物理仿真程序 | 物理学 |
| samtools | 处理NGS数据的磁盘和内存带索引文件的命令列表 | 数据库 |
| scotch | 图划分库 | 图形计算 |
| siesta | 第一性原理计算软件 | 物理学 |
| SU2 | 开源大规模CFD程序 | 科学计算 |
| trinity | RNA-seq transcriptome拼装器 | 序列分析 |
| udunits | C程序中用于解释单位的库 | 开发工具 |
| bcc-esm | 全球气候系统模型 | 大气科学 |
| bedtools | 常见的基因组工具 | 生命科学 |
| blast | 序列匹配软件 | 序列分析 |
| CMAQ | 使用化学传输模型的空气质量建模工具 | 大气科学 |
| CP2K | 高精度物理和化学模拟 | 科学计算 |
| CESM | 全球气候模型 | 大气科学 |
| ctffind | 粒子旋转平均程序,用于酶成像等领域 | 生命科学 |
| fvcom | 具有海洋生态动力学和水质应用的三维浪涌模型 | 海洋科学 |
| gatk | 基因组变异检测框架 | 生命科学 |
| grads | 可视化大气-土壤系统模型 | 数据可视化 |
| hpcg | 并行HPC线性求解器性能基准 | 性能优化 |
| hpl | HPL CheckRecd性能基准 | 性能优化 |
| htslib | 用于高通量序列数据处理的C库 | 生命科学 |
| jasper | JPEG-2000图像压缩库 | 图像处理 |
| lammps | 大型分子动力学软件 | 生命科学 |
| libjpeg | 压缩和解压缩JPEG影象 | 图像处理 |
| miniFE | 有限元求解器 | 工程 |
| mumps | 并行稠密和稀疏直接线性求解器 | 数学库 |
| namd | 大规模分子动力学仿真软件 | 生命科学 |
| ncl | NCAR Command Language,用于气象和大气科学 | 大气科学 |
| octave | 数值计算软件包 | 数学库 |
| octopus | 有限成键密度泛函理论程序 | 科学计算 |
| OpenCoarrays | 使用Fortran COARRAYS的并行编程模式 | 并行编程 |
| op2 | 一种快速GPU加速的稠密矩阵操作库 | 数学库 |
| picard | 工具套件,用于操纵大规模数据集 | 生命科学 |
| petsc | 并行线性代数工具 | 数学库 |
| rmaps-now | 短时预报应用 | 大气科学 |
| relion | 单粒子冷冻电镜图像处理软件 | 生命科学 |
| roms | 海洋环境建模工具 | 海洋科学 |
| SPECFEM3D_GLOBE | 全球弹性波地震模拟 | 地球物理 |
| slepc | 大型特征值问题求解器 | 数学库 |
| stream | 用于衡量计算机系统内存带宽的性能,为数据读写的不同操作提供独立的评估 | 性能优化 |
| wannier90 | 转换Bloch波函数为Wannier函数的程序 | 物理学 |
| wrf | 天气预报和研究模型 | 大气科学 |
| wxWidgets | 用于创建跨平台GUI应用程序的开发工具 | 开发工具 |
### 使用说明
1.下载包解压之后初始化
```
source ./init.sh
```
2.修改data.config或者套用现有模板,各配置项说明如下所示:
| 配置项 | 说明 | 示例 |
| :----------: | :----------------------------------------------------------- | :----------------------------------------------------------- |
| [SERVER] | 服务器节点列表,多节点时用于自动生成hostfile,每行一个节点 | 11.11.11.11 |
| [DOWNLOAD] | 每行一个软件的版本和下载链接,默认下载到downloads目录(可设置别名) | cp2k/8.2 https://xxx cp2k.8.2.tar.gz |
| [DEPENDENCY] | HPC应用依赖安装脚本 | ./jarvis -install gcc/9.3.1 com
module use ./software/modulefiles
module load gcc9 |
| [ENV] | HPC应用编译运行环境配置 | source env.sh |
| [APP] | HPC应用信息,包括应用名、构建路径、二进制路径、算例路径 | app_name = CP2K
build_dir = /home/cp2k-8.2/
binary_dir = /home/CP2K/cp2k-8.2/bin/
case_dir = /home/CP2K/cp2k-8.2/benchmarks/QS/ |
| [BUILD] | HPC应用构建脚本 | make -j 128 |
| [CLEAN] | HPC应用编译清理脚本 | make -j 128 clean |
| [RUN] | HPC应用运行配置,包括前置命令、应用命令和节点个数 | run = mpirun -np 2
binary = cp2k.psmp H2O-256.inp
nodes = 1 |
| [JOB] | HPC应用作业调度运行配置 | 多瑙作业调度脚本 |
| [BATCH] | HPC应用批量运行命令 | #!/bin/bash
nvidia-smi -pm 1
nvidia-smi -ac 1215,1410 |
| [LOOP] | HPC循环优化工具 | 将循环代码自动生成可进行性能分析和精度对比的程序 |
| [PERF] | 性能工具额外参数 | perf= -o
nsys=
ncu=--target-processes all --launch-skip 71434 --launch-count 1 |
3.贾维斯命令大全
| 功能 | 命令 | 示例/说明 |
| --- | --- | --- |
| 一键下载HPC应用 | ./jarvis -d | 应用将自动下载[DOWNLOAD]中地址到downloads目录 |
| 安装依赖 | ./jarvis -install [package/][name/version/other] [option] | ./jarvis -install bisheng/2.1.0 com |
| 一键卸载依赖 | ./jarvis -remove xxx | 支持模糊查询 ./jarvis -remove openblas/0.3.18 |
| 一键下载并安装所有依赖 | ./jarvis -dp |读取配置文件中的[DEPENDENCY]字段内容并按顺序执行 |
| 输出已安装的软件清单 | ./jarvis -l | 输出清单以相对路径列出 |
| 查询已安装的软件 | ./jarvis -f xxx | 查询openblas安装路径 ./jarvis -f openblas |
| 一键生成环境变量| ./jarvis -e | 读取配置文件中的[ENV]字段内容并生成env.sh脚本执行,执行-b/-r会自动生成 |
| 一键编译 | ./jarvis -b | 自动进入[APP]字段中的build_dir目录,读取配置文件中的[BUILD]字段内容并生成build.sh脚本执行 |
| 一键运行 | ./jarvis -r | 自动进入[APP]字段中的case_dir目录,读取配置文件中的[RUN]字段内容并生成run.sh脚本执行 |
| 一键CPU性能采集 | ./jarvis -p | 读取配置文件中的[PERF]字段内容的perf选项 |
| 一键GPU性能采集 | ./jarvis -gp | 需安装CUDA驱动 |
| 一键输出服务器信息 | ./jarvis -i | 输出CPU、网卡、OS、内存等信息|
| 一键服务器性能评测 | ./jarvis -bench all
./jarvis -bench mpi
./jarvis -bench omp
./jarvis -bench gemm | 包括MPI、OMP、P2P等评测 |
| 切换配置| ./jarvis -use XXX.config | 优先读取环境变量中的JARVIS_CONFIG,否则读取XXX.config,配置文件路径会保存到.meta文件中 |
| 根据当前配置生成Singularity容器定义文件 | ./jarvis -container docker-hub-address | ./jarvis -container openeuler:openeuler |
| 更新依赖库的路径 | ./jarvis -u | 如果移动了贾维斯的路径,将自动更新software/modulefiles的路径 |
| 生成Fortran循环优化代码 | ./jarvis -loop | |
| 帮助信息 | ./jarvis -h | |
安装依赖的option支持列表如下所示
| 选项值 | 解释 | 安装目录 |
| ----------- | ----------------------------- | ------------------------- |
| gcc | 使用当前gcc进行编译 | software/libs/gcc |
| gcc+mpi | 使用当前gcc+当前mpi进行编译 | software/libs/gcc/mpi |
| clang | 使用当前clang进行编译 | software/libs/clang |
| clang+mpi | 使用当前clang+当前mpi进行编译 | software/libs/clang/mpi |
| bisheng | 使用毕晟进行编译 | software/libs/bisheng |
| bisheng+mpi | 使用毕晟+当前mpi进行编译 | software/libs/bisheng/mpi |
| nvc | 使用当前nvc进行编译 | software/libs/nvc |
| nvc+mpi | 使用当前nvc+当前mpi进行编译 | software/libs/nvc/mpi |
| icc | 使用当前icc进行编译 | software/libs/icc |
| icc+mpi | 使用当前icc+当前mpi进行编译 | software/libs/icc/mpi |
| com | 安装编译器 | software/compiler |
| any | 安装工具软件 | software/utils |
### 路标

### 欢迎贡献
贾维斯项目欢迎您的专业技能和热情参与!
小的改进或修复总是值得赞赏的;先从文档开始可能是一个很好的起点。如果您正在考虑做出更大贡献,请提交一个issue或者在hpc.openeuler.org进行讨论。
编写代码并不是为贾维斯做出贡献的唯一方法。您还可以:
- 贡献安装脚本
- 帮助我们测试新的HPC应用
- 开发教程、演示
- 为我们宣传
- 帮助新的贡献者加入
请添加openEuler HPC SIG微信群了解更多HPC部署调优知识

### 技术文章
揭开HPC应用的神秘面纱:https://zhuanlan.zhihu.com/p/489828346
我和容器有个约会:https://zhuanlan.zhihu.com/p/499544308
贾维斯:完美而凛然HPC应用管家 https://zhuanlan.zhihu.com/p/518460349