本項では初心者のかた、SQUIDを初めて利用される方を対象に、ログインから、Fortranのサンプルプログラム"sample.f90"を作成、SQUIDの汎用CPUノードで実行し、結果を確認するまでの流れを簡単にご説明いたします。
1.ログイン
計算機は、基本的には遠隔地から利用することになります。お手持ちのパソコンから、当センターのフロントエンドノードに接続します。フロントエンドノードは計算機を利用するための窓口となっており、プログラム作成や、計算機での実行指示、結果確認などを行います。通常の利用方法では計算機自身に直接接続することはありません。
SQUIDへの接続方法には2段階認証が必要となり、初めてログインする際には2段階認証の登録が必要となります。
以下のページでログイン方法について詳しく解説していますので、まずは以下のページをご覧ください。
2.環境の設定
SQUIDの計算ノードは、汎用CPUノード、GPUノード、ベクトルノードという3種類のノードに別れています。どのノードを利用するかによって必要な環境設定が異なりますが、SQUID では environment modules というツールにより環境設定を簡単に行うことが可能です。
例えば、SQUIDにログインして以下のコマンドを実行することで、汎用CPUノード向けの環境に設定されます。
% module load BaseCPU
"BaseCPU"を入れ替えることで、他のノード向けの環境設定を行うことができます。
汎用CPUノード | GPUノード | ベクトルノード |
---|---|---|
BaseCPU | BaseGPU | BaseVEC |
3.プログラムの作成
計算機を利用するためには、まずプログラムを作成する必要があります。
世界には様々なプログラム言語があり、SQUIDでも様々な言語を利用することができます。主要な言語としてはFortran言語とC言語、C++言語などが利用可能です。
プログラムは以下の方法で作成することができます。
フロントエンドノード上で作成する
フロントエンドノードでプログラム(ソースコード)を作成・編集・修正するには、emacsやviなどのエディタを用いて行います。エディタの利用方法は以下に記載しております。
エディタ利用方法
プログラム作成例
emacsを使って、Fortranプログラム”sample.f90”を作成します。
1. emacsを起動し、sample.f90を作成します
フロントエンドノードで、以下のコマンドを入力してください。
% emacs sample.f90
2. sample.f90を編集します
以下のように入力してください。
1 2 3 |
program hello print *, 'Hello World!' end program hello |
コピーなどの編集操作はコマンドを使って行うことが可能ですので、徐々に覚えていくとよいでしょう。emacsが固まってしまった場合は、まずCtrl-gコマンドを入力することをお勧めします。
3. ファイルを保存します
Ctrl-x、Ctrl-sを順番に入力してください。
4. emacsを終了します
Ctrl-x、Ctrl-cを順番に入力してください。
4.コンパイル
サンプルプログラムを作成しましたが、そのままではただ文字列を記しただけの状態なので、計算機はどのように実行してよいかわかりません。まず作成したプログラムを、計算機上で実行できる形式に生成する必要があります。この生成の過程を「コンパイル」と呼びます。
※厳密には様々な呼び方があります。詳細は下記ページの「コンパイル」をご覧ください。
SQUIDではintel コンパイラ、NVIDIAコンパイラ、NECコンパイラ、GNU コンパイラ(それぞれC/C++/Fortran)など様々なコンパイラを備えており、利用するノードに合わせてこれらを使い分けることになります。
コンパイル例
サンプルプログラムをintel Fortranコンパイラを使ってコンパイルします。
1. コンパイルの実行
フロントエンドで以下のコマンドを入力してください。
※手順2で汎用CPUノード向けの環境設定を行っている必要があります。
% ifort sample.f90
2. 実行結果の確認
エラーが表示されず、a.outというファイルが生成されていれば、コンパイルが成功したことを意味しています。
※エラーが表示されている場合、プログラムを見なおしましょう。よくある間違いとしてはスペルミスが挙げられます。
【参考情報】
5.プログラムの実行
計算機でプログラムを実行させる方法は、以下の2通りの方法があります。
・バッチ処理
コンピュータにまとめて処理を命令し実行する方法です。
処理の命令が終われば、ログアウトしても構いません。
基本的には、バッチ処理での実行をお願いいたします。
・インタラクティブ処理
コマンド等を通してコンピュータに直接命令し、リアルタイムで処理を実行する方法です。操作として手軽です。
バッチ処理では、計算機に実行させたい処理を「ジョブスクリプト」に記述し、実行を要求します。
この「ジョブスクリプト」が命令となり、計算機が実行する仕組みとなっています。
「ジョブスクリプト」で実行を要求すると、すぐに計算が始まるわけではありません。計算機は沢山の人が同時利用しておりますので、混雑している状況であれば、待たされることもあります。当センターでは「スケジューラ」というシステムが、プログラムの実行の順序を管理しています。
6.ジョブスクリプトの作成
ジョブスクリプトは2段構成となっており、
・利用する計算機のリソースや環境の指定(#PBSから始まる個所)
・計算機に実行させる処理の記述(シェルスクリプト)
に分かれます。
以下のジョブスクリプトの例を示します。
1 2 3 4 5 6 7 |
#!/bin/bash #PBS -q SQUID #PBS --group=【グループ名】 #PBS -l elapstim_req=1:00:00 module load BaseCPU cd $PBS_O_WORKDIR ./a.out |
#PBSから始まる行が、利用する計算機のリソースや環境の指定となります。
それ以外は、計算機に実行させる処理の記述(シェルスクリプト)となります。
#PBS –q SQUIDは、投入する計算機資源とその使い方を指定をしています。
ジョブスクリプトでは、ジョブクラスで計算機資源を指定する必要があり、
ここではSQUIDに小規模なジョブを投入するための「SQUID」というジョブクラスに対して、実行を要求しています。
ジョブクラスは、用途に応じて分かれておりますのでご注意ください。
「SQUID」は受け付け用のジョブクラスとなっておりまして、投入後に実行用のジョブクラスに自動的に転送されるようになっております。
他のジョブクラスには例えば、他のジョブと同じノードを共有して実行する「SQUID-S」、動作確認など短時間のジョブを実行するため「DBG」などが存在します。
詳細は下記をご覧ください。
SQUID ジョブクラス表
#PBS --group=【グループ名】は所属するグループを指定しています。【グループ名】の部分には自身のグループ名を記述してください。自身のグループを確認するには、id コマンドを実行します。
% id
uid=11111(u6a123) gid=12345(G12345) groups=12345(G12345)
上記のように表示された場合、"G12345"が自身の所属するグループ名になります。
#PBS –l elapstim_req=1:00:00は、計算機資源量の指定をしています。
ここでは経過時間(elapstim_req)1時間という指定となっています。SQUIDにおいては、経過時間のみを指定すればよいでしょう。
計算が実行されているときに、指定した資源量の値を超えると、計算は停止してしまいます。計算に応じた最適な値を見つけ、設定していく必要があります。
module load BaseCPUは、手順2で実行した環境設定コマンドと同じコマンドです。ジョブスクリプトでも記述する必要があります。
cd $PBS_O_WORKDIRは「ジョブ投入時のディレクトリに移動する」といった操作を行います。$PBS_O_WORKDIRは環境変数で、ジョブ投入時のディレクトリが自動で設定されるようになっています。自分自身で特別なディレクトリを指定しないのであれば、この文をそのまま記載するようにしてください。
./a.outは「3.コンパイル」で生成された実行ファイルを実行する操作になっています。
「2.プログラムの作成」で利用したemacsエディタを使って、nqs.shを作成しましょう。
1.emacsを起動し、nqs.shを作成します
フロントエンドノードで、以下のコマンドを入力してください。
% emacs nqs.sh
2.nqs.shを編集します
以下のように入力してください。
※【グループ名】の部分は自身のグループ名に変更してください。
#!/bin/bash
#PBS -q SQUID
#PBS --group=【グループ名】
#PBS -l elapstim_req=1:00:00
module load BaseCPU
cd $PBS_O_WORKDIR
./a.out
3.ファイルを保存します
Ctrl-x、Ctrl-sを順番に入力してください。
4.emacsを終了します
Ctrl-x、Ctrl-cを順番に入力してください。
7.ジョブスクリプトの投入
「ジョブスクリプト」を使って、計算機に対して実行を要求します。
これを「ジョブスクリプトを投入する」と表現します。
ジョブスクリプトの投入は、qsubコマンドを使用します。
手順6で作成したジョブスクリプトを投入してみましょう
% qsub nqs.sh
上記のコマンドを入力すると
Request 11111.sqd submitted to queue: SQUID.
のようなメッセージが表示されます。これは、ジョブスクリプトが正常に受け付けられたことを表しています。
投入し、受け付けられたジョブスクリプトには リクエストID が付けられます。
上記の例では11111.sqdというリクエストIDが付いています。
上記のようなメッセージが表示されない場合、スクリプトに間違いがある可能性が高いです。再度見直しましょう。
投入中のジョブスクリプトの状態を表示するには、qstatコマンドを使用します。
% qstat
RequestID ReqName UserName Queue Pri STT S Memory CPU Elapse R H M Jobs 11111.sqd nqs.sh user-id SQUID 0 RUN – 1.01M 0.2 1 Y Y Y 1
この情報で着目する点は、STTという項目です。主な状態は以下の2つですが、これら以外にもいくつか状態があります。
QUE queued:実行待ち状態
RUN running:実行中
qsubやqstatコマンドの詳細やその他のコマンドについて知りたい方は、以下をご覧ください
7.実行結果の確認
計算機での実行が終わると、計算結果がフロントエンドに転送されます。
計算結果は、スクリプト中で特別に指定しなければ、標準出力として出力されます。
標準出力は"ジョブスクリプト名.oリクエストID"
標準エラー出力は"ジョブスクリプト名.eリクエストID"
として出力されます。(ファイル名を変更することも可能です。)
サンプルプログラムの場合は、nqs.sh.o11111とnqs.sh.e11111という名前のファイルが出力されます。中身を確認してみましょう。
1. 標準出力を確認する
% cat nqs.sh.o11111
結果例
%NQSV(INFO): ------- Output from job:0000 -------
Hello World!
2. 標準エラー出力を確認する
% cat nqs.sh.e11111
結果例
%NQSV(INFO): ------- Output from job:0000 -------
上記のように標準出力に意図通りの結果が表示されており、標準エラー出力に何もエラーが表示されていなければ、実行は成功です。
おわりに
初心者向けの利用方法は以上となりますが、
ここに書かれた内容でわからないことがある場合は、FAQページや利用相談をお気軽にご利用ください。
相談・お問い合わせ