diff --git a/README.md b/README.md index 6353c2802542c57884454a5c2e5fbc6dcca3ba67..1025b0532ca6b41136ccee64907ae688a725e7a3 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # HPCRunner : 贾维斯智能助手 ## ***愿景:自动容器化助力极简部署,一站式调优HPC应用*** - +![贾维斯](./images/logo.png) ### 项目背景 ​ HPC被喻为是IT行业“金字塔上的明珠”,其部署、编译、运行、性能采集分析的门槛非常高,不同的机器上部署HPC应用耗费大量精力,而且很多情况下需要同时部署ARM/X86两套环境进行验证,增加了很多的重复性工作,无法聚焦核心算法优化。 -![贾维斯](./images/jarvis.png) +![贾维斯功能概览](./images/jarvis.png) ### 项目特色 @@ -36,60 +36,182 @@ | init.sh | 贾维斯初始化文件 | | | jarvis | 贾维斯启动入口 | | -### 已验证HPC应用 - -气象海洋领域: - -- [x] WRF - -- [x] CMAQ - -- [x] fvcom - -- [x] SPECFEM3D_GLOBE - -- [x] udunits - -流体力学领域: - -- [x] OpenFOAM - -- [x] SU2 - -- [x] miniFE - -计算化学领域: - -- [x] CP2K -- [x] nwchem -- [x] Amber -- [x] QE - -- [x] VASP - -- [x] ABINIT - -- [x] SIESTA - -量子力学领域: - -- [x] octopus - -生命科学领域: - -- [x] bedtools - -- [x] blast - -- [x] bwa - -- [x] gatk - -- [x] octave - -- [x] picard +### 支持安装的依赖列表 +| 软件名 | 软件信息 | 类别 | +| ------- | -------------- | --------- | +| 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应用程序的开发工具 | 开发工具 | -- [x] relion ### 使用说明 @@ -111,22 +233,34 @@ source ./init.sh | [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应用(仅针对无需鉴权的链接,否则需要自行下载到downloads目录) - -``` -./jarvis -d -``` - -4.安装单个依赖 - -``` -./jarvis -install [package/][name/version/other] [option] -``` - -option支持列表如下所示 +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支持列表如下所示 | 选项值 | 解释 | 安装目录 | | ----------- | ----------------------------- | ------------------------- | @@ -143,111 +277,6 @@ option支持列表如下所示 | 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.输出已安装的软件清单 - -``` -./jarvis -l -``` - -8.查询已安装的软件 - -``` -./jarvis -f xxx -``` - -9.一键生成环境变量(会读取配置文件中的[ENV]字段内容并生成env.sh脚本执行,默认自动生成) - -``` -./jarvis -e && source ./env.sh -``` - -10.一键编译(会读取配置文件中的[BUILD]字段内容并生成build.sh脚本执行) - -``` -./jarvis -b -``` - -11.一键运行(会读取配置文件中的[RUN]字段内容并生成run.sh脚本执行) - -``` -./jarvis -r -``` - -12.一键性能采集(会读取配置文件中的[PERF]字段内容的perf值) - -``` -./jarvis -p -``` - -13.一键GPU性能采集(需安装nsys、ncu) - -``` -./jarvis -gp -``` - -14.一键输出服务器信息(包括CPU、网卡、OS、内存等) - -``` -./jarvis -i -``` - -15.一键服务器性能评测(包括MPI、OMP、P2P等) - -``` -./jarvis -bench all #运行所有benchmark -./jarvis -bench mpi #运行MPI benchmark -./jarvis -bench omp #运行OMP benchmark -./jarvis -bench gemm #运行矩阵运算 benchmark -``` - -16.切换配置(配置文件路径会保存到.meta文件中) - -``` -./jarvis -use XXX.config -``` - -17.根据当前配置生成Singularity容器定义文件 - -``` -./jarvis -container docker-hub-address -eg: ./jarvis -container openeuler:openeuler -``` - -18.其它功能查看(网络检测等) - -``` -./jarvis -h -``` - -19.更新路径(如果移动了贾维斯的路径) - -``` -./jarvis -u -``` - ### 路标 ![RoadMap](./images/roadmap.png) diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..aa2c676275e6cfcdd5f64e237c8bcbe3298111ac Binary files /dev/null and b/images/logo.png differ diff --git a/package/kml/1.7.0/bisheng/install.sh b/package/kml/1.7.0/bisheng/install.sh index 109c21ac0c0c3b3228bcde876d05a7ae39f6f955..8b8749eec8cf658f0f90df81b22506706f4fe485 100755 --- a/package/kml/1.7.0/bisheng/install.sh +++ b/package/kml/1.7.0/bisheng/install.sh @@ -11,7 +11,6 @@ rm -rf boostkit-kml-${kml_version}-1.aarch64.rpm unzip -o ${JARVIS_DOWNLOAD}/BoostKit-kml_${kml_version}_bisheng.zip rpm --force --nodeps -ivh --relocate /usr/local/kml=$1 --badreloc=$1 boostkit-kml-${kml_version}-1.aarch64.rpm - # generate full lapack netlib=${JARVIS_DOWNLOAD}/lapack-3.10.1.tar.gz netlib2=${JARVIS_DOWNLOAD}/scalapack-2.2.0.tar.gz diff --git a/src/analysisService.py b/src/analysisService.py index fba62098e58927330b2349ea8bb0be86e0d45cf6..52ddf727c81fc12dab52c388be2d07a3f7561482 100644 --- a/src/analysisService.py +++ b/src/analysisService.py @@ -64,6 +64,9 @@ class AnalysisService: def batch_run(self): self.jrun.batch_run() + + def job_run(self): + self.jrun.job_run() def clean(self): self.jbuild.clean() diff --git a/src/dataService.py b/src/dataService.py index 0e8765f70c28ba0f81ca77beefb6e2c0911ac7a6..66e5763886cc25a7997c514e28d16ed8bae5c635 100644 --- a/src/dataService.py +++ b/src/dataService.py @@ -37,6 +37,7 @@ class DataService(object,metaclass=Singleton): run_cmd = {} batch_cmd = '' loop_cmd = '' + job_cmd = '' #Other Info env_config_file = 'JARVIS_CONFIG' config_file = 'data.config' @@ -162,6 +163,8 @@ class DataService(object,metaclass=Singleton): rowIndex, DataService.batch_cmd = self.read_rows(rows, rowIndex+1) elif row == '[LOOP]': rowIndex, DataService.loop_cmd = self.read_rows(rows, rowIndex+1, False) + elif row == '[JOB]': + rowIndex, DataService.job_cmd = self.read_rows(rows, rowIndex+1, False) elif row == '[PERF]': rowIndex, perf_data = self.read_rows_kv(rows, rowIndex+1) self.set_perf_info(perf_data) diff --git a/src/installService.py b/src/installService.py index 3e2dc5e4d9b996dbcfd0d74f5787e2a067a21fd8..ce2155649c13b4ad57023e68342e1c94242dc220 100644 --- a/src/installService.py +++ b/src/installService.py @@ -275,6 +275,7 @@ class InstallService: bins_str = '' libs_str = '' incs_str = '' + opal_prefix = '' for file in file_list: if not os.path.isdir(file): continue @@ -291,11 +292,14 @@ class InstallService: libs_str = "prepend-path LD_LIBRARY_PATH "+':'.join(libs_dir) if len(incs_dir) >= 1: incs_str = "prepend-path INCLUDE " + ':'.join(incs_dir) + if self.is_mpi_software(sname): + opal_prefix = f"setenv OPAL_PREFIX {install_path}" module_file_content = f'''#%Module1.0##################################################################### set prefix {install_path} set version {sversion} setenv {sname.upper().replace('-','_')}_PATH {install_path} +{opal_prefix} {bins_str} {libs_str} {incs_str} diff --git a/src/jarvis.py b/src/jarvis.py index 4b23a9d3c2b394399c624f3adecf3de36281516d..ed2b7fd35ffb67530546da44b8038b93745d4007 100644 --- a/src/jarvis.py +++ b/src/jarvis.py @@ -28,6 +28,7 @@ class Jarvis: parser.add_argument("-b","--build", help=f"compile {DataService.app_name}", action="store_true") parser.add_argument("-cls","--clean", help=f"clean {DataService.app_name}", action="store_true") parser.add_argument("-r","--run", help=f"run {DataService.app_name}", action="store_true") + parser.add_argument("-j","--job", help=f"run job {DataService.app_name}", action="store_true") parser.add_argument("-p","--perf", help=f"auto perf {DataService.app_name}", action="store_true") parser.add_argument("-kp","--kperf", help=f"auto kperf {DataService.app_name}", action="store_true") # GPU perf @@ -91,6 +92,9 @@ class Jarvis: if self.args.build: self.analysis.build() + if self.args.job: + self.analysis.job_run() + if self.args.run: self.analysis.run() diff --git a/src/runService.py b/src/runService.py index ade3d417b6e4a144ed4ac2231d1e461c91cff9a0..9e730f6dc94c7bd881ad24c05bd6a33dd1030289 100644 --- a/src/runService.py +++ b/src/runService.py @@ -46,5 +46,30 @@ cd {DataService.case_dir} run_cmd = f''' chmod +x {batch_file} ./{batch_file} +''' + self.exe.exec_raw(run_cmd) + + def job_run(self): + job_file = 'job_run.sh' + job_file_path = os.path.join(self.ROOT, job_file) + print(f"start job run {DataService.app_name}") + job_content = f''' +{self.hpc_data.get_env()} +cd {DataService.case_dir} +cat > run.sh << \EOF +{DataService.job_cmd} +EOF + +chmod +x run.sh +if type djob >/dev/null 2>&1;then + dsub -s run.sh +else + echo "dsub not exists." +fi +''' + self.tool.write_file(job_file_path, job_content) + run_cmd = f''' +chmod +x {job_file} +./{job_file} ''' self.exe.exec_raw(run_cmd) diff --git a/templates/grapes/3.0.2/grapes.singularity.cpu.config b/templates/grapes/3.0.2/grapes.singularity.cpu.config new file mode 100644 index 0000000000000000000000000000000000000000..55f96fd788e425b0d053249d9dd1f04b08b90454 --- /dev/null +++ b/templates/grapes/3.0.2/grapes.singularity.cpu.config @@ -0,0 +1,76 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +not opensource code + +[DEPENDENCY] +set -e +set -x +module purge +module use ./software/modulefiles +./jarvis -install package/go/1.18 com +module load go/1.18 +./jarvis -install package/singularity/3.9.9 any +module load singularity/3.9.9 +./jarvis -install bisheng/2.5.0 com +module load bisheng/2.5.0 +export CC=clang CXX=clang++ FC=flang +./jarvis -install hmpi/1.2.0 clang +module load hmpi/1.2.0 +export CC=mpicc CXX=mpicxx FC=mpifort + +[ENV] +#!/bin/bash +module purge +module use ./software/modulefiles +module load go/1.18 +module load singularity/3.9.9 +#module load bisheng/2.5.0 +#module load hmpi/1.2.0 + +[APP] +app_name = Grapes +build_dir = +binary_dir = +case_dir = ${JARVIS_ROOT}/workloads/grapes_run-1KM1H_km + +[BUILD] +#singularity build --sandbox grapes openeuler-base.sif +#singularity shell -w openeuler-base +singularity build grapes-arm-oe22-2.sif grapes + +[CLEAN] +./clean + +[RUN] +run = rm -rf duonao.* && dsub -s run.sh +binary = +nodes = 1 + +[JOB] +#!/bin/sh +#DSUB -n grapes_1km +#DSUB --job_type cosched:hmpi +#DSUB -A root.default +#DSUB -q root.default +#DSUB -N 1 +#DSUB -R cpu=128 +#DSUB -oo duonao.grapes.%J.out +#DSUB -eo duonao.grapes.%J.err + +##set runtime environment variables + +ulimit -s unlimited +ulimit -c unlimited +rm -rf rsl.* +echo "----HOSTFILE generated---" +cat $CCS_HOST_FILE +echo "-------------------------" +export CASE_DIR=$JARVIS_ROOT/workloads/grapes_run +#inside run +EXEC_CMD="time -p singularity exec -B $CASE_DIR --pwd $CASE_DIR $JARVIS_ROOT/container/grapes/grapes-arm-oe22-2.sif mpirun -n 32 -x OMP_NUM_THREADS=1 -x PATH -x LD_LIBRARY_PATH /hpcrunner/grapes_model/run/grapes.exe" +echo "$EXEC_CMD" +date +$EXEC_CMD +date \ No newline at end of file diff --git a/templates/hpcg/hpcg.arm.config b/templates/hpcg/hpcg.arm.config new file mode 100644 index 0000000000000000000000000000000000000000..81f8f4d99ce8731980bef483059db1657aec6250 --- /dev/null +++ b/templates/hpcg/hpcg.arm.config @@ -0,0 +1,44 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +hpcg/3.1 + +[DEPENDENCY] +module purge +module use ./software/modulefiles +./jarvis -install kgcc/10.3.1 com +module load kgcc/10.3.1 +export CC=gcc CXX=g++ FC=gfortran +./jarvis -install hmpi/1.2.0 gcc +if [ ! -d "hpcg" ]; then + git config --global http.sslVerify false + git clone --depth=1 https://github.com/hpcg-benchmark/hpcg.git +fi + +[ENV] +module purge +module use ./software/modulefiles +module load kgcc/10.3.1 +module load hmpi/1.2.0 +export CC=mpicc CXX=mpic++ FC=mpifort +export HPCG_HOME= $JARVIS_ROOT/hpcg + +[APP] +app_name = hpcg +build_dir = $HPCG_HOME +binary_dir = $HPCG_HOME/bin/ +case_dir = $HPCG_HOME/bin/ + +[BUILD] +make -j +echo "check if SVE exists" +objdump -d bin/xhpcg | grep p0 + +[CLEAN] +make clean + +[RUN] +run = mpirun --allow-run-as-root -np 32 +binary = xhpcg 104 104 104 +nodes = 1 diff --git a/templates/hpl/hpl.arm.config b/templates/hpl/hpl.arm.config new file mode 100644 index 0000000000000000000000000000000000000000..3523e71b6a2a2a013751b065e2d2b2828ac58470 --- /dev/null +++ b/templates/hpl/hpl.arm.config @@ -0,0 +1,60 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +hpl/2.3 https://netlib.org/benchmark/hpl/hpl-2.3.tar.gz + +[DEPENDENCY] +module purge +module use ./software/modulefiles +./jarvis -install kgcc/10.3.1 com +module load kgcc/10.3.1 +export CC=gcc CXX=g++ FC=gfortran +./jarvis -install openblas/0.3.18 gcc +./jarvis -install hmpi/1.2.0 gcc +if [ ! -d "hpl-2.3" ]; then + tar -xzvf $JARVIS_DOWNLOADS/hpl-2.3.tar.gz + cp setup/Make.Linux_PII_FBLAS Make.aarch64 +fi + +[ENV] +module purge +module use ./software/modulefiles +module load kgcc/10.3.1 +module load hmpi/1.2.0 +module load openblas/0.3.18 +export HPL_HOME= $JARVIS_ROOT/hpl-2.3 + +[APP] +app_name = hpl +build_dir = $HPL_HOME +binary_dir = $HPL_HOME/bin/aarch64 +case_dir = $HPL_HOME/bin/aarch64 + +[BUILD] +sed -i "64i ARCH = aarch64" make.aarch64 +sed -i "70i TOPdir = $(HPL_HOME)" make.aarch64 +sed -i "84i MPdir =" make.aarch64 +sed -i "85i MPinc =" make.aarch64 +sed -i "86i MPlib =" make.aarch64 +sed -i "95i LAdir = $(OPENBLAS_PATH)" make.aarch64 +sed -i "97i LAlib = $(LAdir)/lib/libopenblas.a" make.aarch64 +sed -i "169i CC = mpicc" make.aarch64 +sed -i "171i CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -fopenmp -funroll-loops -W -Wall" make.aarch64 +make arch=aarch64 -j +echo "check if SVE exists" +objdump -d bin/aarch64/xhpl | grep p0 +cd bin/aarch64 +#modify HPL.dat +sed -i "6i 100000 Ns" HPL.dat +sed -i "8i 256 NBs" HPL.dat +sed -i "11i 4Ps" HPL.dat +sed -i "12i 8Qs" HPL.dat + +[CLEAN] +make arch=aarch64 clean + +[RUN] +run = mpirun --allow-run-as-root -np 32 +binary = xhpl +nodes = 1 diff --git a/templates/wrf/4.2/bisheng/data.wrf.arm.cpu.config b/templates/wrf/4.2/bisheng/data.wrf.arm.cpu.config index d5cce55bbcc8b50853b921e279c21dac7d720a2d..58efa6379f3faf482e139b678438d71f286fe0df 100644 --- a/templates/wrf/4.2/bisheng/data.wrf.arm.cpu.config +++ b/templates/wrf/4.2/bisheng/data.wrf.arm.cpu.config @@ -7,12 +7,10 @@ wrf/4.2 https://github.com/wrf-model/WRF/archive/refs/tags/v4.2.tar.gz wrf-4.2.t [DEPENDENCY] set -e set -x +# basic system components +./CHECK_ROOT && yum install -y time.aarch64 module purge module use ./software/modulefiles -./jarvis -install package/go/1.18 com -module load go/1.18 -./jarvis -install package/singularity/3.9.9 any -module load singularity/3.9.9 ./jarvis -install bisheng/2.5.0 com module load bisheng/2.5.0 export CC=clang CXX=clang++ FC=flang @@ -23,30 +21,24 @@ module load hmpi/1.2.0 export CC=mpicc CXX=mpicxx FC=mpifort ./jarvis -install hdf5/1.12.0/clang clang+mpi module load hdf5-clang/1.12.0 -./jarvis -install netcdf/4.7.4/clang clang+mpi -module load netcdf-clang/4.7.4 ./jarvis -install pnetcdf/1.12.1 clang+mpi module load pnetcdf/1.12.1 -./jarvis -install kgcc/9.3.1 com -module load kgcc/9.3.1 -./jarvis -install kml/1.6.0/gcc gcc -#./jarvis -install osu/1.0.0 clang+mpi -#tar -zxvf $JARVIS_DOWNLOAD/wrf-4.2.tar.gz -C wrf-4.2-ori -#tar -zxvf $JARVIS_DOWNLOAD/BJ-WRF-4.2.1.tar.gz -C wrf-4.2-ori +./jarvis -install netcdf/4.7.4/clang clang+mpi +module load netcdf-clang/4.7.4 +./jarvis -install kml/1.7.0/bisheng clang +if [ ! -d "./WRF-4.2" ]; then + tar -zxvf $JARVIS_DOWNLOAD/wrf-4.2.tar.gz +fi [ENV] #!/bin/bash module purge -module use ./software/modulefiles -module load go/1.18 -module load singularity/3.9.9 +module use /hpcrunner/software/modulefiles module load bisheng/2.5.0 module load jasper/1.900.2 module load hmpi/1.2.0 -module load hdf5-clang/1.12.0 netcdf-clang/4.7.4 pnetcdf/1.12.1 -module load kgcc/9.3.1 -module load kml-gcc/1.6.0 -module unload kgcc/9.3.1 +module load hdf5-clang/1.12.0 pnetcdf/1.12.1 netcdf-clang/4.7.4 +module load kml-bisheng/1.7.0 export WRFIO_NCD_LARGE_FILE_SUPPORT=1 export NETCDF=$NETCDF_CLANG_PATH export HDF5=$HDF5_CLANG_PATH @@ -58,19 +50,67 @@ export JASPREINC=$$JASPER_PATH/include export CPPFLAGS="-I$HDF5/include -I$PNETCDF/include -I$NETCDF/include" export LDFLAGS="-L$HDF5/lib -L$PNETCDF/lib -L$NETCDF/lib -lnetcdf -lnetcdff -lpnetcdf -lhdf5_hl -lhdf5 -lz" export CC=mpicc CXX=mpicxx FC=mpif90 F77=mpif90 F90=mpif90 -export WRF_DIR=$JARVIS_ROOT/wrf-4.2-ori/WRF-4.2.1.920B/WRF-4.2.1 +export WRF_DIR=$JARVIS_ROOT/WRF-4.2 export MPI_LIB="-L$MPI_LIB -lmpi -lomp" export INCLUDE=$WRF_DIR/include:$INCLUDE export WRFIO_NCD_LARGE_FILE_SUPPORT=1 -#移动run/目录下的初始场数据 [APP] app_name = WRF build_dir = ${WRF_DIR} binary_dir = -case_dir = ${JARVIS_ROOT}/workloads/WRF/conus12km/ +#case_dir = ${JARVIS_ROOT}/ +case_dir = ${JARVIS_ROOT}/workloads/conus12km/ [BUILD] +cat << \EOF > ./arch/configure.defaults +########################################################### +#ARCH Linux aarch64,clang HYPERMPI#serial smpar dmpar dm+sm +DESCRIPTION = CLANG ($SFC/$SCC) +DMPARALLEL = 1 +OMPCPP = -D_OPENMP +OMP = -fopenmp +OMPCC = -fopenmp +SFC = flang +SCC = clang +CCOMP = clang +DM_FC = mpif90 -f90=$(SFC) +DM_CC = mpicc -cc=$(SCC) -DMPI2_SUPPORT +FC = CONFIGURE_FC +CC = CONFIGURE_CC +LD = $(FC) -L$(KML_BISHENG_PATH)/lib -lkm +RWORDSIZE = CONFIGURE_RWORDSIZE +PROMOTION = #-fdefault-real-8 +ARCH_LOCAL = -DNONSTANDARD_SYSTEM_SUBR -DWRF_USE_CLM +CFLAGS_LOCAL = -mcpu=native -w -O3 -c -march=armv8.2-a +LDFLAGS_LOCAL = +CPLUSPLUSLIB = +ESMF_LDFLAG = $(CPLUSPLUSLIB) +FCOPTIM = -O3 -march=armv8.2-a +FCREDUCEDOPT = $(FCOPTIM) +FCNOOPT = -O0 +FCDEBUG = -g # -fbacktrace -ggdb-fcheck=bounds,do,mem,pointer -ffpe-trap=invalid,zero,overflow +FORMAT_FIXED = -ffixed-form +FORMAT_FREE = -ffree-form -ffree-line-length-0 +FCSUFFIX = +BYTESWAPIO = -fconvert=big-endian +FCBASEOPTS_NO_G = -w $(FORMAT_FREE) $(BYTESWAPIO) +FCBASEOPTS = -mcpu=native $(OMP) $(FCBASEOPTS_NO_G) +MODULE_SRCH_FLAG = +TRADFLAG = -traditional +CPP = /lib/cpp -P +AR = ar +ARFLAGS = ru +M4 = m4 -G +RANLIB = ranlib +RLFLAGS = +CC_TOOLS = $(SCC) + +#insert new stanza before the Fujitsu block, keep Fujitsu at the end of the list +########################################################### +#ARCH NULL +EOF +sed -i 's/derf/erf/g' ./phys/module_mp_SBM_polar_radar.F echo 4 | ./configure ./compile -j 64 em_real 2>&1 | tee compile.log @@ -78,7 +118,31 @@ echo 4 | ./configure ./clean [RUN] -run = dsub -s run.sh +run = mpirun --allow-run-as-root -n 32 -x OMP_NUM_THREADS=1 -bind-to core $WRF_DIR/run/wrf.exe binary = nodes = 1 +[JOB] +#!/bin/sh +#DSUB -n wrf_test +#DSUB --job_type cosched:hmpi +#DSUB -A root.default +#DSUB -q root.default +#DSUB -N 1 +#DSUB -R cpu=128 +#DSUB -oo wrf.%J.out +#DSUB -eo wrf.%J.err + +##set runtime environment variables + +ulimit -s unlimited +ulimit -c unlimited +rm -rf rsl.* +echo "----HOSTFILE generated---" +cat $CCS_HOST_FILE +echo "-------------------------" +EXEC_CMD="time -p mpirun $CCS_MPI_OPTIONS -n 32 -x OMP_NUM_THREADS=1 -x UCX_NET_DEVICES=mlx5_0:1 -mca io romio321 -mca pml ucx -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc -bind-to core -x PATH -x LD_LIBRARY_PATH $WRF_DIR/run/wrf.exe" +echo "$EXEC_CMD" +date +$EXEC_CMD +date \ No newline at end of file diff --git a/templates/wrf/4.2/bisheng/run.sh b/templates/wrf/4.2/bisheng/run.sh deleted file mode 100644 index 3f1040e6f2cfb5492c6ee663c45ae97128d63a83..0000000000000000000000000000000000000000 --- a/templates/wrf/4.2/bisheng/run.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -#DSUB -n wrf_test -#DSUB --job_type cosched:hmpi -#DSUB -A root.default -#DSUB -q root.default -#DSUB -N 1 -#DSUB -R cpu=128 -#DSUB -oo wrf.%J.out -#DSUB -eo wrf.%J.err - -##set runtime environment variables - -ulimit -s unlimited -ulimit -c unlimited -rm -rf rsl.* -echo "----HOSTFILE generated---" -cat $CCS_HOST_FILE -echo "-------------------------" -EXEC_CMD="time -p mpirun $CCS_MPI_OPTIONS -n 32 -x OMP_NUM_THREADS=1 -x UCX_NET_DEVICES=mlx5_0:1 -mca io romio321 -mca pml ucx -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc -bind-to core -x PATH -x LD_LIBRARY_PATH $WRF_DIR/run/wrf.exe" -echo "$EXEC_CMD" -date -$EXEC_CMD -date \ No newline at end of file