USECASE1: Rescale CLI on Windows

Windows上からつかってみます。Rescale CLIをつかうことが目的です。

アプリケーションはAbaqusをもちいてみます。

スクリプトのダウンロード

下記をダウンロードしてください。

下記のソースコード例を参考に、ダウンロードしたスクリプトを修正します

修正箇所

11行目 ダウンロードしたい "ファイル名" を記述してください。
複数のファイルの指定はUNIX形式で指定するか、もしくはスペースで区切ってください。
e.g) download_files="*.out process_output.log"
12行目 rescale.jar をあなたが保存したパスに修正してください(パスの区切りは "¥" ではなく "/" を使用)
e.g) rescalecli = "C:/rescale/rescale.jar"

スクリプトの実行方法

以下を仮定して、Rescaleへジョブを投入します。

  • コア数: 8
  • 入力ファイル: s4d
  • 同一フォルダ内に、"s4d", "abaqus_rescale.py" が存在こととする

ジョブ投入

python abaqus_rescale.py job=s4d cpus=8 interactive

このファイルをバッチファイルにしても便利です。Rescale CLIを実行するフォルダでクリックすれば良いです。

ソースコード例

abaqus_rescale.py

# -*- coding: utf-8 -*- 
import os
import sys
 
################################################################ 
# download_files: files you want to download 
# rescalecli: the path you stored rescale.jar 
# runscript_name: this script is sent to rescale by rescale.jar 
#                 and executed by rescale platform. 
################################################################ 
download_files = "*.log"
rescalecli = "C:/rescale/rescale.jar"
runscript_name = "submit.sh"
 
################################################################ 
 
 
 
def create_run_script(abaqus_info, args, script_name):
 
    cpus = abaqus_info['cpus']
    job = abaqus_info['job']
    scratch = abaqus_info['scratch']
 
    cmd = "abaqus " + " ".join(args[1:])
 
    s = """#!/bin/sh -f
    #RESCALE_NAME=Abaqus_from_isight_%(job)s
    #RESCALE_CORES=%(cpus)s
    #RESCALE_CORE_TYPE=hpc-3
    #RESCALE_LOW_PRIORITY=true
    #RESCALE_ANALYSIS=abaqus
    #RESCALE_ANALYSIS_VERSION=2016.extended-pcmpi
    #USE_RESCALE_LICENSE
    %(cmd)s\n
    """ % locals()
 
    f = open(script_name'w') # 書き込みモードで開く 
    f.write(s.replace("    """)) # 
    f.close() # ファイルを閉じる 
 
def extract_abaqus_info(args):
    scratch = "${PWD}/tmp"
 
    for arg in args[1:]:
        if arg.startswith('cpus='):
            s = arg.split('=')
            np = s[1]
        elif arg.startswith('job='):
            s = arg.split('=')
            job = s[1]
        elif arg.startswith('scratch='):
            s = arg.split('=')
            scratch = s[1]
 
    flags = {}
    flags = { 
                "cpus" : np, 
                "job" : job, 
                "scratch" : scratch
            }
 
    return flags
 
def execute_rescalecli(rescalecli, token, runscript, download_files):
    cmd = """
    java -jar %(rescalecli)s \
    -X https://platform.rescale.jp/ submit \
    -p %(token)s -E -i %(runscript)s -f %(download_files)s
    """ % locals()
    print(cmd)
    chk = os.system( cmd )
 
    return chk
 
 
 
# setup your token from os-enviroment-variable 
for keyval in os.environ.items():
    if key == 'RESCALE_API_TOKEN':
        token = val
 
print(token)
 
# get arg-values & extract num_procs, jobname, scratch path 
args = sys.argv
abq_info = extract_abaqus_info(args)
create_run_script(abq_infoargsrunscript_name)
execute_rescalecli(rescaleclitokenrunscript_namedownload_files)