可选的HPC支持

可选的zoo内核hpc支持使您有机会使用ogc wps来调用OTB应用程序的远程执行。当前的实施依赖于 OpenSSH 以及 Slurm 调度程序。

注解

Slurm logo Slurm is an acronym for Simple Linux Utility for Resource Management. Learn more on official website .

要使用此HPC支持执行OGC WPS服务,应该使用OGC WPS 2.0.0版和异步请求。任何尝试同步执行HPC服务的操作都将失败,并显示消息“此类服务不支持同步模式”。zoo内核不是唯一负责执行的,它将等待hpc服务器上的执行结束,然后才能继续执行。此外,将数据从WPS服务器传输到集群并下载执行过程中产生的数据还需要一些时间。因此,当ogc wps客户机请求getcapabilities或describeProcess时,只有“异步执行”模式将出现在hpc服务的jobcontrolOptions属性中。

您可以在下面的序列图中看到在执行hpc服务期间,ogc wps服务器(zoo内核)、邮件守护进程(在ogc wps服务器上运行)、回调服务和hpc服务器之间的交互。虚线表示激活可选回调服务调用时的行为。例如,当回调服务失败时,这些调用是异步进行的,以降低它们对整个进程的影响。

到目前为止,回调服务不是一个WPS服务,而是一个独立的服务器。

HPC Support schema

安装和配置

按照下面描述的步骤激活动物园项目可选的HPC支持。

先决条件

安装步骤

动物园内核

使用如下所示的配置选项编译Zoo内核:

cd zoo-kernel
autoconf
./configure  --with-hpc=yes --with-ssh2=/usr --with-mapserver=/usr --with-ms-version=7
make
sudo make install

或者,您可以要求您的Zoo内核调用一个回调服务,该服务负责记录执行历史和生成的数据。在这种情况下,您可以添加 --with-callback=yes 配置命令的选项。

注解

如果您需要激活其他语言,例如python,请使用相应的选项。

FinalizeHP WPS服务

为了得到远程OTB应用程序在集群上结束的通知,应该调用FinalizeHP服务。它负责使用ssh连接到hpc服务器以运行 sacct 用于提取已运行的sbatch的详细信息的命令。如果 sacct 命令成功,并且服务不再在集群上运行,然后信息存储在包含 [henv] 节定义,服务连接到Unix域套接字(由最初通过slurm调度服务的zoo内核打开),以通知集群上运行的服务的结束。这使得初始的zoo内核可以通过下载在集群上的otb应用程序执行过程中产生的输出数据来继续执行。因此,应该在您的WPS服务器上构建和部署此服务。可以使用以下命令执行此操作。

cd zoo-service/utils/hpc
make
cp cgi-env/* /usr/lib/cgi-bin
mkdir -p /var/data/xslt/
cp xslt/updateExecute.xsl /var/data/xslt/

您还应该复制..注:

FinalizeHPC should be called from a daemon, responsible for reading
mails sent by the cluster to the WPS server.

配置步骤

主配置文件

当激活了HPC支持时,您可以通过添加 confId 和你平常一样 serviceType=HPC 在zcfg文件中。为了能够找到服务应该使用哪种配置,Zoo内核需要知道创建相关sbatch的选项。

此外,还可以定义多个配置,根据输入的大小在集群上运行OTB应用程序。您应该在与您的 ServiceType 两个栅格的支架 (preview_max_pixels )和矢量 (preview_max_features )输入。如果栅格或矢量数据集高于定义的限制,则 fullres_conf 将被使用,在其他情况下 preview_conf 将。

对于每种配置,您都将通过提供 ssh_hostssh_portssh_user 而且, ssh_key .此外,还应该通过定义 remote_data_path (存储数据的默认目录), remote_presistent_data_path (存储被视为共享数据的数据的目录,见下文)和, remote_work_path 用于存储本地创建的sbatch脚本的目录,然后由zoo内核上载。

此外,还可以使用多种选项来使用sbatch运行应用程序。您可以使用定义它们 jobscript_headerjobscript_bodyjobscript_footer 或通过使用 sbatch_options_<SBATCH_OPTION> 在哪里? <SBATCH_OPTION> 应该用一个真正的选项名替换,比如 workdir 在下面的示例中。为了创建sbatch文件,zoo内核创建一个文件,从指向的文件内容开始 jobscript_header (如果有,则在其他情况下设置默认标题),然后,在 sbatch_options_* 还有一个具体的: job-name ,然后, jobscript_body 添加(如果有的话,通常是为了加载所需的模块),然后zoo内核添加对otb应用程序的调用,然后,可以选择 jobscript_footer 添加(如果有)。

最后, remote_command_opt 应该包含您希望由 sacct 由FinalizeHP服务运行的命令。 billing_nb_cpu 用于计费目的,以定义使用特定选项(预览或完整)的成本。

除了具体的 HPC_<ID> 节以及相应的全文和预览,您应该在 [security] 使用的节 shared 参数来设置从中下载数据应视为共享的URL,这意味着即使此资源要求访问身份验证,任何经过身份验证的用户都将被允许访问缓存文件,即使缓存文件是由其他人创建的。此外,这个共享缓存在缓存文件名中不会包含任何身份验证信息,通常情况下是这样的。

[HPC_Sample]
preview_max_pixels=820800
preview_max_features=100000
preview_conf=hpc-config-2
fullres_conf=hpc-config-1

[hpc-config-1]
ssh_host=mycluster.org
ssh_port=22
ssh_user=cUser
ssh_key=/var/www/.ssh/id_rsa.pub
remote_data_path=/home/cUser/wps_executions/data
remote_persitent_data_path=/home/cUser/wps_executions/datap
remote_work_path=/home/cUser/wps_executions/script
jobscript_header=/usr/lib/cgi-bin/config-hpc1_header.txt
jobscript_body=/usr/lib/cgi-bin/config-hpc1_body.txt
sbatch_options_workdir=/home/cUser/wps_executions/script
sbatch_substr=Submitted batch job
billing_nb_cpu=1
remote_command_opt=AllocCPUS,AllocGRES,AllocNodes,AllocTRES,Account,AssocID,AveCPU,AveCPUFreq,AveDiskRead,AveDiskWrite,AvePages,AveRSS,AveVMSize,BlockID,Cluster,Comment,ConsumedEnergy,ConsumedEnergyRaw,CPUTime,CPUTimeRAW,DerivedExitCode,Elapsed,Eligible,End,ExitCode,GID,Group,JobID,JobIDRaw,JobName,Layout,MaxDiskRead,MaxDiskReadNode,MaxDiskReadTask,MaxDiskWrite,MaxDiskWriteNode,MaxDiskWriteTask,MaxPages,MaxPagesNode,MaxPagesTask,MaxRSS,MaxRSSNode,MaxRSSTask,MaxVMSize,MaxVMSizeNode,MaxVMSizeTask,MinCPU,MinCPUNode,MinCPUTask,NCPUS,NNodes,NodeList,NTasks,Priority,Partition,QOS,QOSRAW,ReqCPUFreq,ReqCPUFreqMin,ReqCPUFreqMax,ReqCPUFreqGov,ReqCPUS,ReqGRES,ReqMem,ReqNodes,ReqTRES,Reservation,ReservationId,Reserved,ResvCPU,ResvCPURAW,Start,State,Submit,Suspended,SystemCPU,Timelimit,TotalCPU,UID,User,UserCPU,WCKey,WCKeyID

[hpc-config-2]
ssh_host=mycluster.org
ssh_port=22
ssh_user=cUser
ssh_key=/var/www/.ssh/id_rsa.pub
remote_data_path=/home/cUser/wps_executions/data
remote_persitent_data_path=/home/cUser/wps_executions/datap
remote_work_path=/home/cUser/wps_executions/script
jobscript_header=/usr/lib/cgi-bin/config-hpc2_header.txt
jobscript_body=/usr/lib/cgi-bin/config-hpc2_body.txt
sbatch_options_workdir=/home/cUser/wps_executions/script
sbatch_substr=Submitted batch job
billing_nb_cpu=4
remote_command_opt=AllocCPUS,AllocGRES,AllocNodes,AllocTRES,Account,AssocID,AveCPU,AveCPUFreq,AveDiskRead,AveDiskWrite,AvePages,AveRSS,AveVMSize,BlockID,Cluster,Comment,ConsumedEnergy,ConsumedEnergyRaw,CPUTime,CPUTimeRAW,DerivedExitCode,Elapsed,Eligible,End,ExitCode,GID,Group,JobID,JobIDRaw,JobName,Layout,MaxDiskRead,MaxDiskReadNode,MaxDiskReadTask,MaxDiskWrite,MaxDiskWriteNode,MaxDiskWriteTask,MaxPages,MaxPagesNode,MaxPagesTask,MaxRSS,MaxRSSNode,MaxRSSTask,MaxVMSize,MaxVMSizeNode,MaxVMSizeTask,MinCPU,MinCPUNode,MinCPUTask,NCPUS,NNodes,NodeList,NTasks,Priority,Partition,QOS,QOSRAW,ReqCPUFreq,ReqCPUFreqMin,ReqCPUFreqMax,ReqCPUFreqGov,ReqCPUS,ReqGRES,ReqMem,ReqNodes,ReqTRES,Reservation,ReservationId,Reserved,ResvCPU,ResvCPURAW,Start,State,Submit,Suspended,SystemCPU,Timelimit,TotalCPU,UID,User,UserCPU,WCKey,WCKeyID

[security]
attributes=Cookie,Cookies
hosts=*
shared=myhost.net/WCS

您可以看到下面的示例 jobscript_header 文件。

#!/bin/sh
#SBATCH --ntasks=1
#SBATCH --ntasks-per-node=1
#SBATCH --exclusive
#SBATCH --distribution=block:block
#SBATCH --partition=partName
#SBATCH --mail-type=END              # Mail events (NONE, BEGIN, END, FAIL, ALL)
#SBATCH --mail-user=user@wps_server.net   # Where to send mail

您可以看到下面的示例 jobscript_body 文件。

# Load all the modules
module load cv-standard
module load cmake/3.6.0
module load gcc/4.9.3
module load use.own
module load OTB/6.1-serial-24threads

在casse中,您激活了回调服务,那么您还应该 [callback] 在其中定义 url 要调用回调服务, prohibited 列出不需要调用回调sercvice的服务(如果有)和, template 指向本地 updateExecute.xsl 用于替换引用本地发布的OGC WFS/WCS Web服务的值提供的任何输入的文件。此执行请求提供给回调服务。

[callback]
url=http://myhost.net:port/callbackUpdate/
prohibited=FinalizeHPC,Xml2Pdf,DeleteData
template=/home/cUser/wps_dir/updateExecute.xsl

OGC WPS服务元数据

要生成与WPS服务的元数据定义对应的zcfg文件,可以使用otb2zcfg工具来生成它们。您需要更换 serviceType=OTB 通过 serviceType=HPC 或者,添加一行包含 confId=HPC_Sample 例如。

请参考 otb2zcfg 了解如何使用此工具的文档。

使用HPC支持,当您定义一个输出时,将自动为定义的输出创建1到3个内部输出:

download_link

下载到生成输出的URL

wms_link

用于访问此输出的OGC WMS的URL(仅在以下情况下) useMapserver=true

wcs_link/wfs_link

用于访问此输出的OGC WCS或WFS的URL(仅在以下情况下) useMapserver=true

您可以在下面看到一个输出节点的示例,该输出节点是由一个名为out并键入为地理图像的输出定义产生的。

<wps:Output>
  <ows:Title>Outputed Image</ows:Title>
  <ows:Abstract>Image produced by the application</ows:Abstract>
  <ows:Identifier>out</ows:Identifier>
  <wps:Output>
    <ows:Title>Download link</ows:Title>
    <ows:Abstract>The download link</ows:Abstract>
    <ows:Identifier>download_link</ows:Identifier>
    <wps:ComplexData>
      <wps:Format default="true" mimeType="image/tiff"/>
      <wps:Format mimeType="image/tiff"/>
    </wps:ComplexData>
  </wps:Output>
  <wps:Output>
    <ows:Title>WMS link</ows:Title>
    <ows:Abstract>The WMS link</ows:Abstract>
    <ows:Identifier>wms_link</ows:Identifier>
    <wps:ComplexData>
      <wps:Format default="true" mimeType="image/tiff"/>
      <wps:Format mimeType="image/tiff"/>
    </wps:ComplexData>
  </wps:Output>
  <wps:Output>
    <ows:Title>WCS link</ows:Title>
    <ows:Abstract>The WCS link</ows:Abstract>
    <ows:Identifier>wcs_link</ows:Identifier>
    <wps:ComplexData>
      <wps:Format default="true" mimeType="image/tiff"/>
      <wps:Format mimeType="image/tiff"/>
    </wps:ComplexData>
  </wps:Output>
</wps:Output>