7. スクリプト言語

スーパーコンピュータ「富岳」 では、OSSのスクリプト言語を計算ノードに用意しています。

注釈

OSSの提供はSpackに移行しています。本章の記事はSpackに移行する前の旧版のOSS情報です。

OSSの利用を参照ください。

7.1. 概要

スーパーコンピュータ「富岳」 では以下のOSSのスクリプト言語を、計算ノードで利用することができます。

  • Python2

  • Python3

  • Ruby

注意

  • 上記スクリプト言語環境を構築する際、富士通コンパイラでコンパイルするために必要な修正を一部に実施しています。

  • これら OSS は原則として、インストールパス等の環境情報のみ提供します。

  • 実行に必要なインストールパスの設定は OSS ごとに、modulefile を用意しています。 利用方法は、後述のジョブスクリプト例を参考にしてください。

7.2. Python

Python2、および、Python3 を利用することができます。

7.2.1. Python2

注釈

Python2 は終了しています。

https://www.python.org/doc/sunset-python-2/ を参照ください。

Python2の利用方法を示します。

7.2.1.1. パッケージ

Python2 には、以下のパッケージを追加しています。

バージョン

追加パッケージ

Python 2.7.15

  • NumPy

  • SciPy

  • mpi4py

  • virtualenv

参考

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

  • mpi4py

参考

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