7. スクリプト言語¶
スーパーコンピュータ「富岳」 では、OSSのスクリプト言語を計算ノードに用意しています。
7.1. 概要¶
スーパーコンピュータ「富岳」 では以下のOSSのスクリプト言語を、計算ノードで利用することができます。
Python2
Python3
Ruby
注意
上記スクリプト言語環境を構築する際、富士通コンパイラでコンパイルするために必要な修正を一部に実施しています。
これら OSS は原則として、インストールパス等の環境情報のみ提供します。
実行に必要なインストールパスの設定は OSS ごとに、modulefile を用意しています。 利用方法は、後述のジョブスクリプト例を参考にしてください。
7.2. Python¶
Python2、および、Python3 を利用することができます。
7.2.1. Python2¶
Python2の利用方法を示します。
7.2.1.1. パッケージ¶
Python2 には、以下のパッケージを追加しています。
バージョン |
追加パッケージ |
---|---|
Python 2.7.15 |
|
参考
NumPy、SciPy には、fjlapackexsve(BLAS, LAPACK スレッド並列版富士通ライブラリ)を使用しています。
7.2.1.2. 環境変数の設定と利用方法¶
Python2の実行に必要な環境変数の設定はモジュールファイル(Python2-CN/2.7.15-Mar)を利用します。 Python2-CN/2.7.15-Marはデフォルトに設定されています。
以下にジョブスクリプト例を示します。
Python2 コマンドによる実行
#!/bin/bash
#PJM -L "node=1"
#PJM -L "rscgrp=small"
#PJM -L "elapse=10:00"
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#PJM -g groupname
#PJM -S
module load Python2-CN
export FLIB_CNTL_BARRIER_ERR=FALSE
# execute job
python2 sample.py
mpi4py を使用して実行する場合(mpiexec コマンドを使用します)
#!/bin/bash
#PJM -L "node=2"
#PJM -L "rscgrp=small"
#PJM -L "elapse=10:00"
#PJM --mpi "proc=8"
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#PJM -g groupname
#PJM -S
module load Python2-CN
export FLIB_CNTL_BARRIER_ERR=FALSE
export LD_PRELOAD=/usr/lib/FJSVtcs/ple/lib64/libpmix.so # mpi4py実行時に必要
# execute job
mpiexec -n 8 python2 mpi-sample.py
7.2.2. Python3¶
注釈
新しい版のPythonはSpackで提供しています。
Spackで提供するパッケージ(py-*)は、Spackで提供するPythonと組み合わせて使用してください。
OSSの利用を参照ください。
Python3の利用方法を示します。
7.2.2.1. パッケージ¶
Python3 には、以下のパッケージを追加しています。
バージョン |
追加パッケージ |
---|---|
Python 3.6.8 |
|
参考
NumPy、SciPy には、fjlapackexsve(BLAS, LAPACK スレッド並列版富士通ライブラリ)を使用しています。
7.2.2.2. 環境変数の設定と利用方法¶
Python3の実行に必要な環境変数の設定はモジュールファイル(Python3-CN/3.6.8-Mar)を利用します。 Python3-CN/3.6.8-Marはデフォルトに設定されています。
以下にジョブスクリプト例を示します。
Python3 コマンドによる実行
#!/bin/bash
#PJM -L "node=1"
#PJM -L "rscgrp=small"
#PJM -L "elapse=10:00"
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#PJM -g groupname
#PJM -S
module load Python3-CN
export FLIB_CNTL_BARRIER_ERR=FALSE
# execute job
python3 sample.py
mpi4py を使用して実行する場合(mpiexec コマンドを使用します)
#!/bin/bash
#PJM -L "node=2:noncont"
#PJM -L "rscgrp=small"
#PJM -L "elapse=10:00"
#PJM --mpi "proc=8"
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#PJM -g groupname
#PJM -S
module load Python3-CN
export FLIB_CNTL_BARRIER_ERR=FALSE
export LD_PRELOAD=/usr/lib/FJSVtcs/ple/lib64/libpmix.so # mpi4py実行時に必要
# execute job
mpiexec -n 8 python3 mpi-sample.py
7.3. Ruby¶
次のバージョンのRubyをインストールしています。
バージョン |
---|
Ruby 2.6.5 |
7.3.1. 環境変数の設定と利用方法¶
Rubyの実行に必要な環境変数の設定はモジュールファイル(Ruby-CN/2.6.5-Mar)を利用します。 Ruby-CN/2.6.5-Marはデフォルトに設定されています。
以下にジョブスクリプト例を示します。
Ruby コマンドによる実行
#!/bin/bash
#PJM -L "node=1"
#PJM -L "rscgrp=small"
#PJM -L "elapse=10:00"
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#PJM -g groupname
#PJM -S
module load Ruby-CN
# execute job
ruby sample.rb
7.4. Java¶
Javaコンパイラの利用方法を示します。
7.4.1. コンパイル環境設定¶
Javaコンパイラの利用環境は、modulefile を利用して設定します。
利用する場合は、翻訳前に以下を実行してください。
ログインノードで翻訳する場合
Spackで提供しているopenjdkを使用します。 Spackの使用方法は富岳ウェブサイトの「富岳 Spack 利用ガイド」を参照ください。
[_LNlogin]$ . /vol0004/apps/oss/spack/share/spack/setup-env.sh # Spackの環境設定 [_LNlogin]$ spack load openjdk arch=linux-rhel8-skylake_avx512 # OpenJDKの環境設定
計算ノードで翻訳する場合
[_LNlogin]$ module load OpenJDK-CN
利用できる環境は、以下のとおりです。
ノード名
ソフトウェア名
言語
バージョン
コマンド
ログインノード
OpenJDK
Java
11.0.2
javac/mpijavac
計算ノード
OpenJDK
Java
11u
javac/mpijavac
7.4.2. コンパイルコマンド¶
mpijavacを使用したJavaプログラムのコンパイル例を示します。
通常、Javaプログラムの翻訳には、javacコマンドを利用しますが、MPIプログラムの翻訳には、MPIプログラム用の翻訳コマンドとして、mpijavacコマンドを利用します。
MPIライブラリを使用する場合
[_LNlogin]$ mpijavac [コンパイルオプション] ソースファイル名
MPIライブラリを使用しない場合
[_LNlogin]$ javac [コンパイルオプション] ソースファイル名
ログインノード上で使用するコマンドと計算ノード上で使用するコマンドの翻訳コマンド名は同じです。
翻訳コマンド
種別
コマンド名
MPIライブラリ
クロスコンパイラ
mpijavac
使用する
javac
使用しない
ネイティブコンパイラ
mpijavac
使用する
javac
使用しない
注釈
mpijavacを利用した場合、実行は計算ノードのみで可能です。ログインノードでは実行できません。
主なコンパイルオプションを示します。
コンパイルオプション
説明
--showme
MPIプログラムの翻訳コマンドがjavacコマンドを呼び出すときの呼出し行を表示します。実際には翻訳処理は行いません。
--verbose
MPIプログラムの翻訳コマンドがjavacコマンドを呼び出すときの呼出し行を表示します。翻訳処理も行います。
--help、-help、-h
ヘルプメッセージを表示します。実際には翻訳処理は行いません。
avac_arguments
javacコマンドに渡すオプションを指定します。
参考
mpijavacコマンドは、javacコマンドのラッパーコマンドになっており、内部的にJDKのjavacコマンドを呼び出します。このため、mpijavacコマンドは、javacコマンドのオプションをそのまま指定することができます。
mpijavacコマンドは、MPIライブラリのクラスパスを設定せずにJavaプログラムを翻訳できます。
Javaプログラムの翻訳時、利用者が用意したjarファイルを使用するには、環境変数
CLASSPATH
、または、javacコマンドの-classpath
オプションで、対象となるjarファイルのパスを設定する必要があります。環境変数
CLASSPATH
と-classpath
オプションの両方を設定した場合、-classpath
オプションが優先されます。
7.4.3. 実行方法¶
javac 、および、mpijavacでコンパイルしたJavaプログラム「javasample.class」の実行方法の例を示します。
【逐次実行】
#!/bin/bash #PJM -L "node=1" #PJM -L "rscgrp=small" #PJM -L "elapse=10:00" #PJM -x PJM_LLIO_GFSCACHE=/vol000N #PJM -g groupname #PJM -s module load OpenJDK-CN numactl --cpunodebind 4 --membind 4 java javasample
【MPI実行】
#!/bin/bash #PJM -L "node=2" #PJM -L "rscgrp=small" #PJM -L "elapse=10:00" #PJM --mpi "proc=8" #PJM -x PJM_LLIO_GFSCACHE=/vol000N #PJM -g groupname #PJM -s module load OpenJDK-CN export PLE_MPI_STD_EMPTYFILE=off # 実行時に標準出力/標準エラー出力への出力がない場合はファイルを作成しない export OMPI_MCA_plm_ple_memory_allocation_policy=bind_local mpiexec java javasample