已合并
规范模板相关路径 #1088
helloworld664创建于 1月20日
规范模板相关路径 #1088
已合并
共 2 个文件变更+64-49
| @@ -16,7 +16,9 @@ HPC被喻为是IT行业“金字塔上的明珠”,其部署、编译、运行 | |||
| 16 | # 贾维斯使用指导 | 16 | # 贾维斯使用指导 |
| 17 | 17 | ||
| 18 | ## 下载贾维斯 | 18 | ## 下载贾维斯 |
| 19 | + | ||
| 19 | 执行如下命令下载贾维斯 | 20 | 执行如下命令下载贾维斯 |
| 21 | + | ||
| 20 | ``` | 22 | ``` |
| 21 | git clone https://gitcode.com/openeuler/hpcrunner.git | 23 | git clone https://gitcode.com/openeuler/hpcrunner.git |
| 22 | ``` | 24 | ``` |
| @@ -40,16 +42,20 @@ git clone https://gitcode.com/openeuler/hpcrunner.git | |||
| 40 | | tmp | 软件编译目录和解压后源码存放目录 | | | 42 | | tmp | 软件编译目录和解压后源码存放目录 | | |
| 41 | 43 | ||
| 42 | ## 使用贾维斯安装应用流程 | 44 | ## 使用贾维斯安装应用流程 |
| 45 | + | ||
| 43 | 以安装某应用(xapp) 为例: | 46 | 以安装某应用(xapp) 为例: |
| 44 | 47 | ||
| 45 | 步骤1:(可选)配置git代理 | 48 | 步骤1:(可选)配置git代理 |
| 46 | 执行proxy脚本,并选择合适的git源 | 49 | 执行proxy脚本,并选择合适的git源 |
| 50 | + | ||
| 47 | ``` | 51 | ``` |
| 48 | ./proxy.sh | 52 | ./proxy.sh |
| 49 | ``` | 53 | ``` |
| 50 | 54 | ||
| 51 | 步骤2:初始环境变量,并检查环境 | 55 | 步骤2:初始环境变量,并检查环境 |
| 52 | -执行初始化脚本,同步检查配置环境并下载安装基础依赖,<font color="red">‌**确保初始化成功,无ERROR回显再继续执行**‌</font> | 56 | +执行初始化脚本,同步检查配置环境并下载安装基础依赖,<font color="red">‌**确保初始化成功,无ERROR回显再继续执行** |
| 57 | +‌</font> | ||
| 58 | + | ||
| 53 | ``` | 59 | ``` |
| 54 | source init.sh | 60 | source init.sh |
| 55 | ``` | 61 | ``` |
| @@ -60,40 +66,45 @@ source init.sh | |||
| 60 | ``` | 66 | ``` |
| 61 | ./jarvis -use templates/xapp.config | 67 | ./jarvis -use templates/xapp.config |
| 62 | ``` | 68 | ``` |
| 69 | + | ||
| 63 | 注:贾维斯中包含典型HPC应用模板, 位于目录”hpcrunner/template”中,可直接使用。 | 70 | 注:贾维斯中包含典型HPC应用模板, 位于目录”hpcrunner/template”中,可直接使用。 |
| 64 | 如要新增应用模板,需遵循一定的格式新建自定义文件app.config。 | 71 | 如要新增应用模板,需遵循一定的格式新建自定义文件app.config。 |
| 65 | -配置文件格式如下所示 | 72 | +配置文件格式如下所示 |
| 66 | 73 | ||
| 67 | -| **配置项** | **说明** | **示例** | | 74 | +| **配置项** | **说明** | **示例** | |
| 68 | -|--------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| | 75 | +|--------------|-----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |
| 69 | -| [SERVER] | 指定节点列表,按行书写,用于自动生成hostfile | 11.11.11.11<br>22.22.22.22 | | 76 | +| [SERVER] | 指定节点列表,按行书写,用于自动生成hostfile | 11.11.11.11<br>22.22.22.22 | |
| 70 | -| [DOWNLOAD] | 格式:app/appversion download_url [alias]<br>**注:**在没有网络场景下,可提前将下载好的安装包放置在hpcrunner/downloads目录下 | cp2k/8.2 https://github.com/extdomains/github.com/cp2k/cp2k/releases/download/v8.2.0/cp2k-8.2.tar.bz2 | | 77 | +| [DOWNLOAD] | 格式:app/appversion download_url [alias]<br>**注:**在没有网络场景下,可提前将下载好的安装包放置在hpcrunner/downloads目录下 | cp2k/8.2 https://github.com/extdomains/github.com/cp2k/cp2k/releases/download/v8.2.0/cp2k-8.2.tar.bz2 | |
| 71 | -| [DEPENDENCY] | HPC应用所需安装的依赖软件 | ./jarvis -install gmp/6.2.0 clang<br>./jarvis -install boost/1.72.0 clang | | 78 | +| [DEPENDENCY] | HPC应用所需安装的依赖软件 | ./jarvis -install gmp/6.2.0 clang<br>./jarvis -install boost/1.72.0 clang | |
| 72 | -| [ENV] | HPC应用编译运行所需的环境配置 | module use ./software/modulefiles<br>module load bisheng/3.2.0<br>module load boost/1.72.0 | | 79 | +| [ENV] | HPC应用编译运行所需的环境配置 | module use ./software/modulefiles<br>module load bisheng/3.2.0<br>module load boost/1.72.0 | |
| 73 | -| [APP] | HPC应用信息,包括应用名、构建路径、二进制路径、算例路径 | app_name = CP2K <br>build_dir = /home/cp2k-8.2/ <br>binary_dir = /home/CP2K/cp2k-8.2/bin/ case_dir = /home/CP2K/cp2k-8.2/benchmarks/QS/ | | 80 | +| [APP] | HPC应用信息,包括应用名、构建路径、二进制路径、算例路径 | app_name = CP2K <br>build_dir = $JARVIS_ROOT/tmp/cp2k-8.2/ <br>binary_dir = $JARVIS_ROOT/software/apps/bisheng${BISHENG_VERSION}-hmpi${HPCKIT_VERSION}/cp2k-8.2/bin/ <br>case_dir = $JARVIS_ROOT/workloads/cp2k-8.2/benchmarks/QS/ | |
| 74 | -| [BUILD] | HPC应用构建脚本 | ./configure <br>make -j<br>make install | | 81 | +| [BUILD] | HPC应用构建脚本 | ./configure <br>make -j<br>make install | |
| 75 | -| [CLEAN] | HPC应用编译清理脚本 | make clean | | 82 | +| [CLEAN] | HPC应用编译清理脚本 | make clean | |
| 76 | -| [RUN] | HPC应用运行配置,包括前置命令、应用命令和节点个数 | run = mpirun -np 2 <br>binary = cp2k.psmp H2O-256.inp <br>nodes = 1 | | 83 | +| [RUN] | HPC应用运行配置,包括前置命令、应用命令和节点个数 | run = mpirun -np 2 <br>binary = cp2k.psmp H2O-256.inp <br>nodes = 1 | |
| 77 | -| [JOB] | HPC应用作业调度运行配置 | 多瑙作业调度脚本 | | 84 | +| [JOB] | HPC应用作业调度运行配置 | 多瑙作业调度脚本 | |
| 78 | -| [BATCH] | HPC应用批量运行命令**** | #!/bin/bash <br>mpirun -np 2 cp2k.psmp H2O-256.inp mpirun -np 2 cp2k.psmp H2O-512.inp | | 85 | +| [BATCH] | HPC应用批量运行命令 | #!/bin/bash <br>mpirun -np 2 cp2k.psmp H2O-256.inp mpirun -np 2 cp2k.psmp H2O-512.inp | |
| 79 | -| [PERF] | 性能分析采集工具额外参数配置 | perf= -o <br>nsys= <br>ncu=--target-processes all --launch-skip 71434 --launch-count 1 | | 86 | +| [PERF] | 性能分析采集工具额外参数配置 | perf= -o <br>nsys= <br>ncu=--target-processes all --launch-skip 71434 --launch-count 1 | |
| 80 | 87 | ||
| 81 | 步骤4:下载安装包以及相关依赖 | 88 | 步骤4:下载安装包以及相关依赖 |
| 89 | + | ||
| 82 | ``` | 90 | ``` |
| 83 | ./jarvis -d | 91 | ./jarvis -d |
| 84 | ``` | 92 | ``` |
| 85 | 93 | ||
| 86 | 步骤5:安装应用依赖 | 94 | 步骤5:安装应用依赖 |
| 95 | + | ||
| 87 | ``` | 96 | ``` |
| 88 | ./jarvis -dp | 97 | ./jarvis -dp |
| 89 | ``` | 98 | ``` |
| 90 | 99 | ||
| 91 | 步骤6:编译应用 | 100 | 步骤6:编译应用 |
| 101 | + | ||
| 92 | ``` | 102 | ``` |
| 93 | ./jarvis -b | 103 | ./jarvis -b |
| 94 | ``` | 104 | ``` |
| 95 | 105 | ||
| 96 | 步骤7:运行应用 | 106 | 步骤7:运行应用 |
| 107 | + | ||
| 97 | ``` | 108 | ``` |
| 98 | ./jarvis -r | 109 | ./jarvis -r |
| 99 | ``` | 110 | ``` |
| @@ -115,26 +126,26 @@ source init.sh | |||
| 115 | 126 | ||
| 116 | ## 功能指令介绍 | 127 | ## 功能指令介绍 |
| 117 | 128 | ||
| 118 | -| **功能** | **命令** | **示例/说明** | | 129 | +| **功能** | **命令** | **示例/说明** | |
| 119 | -| ------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | | 130 | +|-----------------------|----------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |
| 120 | -| 帮助信息 | ./jarvis -h | | | 131 | +| 帮助信息 | ./jarvis -h | | |
| 121 | -| 生效应用模板 | ./jarvis -use /path/app.config | 由高到低,模板使用优先级顺序:<br>1.通过环境变量JARVIS_CONFIG指定模板, 支持多用户并行使用贾维斯。<br>export JARVIS_CONFIG=/path/app.config<br>2.通过命令”./jarvis -use /path/app.config”指定模板。<br>3.贾维斯根目录下默认模板data.config。 | | 132 | +| 生效应用模板 | ./jarvis -use /path/app.config | 由高到低,模板使用优先级顺序:<br>1.通过环境变量JARVIS_CONFIG指定模板, 支持多用户并行使用贾维斯。<br>export JARVIS_CONFIG=/path/app.config<br>2.通过命令”./jarvis -use /path/app.config”指定模板。<br>3.贾维斯根目录下默认模板data.config。 | |
| 122 | -| 一键下载HPC应用 | ./jarvis -d | 应用将自动下载[DOWNLOAD]中指定的安装包到downloads目录。<br>**注:**在没有网络场景下,可提前将下载好的安装包放置到downloads目录下 | | 133 | +| 一键下载HPC应用 | ./jarvis -d | 应用将自动下载[DOWNLOAD]中指定的安装包到downloads目录。<br>**注:**在没有网络场景下,可提前将下载好的安装包放置到downloads目录下 | |
| 123 | -| 安装依赖 | ./jarvis -install [package/][name/version/other] [option] | 支持安装的软件清单位于package目录下,可在package目录下获取[name/version/other]各字段信息,精确到”install.sh”的上一层目录<br>各参数具体含义:<br>package:可选<br>name:软件名<br>version:软件版本<br>other:子版本,”install.sh”的上一层目录<br>option:指定依赖的编译工具,支持的选项如下表<br>示例如下:<br>1. 安装编译器<br>./jarvis -install hpckit/x.x.x any<br>module use xxx<br>module load bisheng/xxx<br>2. 安装mpi<br>./jarvis -install hpckit/x.x.x any<br>module use xxx<br>module load hmpi/xxx<br>3. 安装依赖<br>module use software/module*<br>module load bisheng/x.x.x<br>module load hmpi/x.x.x<br>export CC=mpicc CXX=mpicxx FC=mpifort <br>./jarvis -install hdf5/1.8.20/clang bisheng+mpi<br>4. 安装工具<br>./jarvis -install hpckit/2025.3.30 any<br>./jarvis -install go/1.18 any <br>5.自定义安装目录 <br>./jarvis -install hpckit/25.1.0 any --prefix=/path/to/software | | 134 | +| 安装依赖 | ./jarvis -install [package/][name/version/other] [option] | 支持安装的软件清单位于package目录下,可在package目录下获取[name/version/other]各字段信息,精确到”install.sh”的上一层目录<br>各参数具体含义:<br>package:可选<br>name:软件名<br>version:软件版本<br>other:子版本,”install.sh”的上一层目录<br>option:指定依赖的编译工具,支持的选项如下表<br>示例如下:<br>1. 安装编译器<br>./jarvis -install hpckit/x.x.x any<br>module use xxx<br>module load bisheng/xxx<br>2. 安装mpi<br>./jarvis -install hpckit/x.x.x any<br>module use xxx<br>module load hmpi/xxx<br>3. 安装依赖<br>module use software/module*<br>module load bisheng/x.x.x<br>module load hmpi/x.x.x<br>export CC=mpicc CXX=mpicxx FC=mpifort <br>./jarvis -install hdf5/1.8.20/clang bisheng+mpi<br>4. 安装工具<br>./jarvis -install hpckit/2025.3.30 any<br>./jarvis -install go/1.18 any <br>5.自定义安装目录 <br>./jarvis -install hpckit/25.1.0 any --prefix=/path/to/software | |
| 124 | -| 一键卸载依赖 | ./jarvis -remove xxx | 支持模糊查询 ./jarvis -remove openblas/0.3.18 | | 135 | +| 一键卸载依赖 | ./jarvis -remove xxx | 支持模糊查询 ./jarvis -remove openblas/0.3.18 | |
| 125 | -| 一键下载并安装所有依赖 | ./jarvis -dp | 需要提前指定应用模板./jarvis -use app.config<br>读取配置文件中的[DEPENDENCY]字段内容并按顺序执行 | | 136 | +| 一键下载并安装所有依赖 | ./jarvis -dp | 需要提前指定应用模板./jarvis -use app.config<br>读取配置文件中的[DEPENDENCY]字段内容并按顺序执行 | |
| 126 | -| 输出已安装的软件清单 | ./jarvis -l | 输出清单以相对路径列出 | | 137 | +| 输出已安装的软件清单 | ./jarvis -l | 输出清单以相对路径列出 | |
| 127 | -| 查询已安装的软件 | ./jarvis -f xxx | 查询openblas安装路径 ./jarvis -f openblas | | 138 | +| 查询已安装的软件 | ./jarvis -f xxx | 查询openblas安装路径 ./jarvis -f openblas | |
| 128 | -| 一键生成环境变量 | ./jarvis -e | 读取配置文件中的[ENV]字段内容并生成env.sh脚本,执行./jarvis -b或./jarvis -r会自动生成并生效 | | 139 | +| 一键生成环境变量 | ./jarvis -e | 读取配置文件中的[ENV]字段内容并生成env.sh脚本,执行./jarvis -b或./jarvis -r会自动生成并生效 | |
| 129 | -| 一键编译 | ./jarvis -b | 自动进入[APP]字段中的build_dir目录,读取配置文件中的[BUILD]字段内容并生成build.sh脚本执行 | | 140 | +| 一键编译 | ./jarvis -b | 自动进入[APP]字段中的build_dir目录,读取配置文件中的[BUILD]字段内容并生成build.sh脚本执行 | |
| 130 | -| 一键运行 | ./jarvis -r | 自动进入[APP]字段中的case_dir目录,读取配置文件中的[RUN]字段下内容并组装生成run.sh脚本执行 | | 141 | +| 一键运行 | ./jarvis -r | 自动进入[APP]字段中的case_dir目录,读取配置文件中的[RUN]字段下内容并组装生成run.sh脚本执行 | |
| 131 | -| 一键运行 | ./jarvis -rb | 自动进入[APP]字段中的case_dir目录,读取配置文件中的[BATCH]字段下内容并直接生成batch_run.sh脚本执行 | | 142 | +| 一键运行 | ./jarvis -rb | 自动进入[APP]字段中的case_dir目录,读取配置文件中的[BATCH]字段下内容并直接生成batch_run.sh脚本执行 | |
| 132 | -| 一键CPU性能采集 | ./jarvis -p | 读取配置文件中的[PERF]字段下的perf选项内容,然后使用perf工具进行采集信息 | | 143 | +| 一键CPU性能采集 | ./jarvis -p | 读取配置文件中的[PERF]字段下的perf选项内容,然后使用perf工具进行采集信息 | |
| 133 | -| 一键GPU性能采集 | ./jarvis -gp | 读取配置文件中的[PERF]字段下的nsys选项内容,然后使用nsys工具进行采集信息 | | 144 | +| 一键GPU性能采集 | ./jarvis -gp | 读取配置文件中的[PERF]字段下的nsys选项内容,然后使用nsys工具进行采集信息 | |
| 134 | -| 一键输出服务器信息 | ./jarvis -i | 输出CPU、网卡、OS、内存等信息 | | 145 | +| 一键输出服务器信息 | ./jarvis -i | 输出CPU、网卡、OS、内存等信息 | |
| 135 | -| 一键评测服务器性能 | ./jarvis -bench all ./jarvis -bench mpi ./jarvis -bench omp ./jarvis -bench gemm | 包括HPL、Stream、MPI、OMP、P2P等评测benchmark支持清单位于目录“hpcrunner/benchmark” | | 146 | +| 一键评测服务器性能 | ./jarvis -bench all ./jarvis -bench mpi ./jarvis -bench omp ./jarvis -bench gemm | 包括HPL、Stream、MPI、OMP、P2P等评测benchmark支持清单位于目录“hpcrunner/benchmark” | |
| 136 | -| 一键生成Singularity容器定义文件 | ./jarvis -container docker-hub-address | 需要事先指定应用配置./jarvis -use data.config <br>参数"docker-hub-address"指定基础镜像<br>示例:./jarvis -container openeuler/openeuler | | 147 | +| 一键生成Singularity容器定义文件 | ./jarvis -container docker-hub-address | 需要事先指定应用配置./jarvis -use data.config <br>参数"docker-hub-address"指定基础镜像<br>示例:./jarvis -container openeuler/openeuler | |
| 137 | -| 更新依赖库的路径 | ./jarvis -u | 如果移动了贾维斯的路径,将自动更新software/modulefiles的路径 | | 148 | +| 更新依赖库的路径 | ./jarvis -u | 如果移动了贾维斯的路径,将自动更新software/modulefiles的路径 | |
| 138 | 149 | ||
| 139 | ## option介绍 | 150 | ## option介绍 |
| 140 | 151 | ||
| @@ -426,12 +426,12 @@ chmod +x {install_script} | |||
| 426 | print("install failed") | 426 | print("install failed") |
| 427 | sys.exit(1) | 427 | sys.exit(1) |
| 428 | 428 | ||
| 429 | - def ensure_symlink(self, real_path, logical_path): | 429 | + def ensure_symlink(self, real_path, logical_path): |
| 430 | - if os.path.islink(logical_path) or os.path.exists(logical_path): | 430 | + if os.path.islink(logical_path) or os.path.exists(logical_path): |
| 431 | - return | 431 | + return |
| 432 | - self.tool.mkdirs(os.path.dirname(logical_path)) | 432 | + self.tool.mkdirs(os.path.dirname(logical_path)) |
| 433 | - os.symlink(real_path, logical_path) | 433 | + os.symlink(real_path, logical_path) |
| 434 | - | 434 | + |
| 435 | def add_install_info(self, software_info, install_path): | 435 | def add_install_info(self, software_info, install_path): |
| 436 | software_dict = {} | 436 | software_dict = {} |
| 437 | software_dict['name'] = software_info['sname'] | 437 | software_dict['name'] = software_info['sname'] |
| @@ -453,7 +453,7 @@ chmod +x {install_script} | |||
| 453 | self.tool.prt_content("INSTALL " + software_path) | 453 | self.tool.prt_content("INSTALL " + software_path) |
| 454 | compilers = {"GCC":self.get_gcc_info, "CLANG":self.get_clang_info, | 454 | compilers = {"GCC":self.get_gcc_info, "CLANG":self.get_clang_info, |
| 455 | "NVC":self.get_nvc_info, "ICC":self.get_icc_info, | 455 | "NVC":self.get_nvc_info, "ICC":self.get_icc_info, |
| 456 | - "BISHENG":self.get_clang_info} | 456 | + "BISHENG":self.get_clang_info} |
| 457 | software_path = self.remove_prefix(software_path) | 457 | software_path = self.remove_prefix(software_path) |
| 458 | # software_path should exists | 458 | # software_path should exists |
| 459 | abs_software_path = self.check_software_path(software_path) | 459 | abs_software_path = self.check_software_path(software_path) |
| @@ -461,6 +461,7 @@ chmod +x {install_script} | |||
| 461 | compiler_mpi_info = self.check_compiler_mpi(compilers.keys(), compiler_mpi_info) | 461 | compiler_mpi_info = self.check_compiler_mpi(compilers.keys(), compiler_mpi_info) |
| 462 | if not compiler_mpi_info: return | 462 | if not compiler_mpi_info: return |
| 463 | software_info = self.get_software_info(software_path, compiler_mpi_info) | 463 | software_info = self.get_software_info(software_path, compiler_mpi_info) |
| 464 | + software_name = software_info.get('sname') | ||
| 464 | stype = software_info['type'] | 465 | stype = software_info['type'] |
| 465 | # get compiler name and version | 466 | # get compiler name and version |
| 466 | env_info = self.get_compiler_info(compilers, compiler_mpi_info) | 467 | env_info = self.get_compiler_info(compilers, compiler_mpi_info) |
| @@ -475,18 +476,21 @@ chmod +x {install_script} | |||
| 475 | 476 | ||
| 476 | # get install path | 477 | # get install path |
| 477 | logical_install_path = self.get_install_path(software_info, env_info) | 478 | logical_install_path = self.get_install_path(software_info, env_info) |
| 478 | - if not logical_install_path: return | 479 | + if not logical_install_path: |
| 479 | - if prefix: | 480 | + return |
| 480 | - real_install_path = logical_install_path.replace(self.SOFTWARE_PATH, os.path.join(prefix, "software"), 1) | 481 | + if prefix: |
| 481 | - else: | 482 | + real_install_path = logical_install_path.replace(self.SOFTWARE_PATH, os.path.join(prefix, "software"), 1) |
| 482 | - real_install_path = logical_install_path | 483 | + else: |
| 484 | + real_install_path = logical_install_path | ||
| 483 | # get install script | 485 | # get install script |
| 484 | self.install_package(abs_software_path, real_install_path, other_args) | 486 | self.install_package(abs_software_path, real_install_path, other_args) |
| 485 | - # create soft link from realpath to hpcrunner/software | 487 | + # create soft link from realpath to hpcrunner/software |
| 486 | - self.ensure_symlink(real_install_path, logical_install_path) | 488 | + self.ensure_symlink(real_install_path, logical_install_path) |
| 487 | # add install info | 489 | # add install info |
| 488 | self.add_install_info(software_info, logical_install_path) | 490 | self.add_install_info(software_info, logical_install_path) |
| 489 | # gen module file | 491 | # gen module file |
| 492 | + if software_name == 'hpckit': | ||
| 493 | + return | ||
| 490 | self.gen_module_file(logical_install_path, software_info, env_info) | 494 | self.gen_module_file(logical_install_path, software_info, env_info) |
| 491 | 495 | ||
| 492 | def install_depend(self): | 496 | def install_depend(self): |