已合并
规范模板相关路径 #1088
helloworld664创建于 1月20日
规范模板相关路径 #1088
已合并
helloworld664创建于 1月20日
共 2 个文件变更+64-49
MREADME.md+46-35
@@ -16,7 +16,9 @@ HPC被喻为是IT行业“金字塔上的明珠”,其部署、编译、运行
16# 贾维斯使用指导16# 贾维斯使用指导
17 17 
18## 下载贾维斯18## 下载贾维斯
19+ 
19执行如下命令下载贾维斯20执行如下命令下载贾维斯
21+ 
20```22```
21git clone https://gitcode.com/openeuler/hpcrunner.git23git 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.sh52./proxy.sh
49```53```
50 54 
51步骤2:初始环境变量,并检查环境 55步骤2:初始环境变量,并检查环境
52-执行初始化脚本,同步检查配置环境并下载安装基础依赖,<font color="red">&zwnj;**确保初始化成功,无ERROR回显再继续执行**&zwnj;</font>56+执行初始化脚本,同步检查配置环境并下载安装基础依赖,<font color="red">&zwnj;**确保初始化成功,无ERROR回显再继续执行**
57+&zwnj;</font>
58+ 
53```59```
54source init.sh60source init.sh
55```61```
@@ -60,40 +66,45 @@ source init.sh
60```66```
61./jarvis -use templates/xapp.config67./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 -d91./jarvis -d
84```92```
85 93 
86步骤5:安装应用依赖94步骤5:安装应用依赖
95+ 
87```96```
88./jarvis -dp97./jarvis -dp
89```98```
90 99 
91步骤6:编译应用100步骤6:编译应用
101+ 
92```102```
93./jarvis -b103./jarvis -b
94```104```
95 105 
96步骤7:运行应用106步骤7:运行应用
107+ 
97```108```
98./jarvis -r109./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- return431+ 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 exists458 # 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: return462 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 version466 # 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 path477 # 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: return479+ 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_path483+ else:
484+ real_install_path = logical_install_path
483 # get install script485 # 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/software487+ # 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 info489 # 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 file491 # 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):