ALPSチュートリアル(3) アプリケーション実習

33
ALPS アプリケーション実行チュートリアル ALPS アプリケーション実行チュートリアル CMSI ハンズオン ALPS Collaboration http://alps.comp-phys.org/ 2014-10-16 1 / 33

description

CMSIハンズオン資料

Transcript of ALPSチュートリアル(3) アプリケーション実習

Page 1: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアル

ALPSアプリケーション実行チュートリアル

CMSIハンズオン

ALPS Collaborationhttp://alps.comp-phys.org/

2014-10-16

1 / 33

Page 2: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルOutline

1 ALPSシミュレーションの流れ

2 ALPSチュートリアル

3 ALPS Lattice & Model チュートリアル

2 / 33

Page 3: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●

ALPSによるシミュレーション — ワークフロー

parameter2xmltool

application programs

Python based evaluation tools

Parameter XML File

Outputs in HDF5 & XML

Quantum Monte Carlo

Quantum Lattice Model

Exact Diagonalization DMRG

Lattice XML Filesquare lattice

<LATTICES> <LATTICE name="square lattice" dimension="2"> <PARAMETER name="a" default="1"/> <BASIS><VECTOR>a 0</VECTOR><VECTOR>0 a</VECTOR></BASIS> </LATTICE> <UNITCELL name="simple2d" dimension="2"> <VERTEX/> <EDGE> <SOURCE vertex="1" offset="0 0"/> <TARGET vertex="1" offset="0 1"/> </EDGE> <EDGE> <SOURCE vertex="1" offset="0 0"/> <TARGET vertex="1" offset="1 0"/> </EDGE> </UNITCELL> <LATTICEGRAPH name="square lattice"> <FINITELATTICE> <LATTICE ref="square lattice"/> <EXTENT dimension="1" size="L"/> <EXTENT dimension="2" size="L"/> <BOUNDARY type="periodic"/> </FINITELATTICE> <UNITCELL ref="simple2d"/> </LATTICEGRAPH></LATTICES>

(0,0)

(0,1)

(1,0)

<MODELS> <BASIS name="spin"> <SITEBASIS name="spin"> <PARAMETER name="local_S" default="1/2"/> <QUANTUMNUMBER name="S" min="local_S" max="local_S"/> <QUANTUMNUMBER name="Sz" min="-S" max="S"/> <OPERATOR name="Sz" matrixelement="Sz"/> <OPERATOR name="Splus" matrixelement="sqrt(S*(S+1)-Sz*(Sz+1))"> <CHANGE quantumnumber="Sz" change="1"/> </OPERATOR> <OPERATOR name="Sminus" matrixelement="sqrt(S*(S+1)-Sz*(Sz-1))"> <CHANGE quantumnumber="Sz" change="-1"/> </OPERATOR> </SITEBASIS> </BASIS> <HAMILTONIAN name="spin"> <PARAMETER name="J" default="1"/> <PARAMETER name="h" default="0"/> <BASIS ref="spin"/> <SITETERM> -h * Sz(i) </SITETERM> <BONDTERM source="i" target="j"> J * (Sz(i)*Sz(j) + (Splus(i)*Sminus(j)+Sminus(i)*Splus(j)))/2 </BONDTERM> </HAMILTONIAN></MODELS>

Model XML File

H = J< i,j>

[ S zi S z

j + ( S +i S -

j + S -i S +

j )/ 2 - hi

S zi]Σ Σ

Plots

Parameter FileLATTICE = "square lattice"MODEL = "spin"L = 16Jxy = 1Jz = 2SWEEPS = 10000THERMALIZATION = 1000

{ T = 0.1 }{ T = 0.2 }{ T = 0.5 }{ T = 1.0 }

DMFT

3 / 33

Page 4: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●

シミュレーションの入出力

典型的には、一つのシミュレーションは複数のパラメータセットからなる(異なる温度など)

「ジョブ (job)」: シミュレーション全体、「タスク」の集合「タスク (task)」(または「simulation」): 一つのパラメータセットに対する計算、「ラン」の集合「ラン (run)」(または「clone」): 異なる乱数の種に対する個々の計算

XML入力ファイルと出力ファイルmyjob.in.xml

myjob.task1.in.xml

myjob.task2.in.xml

myjob.task3.in.xml

myjob.out.xml

myjob.task1.out.xml

myjob.task2.out.xml

myjob.task3.out.xml

run a simulation

4 / 33

Page 5: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●

XMLの基礎

XML = eXtensible Marckup Landuage

構造化文書を作成するのに適している「タグ」を使って、文章の構造を記述大文字と小文字は区別されるXMLの例: HTML (XHTML)

an attribute

contentsempty element (no contents)

opening tag

closing tag

<html>

<h1 align=”center”>Header</h1>

<p>A paragraph... And below it an image</p>

<img src=”img.jpg”/>

</html>

5 / 33

Page 6: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れー●

XMLの文法

「開始タグ」には対応する「終了タグ」が必要ある要素の「開始タグ」と終了タグは共通の親ノードに含まれなければならないXMLの「木」表示

html

imgh1 p

align="center" A paragraph... src="img.jpg"Header

<html>

<h1 align=”center”>Header</h1>

<p>A paragraph... And below it an image</p>

<img src=”img.jpg”/>

</html>

XMLでは、ユーザが独自のタグ (要素の名前)を定義することが可能(参考: Document Type Definition (DTD), XML Schema)

6 / 33

Page 7: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れー●

なぜ XMLを使うのか?

plain text file

# parameters10 0.5 10000 1000# mean, error-10.451 0.043

<PARAMETER name=“L”>10</PARAMETER><PARAMETER name=“T”>0.5</PARAMETER><PARAMETER name=“SWEEPS”>10000</PARAMETER><PARAMETER name=“THERMALIZATION”>1000</PARAMETER><AVERAGE name=“Energy”> <MEAN> -10.451 </MEAN> <ERROR> 0.043 </ERROR></AVERAGE>

XML file

人間にはどちらが読みやすい?

機械にはどちらがよみやすい?

数年後に読んで理解できるのはどっち?

7 / 33

Page 8: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れー●

データ形式の拡張性

新しいパラメータを追加すると、、、# parameters10 0.5 10000 1000 12# RNG“lagged fibonacci”# mean, error-10.451 0.043

<PARAMETER name=“L”>10</PARAMETER><PARAMETER name=“T”>0.5</PARAMETER><PARAMETER name=“SWEEPS”>10000</PARAMETER><PARAMETER name=“THERMALIZATION”>1000</PARAMETER><PARAMETER name=”SEED”>12</PARAMETER><RNG name=”lagged fibonacci”/><AVERAGE name=“Energy”> <MEAN> -10.451 </MEAN> <ERROR> 0.043 </ERROR></AVERAGE>

テキスト形式の場合、これまでのプログラムは動かなくなるXMLの場合には問題ない (必要のないパラメータは読まれない)

8 / 33

Page 9: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●

Job XML ファイル

myjob.in.xml

<JOB xmlns:xsi=”....” ....> <OUTPUT file="myjob.out.xml"/> <TASK status="new"> <INPUT file="myjob.task1.in.xml"/> <OUTPUT file="myjob.task1.out.xml"/> </TASK> <TASK status="new"> <INPUT file="myjob.task2.in.xml"/> <OUTPUT file="myjob.task2.out.xml"/> </TASK> ...</JOB>

myjob.out.xml

<JOB xmlns:xsi=”....” ....> <TASK status="finished"> <INPUT file="myjob.task1.out.xml"/> </TASK> <TASK status="finished"> <INPUT file="myjob.task2.out.xml"/> </TASK> <TASK status="running"> <INPUT file="myjob.task3.out.xml"/> </TASK> ...</JOB>

9 / 33

Page 10: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●

Task XML ファイル

myjob.task1.in.xml

<SIMULATION xmlns:xsi=”....” ....> <PARAMETERS> <PARAMETER name="LATTICE">chain lattice</PARAMETER> <PARAMETER name="MODEL">spin </PARAMETER> <PARAMETER name="L">128 </PARAMETER> <PARAMETER name="T">0.01 </PARAMETER> </PARAMETERS></SIMULATION>

myjob.task1.out.xml

<SIMULATION xmlns:xsi=”....” ....> <PARAMETERS> .... </PARAMETERS> <AVERAGES> <SCALAR_AVERAGE name=”Energy”....> ... </AVERAGES> <MCRUN> <EXECUTED phase=”equilibration”> .... </MCRUN></SIMULATION>

10 / 33

Page 11: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●

ALPSが作成するバイナリ形式ファイル

HDF5 (拡張子 .h5)

実行結果や実行時情報は, Task毎に HDF5形式ファイルに保存されるpyalpsツールは, HDF5ファイルから計算結果を読み込む

XDR (拡張子 .xdr)

実行途中のチェックポイント情報 (スピン配位等)が定期的に保存されるシミュレーションのリスタート時は, 最後のチェックポイントから再開される

11 / 33

Page 12: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●

parameter2xml ツール

パラメータセットを簡易形式で書いて、parameter2xmlツールで XMLに変換する

LATTICE_LIBRARY=”lattices.xml”;LATTICE=”chain lattice”;MODEL_LIBRARY=”models.xml”;MODEL=”spin”;THERMALIZATION=10000;SWEEPS=1000000;L=128;

{ T=0.2; }{ T=0.4; }{ T=0.6; }{ T=0.8; }{ T=1.0; }

myjob.in.xml

myjob.task1.in.xml

myjob.task2.in.xml

myjob.task3.in.xml

myjob.task4.in.xml

myjob.task5.in.xml

parameter2xml

pyalps (後述)では、pyalps.writeInputFiles() メソッドが利用できる

12 / 33

Page 13: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●

格子とモデルの指定

格子とモデルを指定するための特別なパラメータname description default

LATTICE_LIBRARYpath to an XML file containing lattice descriptions (e.g. “mylattice.xml”)

$ALPS_HOME/lib/xml/lattices.xml

LATTICE name of the lattice (e.g. “square lattice”) N.A.

MODEL_LIBRARYpath to an XML file containing model descriptions (e.g. “mymodel.xml”)

$ALPS_HOME/lib/xml/models.xml

MODEL name of the model (e.g. “spin”) N.A.

13 / 33

Page 14: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●

パラメータファイルでの数式の使用

改行, セミコロン, コンマで変数を区別四則演算、初等関数 (sin,cos, expなど)が使えるπ (PI), 虚数単位 (I)などを文字で指定C 風, C++風のコメント{ } で囲んだ変数は異なるセット「循環参照」がある場合にはエラーになる

LATTICE = "chain lattice";

L = 16,

SEED = 2873

// C++ style comment

SWEEPS = 4096;

THERMALIZATION = SWEEPS/8;

/* C style comment */

{ T = 2; Sq = 2*PI/3; }

{ T = 1.8; }

14 / 33

Page 15: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

ディレクトリ構成 (例)

/opt/nano/alps/alpsvars.shALPS環境変数 ($PATH, $ALPS HOME等)設定スクリプト

/opt/nano/alps/tutorialsアプリケーションのチュートリアル用入出力ファイル

/opt/nano/alps/notebookiPythonノートブックによるチュートリアル

alpsvars.shは ALPSがインストールされたスパコン全てに用意されていますhttps://github.com/wistaria/installer/wiki

15 / 33

Page 16: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

実習準備

1 実習システムにログイン$ ssh -X guestXX@hostname

2 環境変数の設定$ source /opt/nano/alps/alpsvars.sh

3 ALPSが動くかどうか確認$ pconfig

4 チュートリアルをコピー$ cp -rp /opt/nano/alps/tutorials/ .

5 iPythonノートブックをコピー$ cp -rp /opt/nano/alps/notebook/ .

16 / 33

Page 17: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

実習準備 (ローカル環境を使う場合)

1 環境変数の設定$ source $HOME/alps/bin/alpsvars.sh

2 ALPSが動くかどうか確認$ pconfig

3 チュートリアル SourceForgeからダウンロード$ tar zxf tutorials-20140623-r7482.tgz

4 iPythonノートブックを SourceForgeからダウンロード$ tar zxf alps-notebook-20141016.tgz

17 / 33

Page 18: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

実習準備 (MateriApps LIVE!を使う場合)

1 ALPSが動くかどうか確認$ pconfig

2 チュートリアルをコピー$ cp -rp /usr/share/alps/tutorials/ .

3 iPythonノートブックを SourceForgeからダウンロード$ tar zxf alps-notebook-20141016.tgz

18 / 33

Page 19: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

ALPSの実行シナリオ

1 コマンドライン (旧来からの方法)

$ parameter2xml param

$ loop param.in.xml

2 シェルスクリプト (バッチ処理)

3 Python (対話的 or バッチ)

パラメータの準備からグラフ作成まで統一的に対話的にもバッチコマンドとしても実行可能グラフの作成も、PythonのMatplotlibを用いる

4 IPython notebook

ブラウザ上で Pythonコマンドを実行入力、出力を「ノートブック」としてまとめて保存グラフの描画もブラウザ上で可能

5 VisTrails (履歴管理ツール)

19 / 33

Page 20: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

ALPSアプリケーション

fulldiag 厳密対角化 (全対角化法)

sparsediag 厳密対角化 (Lanczos法)

spinmc 古典モンテカルロ法loop 量子モンテカルロ法 (ループアルゴリズム)

dirloop sse 量子モンテカルロ (向き付きループアルゴリズム)

worm 量子モンテカルロ (ワームアルゴリズム)

dmrg,tebd 密度行列繰り込み群hirshfye,interaction,hybridization 動的平均場近似の QMCソルバ

20 / 33

Page 21: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

コマンドライン実行 (厳密対角化 ed-01)

1 実習システムにログイン$ ssh -X guestXX@hostname

2 (必要に応じて)計算ノードにログイン3 環境変数の設定

$ source /opt/nano/alps/alpsvars.sh

4 入力 XMLファイルの準備$ cd tutorials/ed-01-sparsediag

$ parameter2xml parm1a

5 sparsediagの実行$ sparsediag --write-xml parm1a.in.xml

6 結果は parm1a.task1.out.xmlに出力される

21 / 33

Page 22: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

シェルスクリプトによる実行 (厳密対角化 ed-01)

1 実習システムにログイン$ ssh -X guestXX@hostname

2 (必要に応じて)計算ノードにログイン3 シェルスクリプト (バッチファイル)の準備

$ cd tutorials/ed-01-sparsediag

$ vi batch.sh

4 batch.sh の中身#!/bin/sh

source /opt/nano/alps/alpsvars.sh

parameter2xml parm1a

sparsediag --write-xml parm1a.in.xml

5 シェルスクリプトを実行 (あるいはバッチキューに投入)

6 物性研スパコンでのジョブスクリプトの書き方 ⇒ [LINK]

22 / 33

Page 23: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

Pythonでの対話的実行 (厳密対角化 ed-01)

1 実習システムにログイン$ ssh -X guestXX@hostname

2 (必要に応じて)計算ノードにログイン3 環境変数の設定

$ source /opt/nano/alps/alpsvars.sh

4 IPythonの起動$ cd tutorials/ed-01-sparsediag

$ ipython

5 チュートリアルページにしたがって、コマンドを実行 (コマンドは TABで補完できる)

23 / 33

Page 24: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

Pythonでのバッチ実行 (厳密対角化 ed-01)

1 実習システムにログイン$ ssh -X guestXX@hostname

2 (必要に応じて)計算ノードにログイン3 環境変数の設定

$ source /opt/nano/alps/alpsvars.sh

4 バッチ実行$ cd tutorials/ed-01-sparsediag

$ python tutorial1a.py

24 / 33

Page 25: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

IPython notebookでの実行 (厳密対角化 ed-01)

1 実習システムにログイン$ ssh -X guestXX@hostname

2 IPython notebookサーバの起動$ source /opt/nano/alps/alpsvars.sh

$ cd notebook/jp

$ ipython notebook --no-browser --pylab inline

3 起動時に出力されるポート番号 (8888等)を控えておく4 手元の PCでもう一つポートフォワーディング付きで SSHセッションを開く$ ssh guestXX@hostname -L 8888:localhost:8888

5 PCでブラウザを起動し、http://localhost:8888 を開く6 ED-01 SparseDiagonalization.ipynb を開き、[Shift+Return] で実行していく

注: フロントエンドでの実行のため、他の人のジョブと干渉して遅くなる場合がある

25 / 33

Page 26: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

IPython notebookでの実行 (ローカル環境を使う場合)

IPython notebookの起動$ source $HOME/alps/alpsvars.sh

$ cd notebook/jp

$ ipython notebook --pylab inline

Mac OS X の場合は, ipython-2.7を使う

MateriApps LIVE!の場合は, 1行目は不要

26 / 33

Page 27: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

実行結果の確認

実行結果 (JOB XMLファイル、TASK XMLファイル)は、webブラウザで直接開いて中身を見ることも可能

例 (Linux): firefox parm1a.task1.out.xml例 (Mac OS X): open -a safari parm1a.task1.out.xml

27 / 33

Page 28: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

シミュレーションの並列実行

パラメータセットに関する並列実行が可能 (embarassinglyparallel)

アプリケーションによって、ALPS parallelizing スケジューラか、ALPS/parapack スケジューラのいずれかが使われている(オプション -l により確認可)

ALPS parallelizing スケジューラ (spinmc等)

OpenMPスレッド並列には対応していない。MPI並列のみMPI実行例 (4プロセス):mpirun -np 4 spinmc --mpi parm2a.in.xml

ALPS/parapack スケジューラ (loop等)

OpenMPスレッド並列とMPI並列に対応。デフォルトで自動的にスレッド並列実行実行例 (16スレッド):loop -r 16 parm2c.in.xml

28 / 33

Page 29: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

厳密対角化チュートリアル

ED-01 Sparse Diagonalization (Lanczos)S = 1の量子 1次元系 (サイト数 4)について, Lanczos法により固有値を求め, 固有値, 相関関数などを出力する.

ED-02 Spin gaps of 1D quantum systemsS = 1の量子 1次元系 (サイト数 4–14)について, Lanczos法で固有値計算を行う. 求めたエネルギー固有値からエネルギーギャップを求めプロットする.

ED-03 Spectra of 1D quantum systems次の 2種類の量子格子模型について, Lanczos法で固有値計算を行う.

S = 1/2量子 1次元ハイゼンベルグ模型S = 1/2梯子系ハイゼンベルグ模型

29 / 33

Page 30: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

厳密対角化チュートリアル

ED-04 Conformal field theory description of 1D critical spectra横磁場イジング模型について, Lancos 法を用いた固有値計算を行う. 相関関数の臨界指数とエネルギーギャップとの共形場理論から導かれる関係を数値計算から求めた固有値により実証する.

ED-05 Phase transition in a frustrated spin chain次近接相互作用をもつハイゼンベルグ鎖について, Lanczos法を用いて固有値計算を行う. 得られたエネルギー固有値から臨界点を求める. さらに共形場理論を利用した解析も行う.

ED-06 Full DiagonalizationS = 1の反強磁性ハイゼンベルグ鎖 (8サイト)について全対角化を行う. 得られた固有値をもとにいくつかの物理量について熱力学的振る舞いをプロットする.

30 / 33

Page 31: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPSチュートリアルー●

モンテカルロ法チュートリアル

mc-01-autocorrelations

mc-01b-equilibration-and-convergence

mc-02-susceptibilities

mc-03-magnetization

mc-04-measurements

mc-05-bosons

mc-06-qwl

mc-07-phase-transition

mc-08-quantum-phase-transition

31 / 33

Page 32: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPS Lattice & Model チュートリアルー●

ALPS Latticeチュートリアル

ALPS Lattice HowTo

辺と頂点を単位として簡単なグラフを指定する方法格子と単一セルを指定する方法単位格子に対応するグラフを指定する方法格子とグラフのライブラリの生成方法格子の定義から生成されたグラフを確認する方法

lattice2xmlツール、あるいは (wxPythonと VTKがインストールされている環境では) lattice-preview 格子可視化ツールも利用可

32 / 33

Page 33: ALPSチュートリアル(3) アプリケーション実習

ALPSアプリケーション実行チュートリアルALPS Lattice & Model チュートリアルー●

ALPS Modelチュートリアル

ALPS Model HowTo

デフォルトのモデルライブラリファイルモデルライブラリファイルの構造単一サイトの基底完全格子モデルの基底量子演算子ハミルトニアンの取扱い

33 / 33