Application Definition 作成の基本

Mai Hashimoto_22039
Mai Hashimoto_22039
Altair Employee
edited February 2023 in Altair HPCWorks - 日本語

Application Definition作成の基本を、ご紹介いたします。

 

例として、Optistruct のApplication Definitionを作成し、Access WebからOptistructのジョブ投入ができるように設定します。

Optistructの実行コマンドラインは、/app/hw2021.2/altair/scripts/optistruct <Input File> -ncpu <No. of CPUS> -len <Memory>になるように構成します。

画面上で独自のオプション付加を許可し、ユーザーが必要に応じてオプションを付加することができます。標準出力と標準エラーもファイルに保存するようにします。

ジョブ投入の画面イメージは、以下のようになります。Show All をクリックすると、メモリ等の選択項目も表示されれるようにします。

 

必要なファイルは、以下の4つのファイルです。構築したい画面構成によっては利用するファイルが異なります。

 

  • セントラルレポジトリ
    • site-config.xml ($PAS_REPO/targets/localhost/repository/site-config.xml)
  • Optistruct用ファイル
    • app-inp-<ApplicationId>.xml ($PAS_REPO/targets/localhost/repository/applications/<ApplicationId>/app-inp-<ApplicationId>.xml)
    • app-conv-<ApplicationId>.xml ($PAS_REPO/targets/localhost/repository/applications/<ApplicationId>/app-conv-<ApplicationId>.xml)
    • start.py ($PAS_REPO/targets/localhost/repository/applications/<ApplicationId>/runtime/start.py


以下に4つのファイルについて、簡単にご説明します。

  • セントラルレポジトリ site-config.xml
    site-config.xmlはセントラルレポジトリなので他アプリケーション(Optistruct以外のアプリケーション)の設定項目も含まれます。アプリケーションの実行パスを、バージョンごとに定義します。以下のように記述します。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<SiteConfiguration xmlns=http://schemas.altair.com/pbs/2007/01/site-config xmlns:site-config=http://schemas.altair.com/pbs/2007/01/site-config xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=http://schemas.altair.com/pbs/2007/01/site-config ../schemas/site-config.xsd>

  <Applications>

  ** 他アプリケーションも同様に、ここに書くことができます。**

     <Application id="Optistruct">

      <ApplicationVersions>

        <ApplicationVersion>

          <Option>2021.2</Option>

          <Executable>/app/hw2021.2/altair/scripts/optistruct</Executable>

        </ApplicationVersion>

      </ApplicationVersions>

    </Application>

  ** 他アプリケーションも同様に、ここに書くことができます。**

  </Applications>

  <JobProjects id="BILLING_ACCOUNT"/>

  <Policies/>

</SiteConfiguration>
  • Optistruct用ファイル app-inp-Optistruct.xml
    このファイルでは、ジョブ投入画面の入力項目を定義します。

<?xml version="1.0" encoding="UTF-8"?>

<TemplateApplicationInput xmlns=http://schemas.altair.com/pbs/2007/02/app-def xmlns:xi=http://www.w3.org/2001/XInclude xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:schemaLocation=http://schemas.altair.com/pbs/2007/02/app-def ../../schemas/app-def.xsd>

 

  <ApplicationId>Optistruct</ApplicationId>

  <ApplicationName>Optistruct</ApplicationName>

  <ApplicationExtension>.fem</ApplicationExtension>

 

  <ArgumentChoice>

    <ArgumentStringEnumerated>

      <Name>VERSION</Name>

      <Description>Version of application to use</Description>

      <DisplayName>Version</DisplayName>

      <InputRequired>true</InputRequired> ** 必須項目にしたい場合、InputRequiredtrueにします。**

      <xi:include href="site-config.xml" xpointer="xpath1(//Application[@id='Optistruct']/ApplicationVersions//Option)"/>

    </ArgumentStringEnumerated>

  </ArgumentChoice>

 

  <ArgumentChoice>

    <ArgumentString>

      <Name>JOB_NAME</Name>

      <Description>Name of the job</Description>

      <DisplayName>Job Name</DisplayName>

      <InputRequired>false</InputRequired>

    </ArgumentString>

  </ArgumentChoice>

 

  <ArgumentChoice>

    <ArgumentInt>

      <Name>NCPUS</Name>

      <Description>Number of CPUS requested</Description>

      <DisplayName>No. of CPUS</DisplayName>

      <InputRequired>true</InputRequired>

      <LowerBound>1</LowerBound>

      <UpperBound>8</UpperBound>

      <DefaultValue>1</DefaultValue> ** デフォルト値を定義しておくこともできます。**

    </ArgumentInt>

  </ArgumentChoice>

 

  <ArgumentChoice>

    <ArgumentInt>

      <Name>MEMORY</Name>

      <Description>Requested memory</Description>

      <DisplayName>Memory</DisplayName>

      <InputRequired>false</InputRequired>

      <Option>1000</Option>

      <Option>2000</Option>

      <Option>4000</Option>

      <Option>8000</Option>

      <DefaultValue>8000</DefaultValue>

    </ArgumentInt>

  </ArgumentChoice>

 

  <ArgumentChoice>

    <ArgumentFileName>

      <Name>MASTER_FILE</Name>

      <Description>Input file</Description>

      <DisplayName>Input File</DisplayName>

      <InputRequired>true</InputRequired>

    </ArgumentFileName>

  </ArgumentChoice>

 

  <ArgumentChoice>

    <ArgumentFileNameMulti>

      <Name>INCLUDE_FILES</Name>

      <Description>Additional files to include.</Description>

      <DisplayName>Include Files</DisplayName>

      <InputRequired>false</InputRequired>

    </ArgumentFileNameMulti>

  </ArgumentChoice>

 

  <ArgumentChoice>

    <ArgumentString>

      <Name>EXTRA_ARGUMENTS</Name>  ** Optistructコマンドへのオプションの付加 **

      <Description>Pass command line arguments.</Description>

      <DisplayName>Extra Arguments</DisplayName>

      <InputRequired>false</InputRequired>

    </ArgumentString>

  </ArgumentChoice>

 

  <ArgumentChoice>

    <ArgumentDirectoryName>

      <Name>SUBMISSION_DIRECTORY</Name>

      <Description>Result files will be placed here</Description>

      <DisplayName>Output directory</DisplayName>

      <InputRequired>true</InputRequired>

    </ArgumentDirectoryName>

  </ArgumentChoice>

 

</TemplateApplicationInput>
  • Optistruct用ファイル app-conv-Optistruct.xml
    ジョブ投入画面で入力した値をもとに、実行モジュールとそのオプションの定義、PBSジョブ実行のために必要なリソースを構成します。

<?xml version="1.0" encoding="UTF-8"?>

<TemplateApplicationConverter xmlns=http://schemas.altair.com/pbs/2007/02/app-conv xmlns:app-def=http://schemas.altair.com/pbs/2007/02/app-def xmlns:jsdl=http://schemas.ggf.org/jsdl/2005/11/jsdl xmlns:jsdl-hpcp=http://schemas.ggf.org/jsdl/2006/07/jsdl-hpcp xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=http://schemas.altair.com/pbs/2007/02/app-conv ../../schemas/app-conv.xsd>

 

  <ApplicationId>Optistruct</ApplicationId>

  <ApplicationName>Optistruct</ApplicationName>

 

  <HPCProfileApplication>

    <jsdl-hpcp:Executable>$PYTHONPATH</jsdl-hpcp:Executable>

    <jsdl-hpcp:Argument>runtime/start.py</jsdl-hpcp:Argument>

  </HPCProfileApplication>

 

  <jsdl:Resources> ** PBSジョブとしてのリソース要求**

    <TotalCPUCount>

      <Exact>$NCPUS</Exact>

    </TotalCPUCount>

 

    <TotalPhysicalMemory>

      <Exact>$MEMORY</Exact>

    </TotalPhysicalMemory>

  </jsdl:Resources>

 

  <jsdl:DataStaging>

    <jsdl:FileName>name($MASTER_FILE)</jsdl:FileName>

    <jsdl:CreationFlag>overwrite</jsdl:CreationFlag>

    <jsdl:Source>

      <jsdl:URI>$MASTER_FILE</jsdl:URI>

    </jsdl:Source>

  </jsdl:DataStaging>

 

  <jsdl:DataStaging>

    <jsdl:FileName>name($INCLUDE_FILES)</jsdl:FileName>

    <jsdl:CreationFlag>overwrite</jsdl:CreationFlag>

    <jsdl:Source>

      <jsdl:URI>$INCLUDE_FILES</jsdl:URI>

    </jsdl:Source>

  </jsdl:DataStaging>

 

  <jsdl:DataStaging>

    <jsdl:FileName>*</jsdl:FileName>

    <jsdl:CreationFlag>overwrite</jsdl:CreationFlag>

    <jsdl:Target>

      <jsdl:URI>$SUBMISSION_DIRECTORY</jsdl:URI>

    </jsdl:Target>

  </jsdl:DataStaging>

 

</TemplateApplicationConverter>
  • Optistruct用ファイル start.py
    ジョブ投入時に実行されるファイルです。

import os

import sys

import re

 

os.environ['ALTAIR_LICENSE_PATH']="6200@licserver"

 

master_file = os.path.basename(os.environ['PAS_MASTER_FILE'])

python_path = os.environ['PAS_PYTHON_PATH']

optistruct_exe = os.environ['PAS_EXECUTABLE']

 

if 'PAS_EXTRA_ARGUMENTS' in os.environ:

 optistruct_exe += os.environ['PAS_EXTRA_ARGUMENTS']

 

required_mem = os.environ['PAS_MEMORY']

required_core = os.environ['PAS_NCPUS']

 

pas_job_name = os.environ["PAS_JOB_NAME"]

pas_application = os.environ["PAS_APPLICATION"]

pbs_job_dir = os.environ["PBS_JOBDIR"]

 

logfile_basename = pas_application + "-" + pas_job_name ** 標準出力と標準エラーを出力するファイル名の定義 **

stdout_logfile = logfile_basename + "-stdout.log"

stderr_logfile = logfile_basename + "-stderr.log"

 

cmd = optistruct_exe + ' ' + master_file + ' -ncpu ' + required_core + ' -len ' + required_mem

cmd += ' > ' + stdout_logfile + ' 2> ' + stderr_logfile

 

#run application

print (cmd)

os.system (cmd)

 

以上、4つのファイルのご説明です。

詳細については、各バージョンのDiving Into Application Definition Guide をご参照ください。