# hpcrunner
**Repository Path**: weigoooo/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**: 0
- **Forks**: 80
- **Created**: 2022-05-05
- **Last Updated**: 2022-05-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## 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 | 贾维斯启动入口 | |
### 已验证HPC应用
分子动力学领域:
- [x] CP2K
- [x] Amber
- [x] QE
- [x] VASP
气象领域:
- [x] WRF
流体力学领域:
- [x] OpenFOAM
### 使用说明
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 |
| [BATCH] | HPC应用批量运行命令 | #!/bin/bash
nvidia-smi -pm 1
nvidia-smi -ac 1215,1410 |
| [PERF] | 性能工具额外参数 | perf= -o
nsys=
ncu=--target-processes all --launch-skip 71434 --launch-count 1 |
3.一键下载HPC应用(仅针对无需鉴权的链接,否则需要自行下载到downloads目录)
```
./jarvis -d
```
4.安装单个依赖
```
./jarvis -install [package/][name/version/other] [option]
```
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 |
注意,如果软件为MPI通信软件(如hmpi、openmpi),会安装到software/mpi目录
eg:
```
./jarvis -install bisheng/2.1.0 com #安装毕晟编译器
./jarvis -install package/bisheng/2.1.0 com #安装毕晟编译器
./jarvis -install fftw/3.3.8 gcc+mpi #使用当前gcc和mpi编译fftw 3.3.8版本
./jarvis -install openmpi/4.1.2 gcc #使用当前gcc编译openmpi 4.1.2版本
```
5.一键卸载依赖
```
./jarvis -remove openblas/0.3.18
```
6.一键下载并安装所有依赖(会读取配置文件中的[DEPENDENCY]字段内容并按顺序执行)
```
./jarvis -dp
```
7.一键生成环境变量(会读取配置文件中的[ENV]字段内容并生成env.sh脚本执行,默认自动生成)
```
./jarvis -e && source ./env.sh
```
8.一键编译(会读取配置文件中的[BUILD]字段内容并生成build.sh脚本执行)
```
./jarvis -b
```
9.一键运行(会读取配置文件中的[RUN]字段内容并生成run.sh脚本执行)
```
./jarvis -r
```
10.一键性能采集(会读取配置文件中的[PERF]字段内容的perf值)
```
./jarvis -p
```
11.一键GPU性能采集(需安装nsys、ncu)
```
./jarvis -gp
```
12.一键输出服务器信息(包括CPU、网卡、OS、内存等)
```
./jarvis -i
```
13.一键服务器性能评测(包括MPI、OMP、P2P等)
```
./jarvis -bench all #运行所有benchmark
./jarvis -bench mpi #运行MPI benchmark
./jarvis -bench omp #运行OMP benchmark
./jarvis -bench gemm #运行矩阵运算 benchmark
```
14.切换配置
```
./jarvis -use XXX.config
```
15.根据当前配置生成Singularity容器定义文件
```
./jarvis -container docker-hub-address
```
16.其它功能查看(网络检测等)
```
./jarvis -h
```
### 路标

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

### 技术文章
揭开HPC应用的神秘面纱:https://zhuanlan.zhihu.com/p/489828346
我和容器有个约会:https://zhuanlan.zhihu.com/p/489828346