ALPSチュートリアル(3) アプリケーション実習
-
Upload
computational-materials-science-initiative -
Category
Technology
-
view
970 -
download
5
description
Transcript of ALPSチュートリアル(3) アプリケーション実習
ALPSアプリケーション実行チュートリアル
ALPSアプリケーション実行チュートリアル
CMSIハンズオン
ALPS Collaborationhttp://alps.comp-phys.org/
2014-10-16
1 / 33
ALPSアプリケーション実行チュートリアルOutline
1 ALPSシミュレーションの流れ
2 ALPSチュートリアル
3 ALPS Lattice & Model チュートリアル
2 / 33
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
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
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
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
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
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
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
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
ALPSアプリケーション実行チュートリアルALPSシミュレーションの流れ●●
ALPSが作成するバイナリ形式ファイル
HDF5 (拡張子 .h5)
実行結果や実行時情報は, Task毎に HDF5形式ファイルに保存されるpyalpsツールは, HDF5ファイルから計算結果を読み込む
XDR (拡張子 .xdr)
実行途中のチェックポイント情報 (スピン配位等)が定期的に保存されるシミュレーションのリスタート時は, 最後のチェックポイントから再開される
11 / 33
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
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
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
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
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
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
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
ALPSアプリケーション実行チュートリアルALPSチュートリアルー●
ALPSの実行シナリオ
1 コマンドライン (旧来からの方法)
$ parameter2xml param
$ loop param.in.xml
2 シェルスクリプト (バッチ処理)
3 Python (対話的 or バッチ)
パラメータの準備からグラフ作成まで統一的に対話的にもバッチコマンドとしても実行可能グラフの作成も、PythonのMatplotlibを用いる
4 IPython notebook
ブラウザ上で Pythonコマンドを実行入力、出力を「ノートブック」としてまとめて保存グラフの描画もブラウザ上で可能
5 VisTrails (履歴管理ツール)
19 / 33
ALPSアプリケーション実行チュートリアルALPSチュートリアルー●
ALPSアプリケーション
fulldiag 厳密対角化 (全対角化法)
sparsediag 厳密対角化 (Lanczos法)
spinmc 古典モンテカルロ法loop 量子モンテカルロ法 (ループアルゴリズム)
dirloop sse 量子モンテカルロ (向き付きループアルゴリズム)
worm 量子モンテカルロ (ワームアルゴリズム)
dmrg,tebd 密度行列繰り込み群hirshfye,interaction,hybridization 動的平均場近似の QMCソルバ
20 / 33
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
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
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
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
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
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
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
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
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
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
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
ALPSアプリケーション実行チュートリアルALPS Lattice & Model チュートリアルー●
ALPS Latticeチュートリアル
ALPS Lattice HowTo
辺と頂点を単位として簡単なグラフを指定する方法格子と単一セルを指定する方法単位格子に対応するグラフを指定する方法格子とグラフのライブラリの生成方法格子の定義から生成されたグラフを確認する方法
lattice2xmlツール、あるいは (wxPythonと VTKがインストールされている環境では) lattice-preview 格子可視化ツールも利用可
32 / 33
ALPSアプリケーション実行チュートリアルALPS Lattice & Model チュートリアルー●
ALPS Modelチュートリアル
ALPS Model HowTo
デフォルトのモデルライブラリファイルモデルライブラリファイルの構造単一サイトの基底完全格子モデルの基底量子演算子ハミルトニアンの取扱い
33 / 33