' + + '' + + _("Hide Search Matches") + + "
" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/manual/v1.0.0/en/html/_static/task_view.pdf b/manual/v1.0.0/en/html/_static/task_view.pdf new file mode 100644 index 0000000..3af0603 Binary files /dev/null and b/manual/v1.0.0/en/html/_static/task_view.pdf differ diff --git a/manual/v1.0.0/en/html/_static/task_view.png b/manual/v1.0.0/en/html/_static/task_view.png new file mode 100644 index 0000000..44d038a Binary files /dev/null and b/manual/v1.0.0/en/html/_static/task_view.png differ diff --git a/manual/v1.0.0/en/html/genindex.html b/manual/v1.0.0/en/html/genindex.html new file mode 100644 index 0000000..031500b --- /dev/null +++ b/manual/v1.0.0/en/html/genindex.html @@ -0,0 +1,104 @@ + + + + + + +In recent years, the use of machine learning for predicting material properties and designing substances (known as materials informatics) has gained considerable attention. +The accuracy of machine learning depends heavily on the preparation of appropriate training data. +Therefore, the development of tools and environments for the rapid generation of training data is expected to contribute significantly to the advancement of research in materials informatics.
+moller is provided as part of the HTP-Tools package, designed to support high-throughput computations. +It is a tool for generating batch job scripts for supercomputers and clusters, allowing parallel execution of programs under a series of computational conditions, such as parameter parallelism. +Currently, it supports the supercomputers ohtaka (using the slurm job scheduler) and kugui (using the PBS job scheduler) provided by the Institute for Solid State Physics, University of Tokyo.
+The distribution of the program package and the source codes for moller follow GNU General Public License version 3 (GPL v3) or later.
+This software was developed by the following contributors.
+ver.1.0.0 (Released on 2024/03/06)
ver.1.0-beta (Released on 2023/12/28)
+Developers
+Kazuyoshi Yoshimi (The Instutite for Solid State Physics, The University of Tokyo)
Tatsumi Aoyama (The Instutite for Solid State Physics, The University of Tokyo)
Yuichi Motoyama (The Instutite for Solid State Physics, The University of Tokyo)
Masahiro Fukuda (The Instutite for Solid State Physics, The University of Tokyo)
Kota Ido (The Instutite for Solid State Physics, The University of Tokyo)
Tetsuya Fukushima (The National Institute of Advanced Industrial Science and Technology (AIST))
Shusuke Kasamatsu (Yamagata University)
Takashi Koretsune (Tohoku University)
Project Corrdinator
+Taisuke Ozaki (The Instutite for Solid State Physics, The University of Tokyo)
© 2023- The University of Tokyo. All rights reserved.
+This software was developed with the support of “Project for advancement of software usability in materials science” of The Institute for Solid State Physics, The University of Tokyo.
+moller was tested on the following platforms:
+Ubuntu Linux + python3
N.B. The content of this section may vary depending on the version of moller.
+A bulk job execution means that a set of small tasks are executed in parallel within a single batch job submitted to a large batch queue. It is schematically shown as follows, in which N tasks are launched as background processes and executed in parallel, and a wait
statement is invoked to wait for all tasks to be completed.
task param_1 &
+task param_2 &
+ ...
+task param_N &
+wait
+
To manage the bulk job, it is required to distribute nodes and cores allocated to the batch job over the tasks param_1 … param_N so that they are executed on distinct nodes and cores. It is also needed to arrange task execution where at most N tasks are run simultaneously according to the allocated resources.
+Hereafter a job script generated by moller will be denoted as a moller script. +In a moller script, the concurrent execution and control of tasks are managed by GNU parallel [1]. It takes a list holding the items param_1 … param_N and runs commands for each items in parallel. An example is given as follows, where list.dat contains param_1 … param_N in each line.
+cat list.dat | parallel -j N task
+
The number of concurrent tasks is determined at runtime from the number of nodes and cores obtained from the execution environment and the degree of parallelism (number of nodes, processes, and threads specified by node parameter).
+The way to assign tasks to nodes and cores varies according to the job scheduler.
+For SLURM job scheduler variants, the concurrent calls of srun
command within the batch job are appropriately assigned to the nodes and cores by exploiting the option of exclusive resource usage. The explicit option may depend on the platform.
On the other hand, for PBS job scheduler variants that do not have such features, the distribution of nodes and cores to tasks has to be handled within the moller script. The nodes and cores allocated to a batch job are divided into slots, and the slots are assigned to the concurrent tasks. The division is determined from the allocated nodes and cores and the degree of parallelism of the task, and kept in a form of table variables. Within a task, the programs are executed on the assigned hosts and cores (optionally pinned to the program) through the options to mpirun (or mpiexec) and the environment variables. This feature depends on the MPI implementation.
+Reference
+ +moller reads the input YAML file and generates a job script for bulk execution. The structure of the generated script is described as follows.
+Header
+This part contains the options to the job scheduler. The content of the platform section is formatted according to the type of job scheduler. This feature depends on platforms.
+Prologue
+This part corresponds to the prologue section of the input file. The content of the code
block is written as-is.
Function definitions
+This part contains the definitions of functions and variables used within the moller script. The description of the functions will be given in the next section. This feature depends on platforms.
+Processing Command-line options
+The SLURM variants accept additional arguments to the job submission command (sbatch) that are passed to the job script as a command-line options. The name of the list file and/or the options such as the retry feature can be processed.
+For the PBS variants, these command-line arguments are ignored, and therefore the name of the list file is fixed to list.dat
by default, and the retry feature may be enabled by modifying the script with retry
set to 1.
Description of tasks
+This part contains the description of tasks specified in the jobs section of the input file. When more than one task is given, the following procedure is applied to each task.
+++When parallel = false, the content of the
+run
block is written as-is.When parallel = true (default), a function is created by the name task_{task name} that contains the pre-processing for concurrent execution and the content of the
+run
block. The keywords for the parallel execution (srun
,mpiexec
, ormpirun
) are substituted by the platform-dependent command. The definition of the task function is followed by the concurrent execution command.
Epilogue
+This part corresponds to the epilogue section of the input file. The content of the code
block is written as-is.
The main functions of the moller script is briefly described below.
+run_parallel
This function performs concurrent execution of task functions. It takes the degree of parallelism, the task function, and the status file as arguments. Within the function, it calls _find_multiplicity
to find the number of tasks that can be run simultaneously, and invokes GNU parallel to run tasks concurrently. The task function is actually wrapped by the _run_parallel_task
function to deal with the nested call of GNU parallel.
The platform-dependence is separated out by the functions _find_multiplicity
and _setup_run_parallel
.
_find_multiplicity
This function determines the number of tasks that can be simultaneously executed on the allocated resources (nodes and cores) taking account of the degree of parallelism of the task. +For the PBS variants, the compute nodes and the cores are divided into slots, and the slots are kept as table variables. +The information obtained at the batch job execution is summarized as follows.
+For SLURM variants,
+++The number of allocated nodes (
+_nnodes
)+++
SLURM_NNODES
The number of allocated cores (
+_ncores
)+++
SLURM_CPUS_ON_NODE
For PBS variants,
+++The allocated nodes (
+_nodes[]
)++The list of unique compute nodes is obtained from the file given by
+PBS_NODEFILE
.The number of allocated nodes (
+_nnodes
)++The number of entries of
+_nodes[]
.The number of allocated cores
+++Searched from below (in order of examination)
++
+- +
NCPUS
(for PBS Professional)- +
OMP_NUM_THREADS
- +
core
parameter of platform section (written in the script as a variablemoller_core
.)- +
ncpus
orppn
parameter in the header.
_setup_run_parallel
This function is called from the run_parallel
function to supplement some procedures before running GNU parallel.
+For PBS variants, the slot tables are exported so that the task functions can refer to.
+For SLURM variants, there is nothing to do.
The structure of the task function is described as follows.
+A task function is created by a name task_{task name}
.
The arguments of the task function are 1) the degree of parallelism (the number of nodes, processes, and threads), 2) the execution directory (that corresponds to the entry of list file), 3) the slot ID assigned by GNU parallel.
The platform-dependent _setup_taskenv
function is called to set up execution environment.
+For PBS variants, the compute node and the cores are obtained from the slot table based on the slot ID. For SLURM variants, there is nothing to do.
The _is_ready
function is called to check if the preceding task has been completed successfully. If it is true, the remaining part of the function is executed. Otherwise, the task is terminated with the status -1.
The content of the code
block is written. The keywords for parallel calculation (srun
, mpiexec
, or mpirun
) are substituted by the command provided for the platform.
The latest version of moller provides profiles for ISSP supercomputer systems, ohtaka and kugui. An extension guide to use moller in other systems is described in the following.
+The platform-dependent parts of moller are placed in the directory platform/
.
+Their class structure is depicted below.
A factory is provided to select a system in the input file.
+A class is imported in platform/__init__.py
and registered to the factory by register_platform(system_name, class_name)
, and then it becomes available in the system parameter of the platform section in the input YAML file.
For the SLURM job scheduler variants, the system-specific settings should be applied to a derived class of BaseSlurm class.
+The string that substitute the keywords for the parallel execution of programs is given by the return value of parallel_command()
method. It corresponds to the srun
command with the options for the exclusive use of resources. See ohtaka.py for an example.
For the PBS job scheduler variants (PBS Professional, OpenPBS, Torque, and others), the system-specific settings should be applied to a derived class of BasePBS class.
+There are two ways of specifying the number of nodes for a batch job in the PBS variants. PBS Professional takes the form of select=N:ncpus=n, while Torque and others take the form of node=N:ppn=n. The BasePBS class has a parameter self.pbs_use_old_format
that is set to True
for the latter type.
The number of cores per compute node can be specified by node parameter of the input file, while the default value may be set for a known system. In kugui.py, the number of cores per node is set to 128 by default.
+When further customization is required, the methods of the base class may be overridden in the derived classes. The list of relevant methods is given below.
+setup
This method extracts parameters of the platform section.
+parallel_command
This method returns a string that is used to substitute the keywords for parallel execution of programs (srun
, mpiexec
, mpirun
).
generate_header
This method generates the header part of the job script that contains options to the job scheduler.
+generate_function
This method generates functions that are used within the moller script. It calls the following methods to generate function body and variable definitions.
+generate_variable
generate_function_body
The definitions of the functions are provided as embedded strings within the class.
+The platform-dependent parts of the moller scripts are the calculation of task multiplicity, the resource distribution over tasks, and the command string of parallel calculation. +The internal functions need to be developed with the following information on the platform:
+how to acquire the allocated nodes and cores from the environment at the execution of batch jobs.
how to launch parallel calculation (e.g. mpiexec command) and how to assign the nodes and cores to the command.
To find which environment variables are set within the batch jobs, it may be useful to call printenv
command in the job script.
When the variable _debug
in the moller script is set to 1, the debug outputs are printed during the execution of the batch jobs. If the job does not work well, it is recommended that the debug option is turned on and the output is examined to check if the internal parameters are appropriately defined.
Prerequisite
+++Comprehensive calculation utility
+moller
included in HTP-tools requires the following programs and libraries:+
+- +
Python 3.x
- +
ruamel.yaml module
- +
tabulate module
- +
GNU Parallel (It must be installed on servers or compute nodes on which the job script is executed.)
Official pages
++++
Downloads
+++moller can be downloaded by the following command with git:
+++$ git clone https://github.com/issp-center-dev/Moller.git +
Installation
+++Once the source files are obtained, you can install moller by running the following command. The required libraries will also be installed automatically at the same time.
+++$ cd ./Moller +$ python3 -m pip install . +The executable files
+moller
andmoller_status
will be installed.
Directory structure
+++++. +|-- LICENSE +|-- README.md +|-- pyproject.toml +|-- docs/ +| |-- ja/ +| |-- en/ +| |-- tutorial/ +|-- src/ +| |-- moller/ +| |-- __init__.py +| |-- main.py +| |-- platform/ +| | |-- __init__.py +| | |-- base.py +| | |-- base_slurm.py +| | |-- base_pbs.py +| | |-- base_default.py +| | |-- ohtaka.py +| | |-- kugui.py +| | |-- pbs.py +| | |-- default.py +| | |-- function.py +| | |-- utils.py +| |-- moller_status.py +|-- sample/ +
Basic usage
++++
moller
is a tool to generate batch job scripts for supercomputers in which programs are run in parallel for a set of execution conditions using concurrent execution features.+
+- +
Prepare job description file
+++First, you need to create a job description file in YAML format that describes the tasks to be executed on supercomputers. The details of the format will be given in File Format section of the manual.
+- +
Run command
+++Run moller program with the job description file, and a batch job script will be generated.
+++$ moller -o job.sh input.yaml +- +
Run batch jobs
+++Transfer the generated batch job scripts to the supercomputer. +Prepare a directory for each parameter set, and create a list of the directory names in a file
+list.dat
. +Note that the list contains the relative paths to the directory where the batch job is executed, or the absolute paths.Once the list file is ready, you may submit a batch job. The actual command depends on the system.
++
+- +
In case of ISSP system B (ohtaka)
+In ohtaka, slurm is used for the job scheduling system. In order to submit a batch job, a command
+sbatch
is invoked with the job script as an argument. Parameters can be passed to the script as additional arguments; the name of list file is specified as a parameter.++$ sbatch job.sh list.dat +If the list file is not specified,
+list.dat
is used by default.- +
In case of ISSP system C (kugui)
+In kugui, PBS is used for the job scheduling system. In order to submit a batch job, a command
+qsub
is invoked with the job script. There is no way to pass parameters to the script, and thus the name of the list file is fixed tolist.dat
.++$ qsub job.sh +- +
Check the status of the calculation
+++After the job finishes, you may run the following command
+++$ moller_status input.yaml list.dat +to obtain a report whether the calculation for each parameter set has been completed successfully.
+- +
Retry/resume job
+++In case the job is terminated during the execution, the job may be resumed by submitting the batch job again with the same list file. +The yet unexecuted jobs (as well as the unfinished jobs) will be run.
++
+- +
In case of ISSP system B (ohtaka)
++$ sbatch job.sh list.dat +To retry the failed tasks, the batch job is submitted with
+--retry
command line option.++$ sbatch job.sh --retry list.dat ++
+- +
In case of ISSP system C (kugui)
For kugui, to retry the failed tasks, the batch job script should be edited so that
+retry=0
is changed to beretry=1
.++$ qsub job.sh +Then, the batch job is submitted as above.
+
References
+ +++Generate a batch job script for comprehensive calculation
+
SYNOPSIS:
+++++moller [-o job_script] input_yaml +
DESCRIPTION:
+++This program reads a job description file specified by input_yaml, and generates a batch job script. It takes the following command line options.
++
+- +
+
-o
,--output
job_script
specifies output file name. This option supersedes the output_file parameter in the job description file. If no output file is specified, the result is written to the standard output.
+- +
+
-h
displays help and exits.
+
++Reports the status of comprehensive calculation jobs
+
SYNOPSIS:
+++++moller_status [-h] [--text|--csv|--html] [--ok|--failed|--skipped|--collapsed|--yet] [-o output_file] input_yaml [list_file] +
DESCRIPTION:
+++This program summarizes the status of tasks in jobs that are executed through the job scripts generated by moller, and outputs a report. The tasks are obtained from the job description file specified by
+input_yaml
. The list of jobs is read from the file specified bylist_file
. If it is not provided, the job list is extracted from the log files. +The format of the output is specified by a command line option. The default is the text format. The output file is specified by the-o
or--output
option. If it is not specified, the output is written to the standard output.+
+- +
output formats
+specifies the format of the output by one of the following options. If more than one option are specified, the program terminates with error. The default is the text format.
++
+- +
--text
+displays in text format.- +
--csv
+displays in CSV (comma-separated values) format.- +
--html
+displays in HTML format.- +
+
input_yaml
specifies the job description file for
+moller
.- +
+
list_file
specifies the file that contains list of job directories. If this file is not specified, the list will be obtained from the logfile of the batch job
+stat_{task}.dat
.- +
+
-o
,--output
output_file
specifies the output file name. If it is omitted, the result is written to the standard output.
+- +
filter options
+specifies the status of jobs to be displayed by one of the following options. All jobs are displayed by default.
++
+- +
--ok
+displays only jobs whose tasks are all completed successfully.- +
--failed
+displays jobs, any of whose tasks are failed with errors, skipped, or not performed.- +
--skipped
+displays jobs, any of whose tasks are skipped.- +
--yet
+displays jobs, any of whose tasks are not yet performed.- +
--collapsed
+displays jobs, any of whose tasks are failed with errors.- +
--all
+displays all jobs. (default)- +
+
-h
displays help and exits.
+
FILES:
+++When the programs are executed concurrently using the job script generated by
+moller
, the status of the tasks are written in log filesstat_{task}.dat
.moller_status
reads these log files and makes a summary.
A job description file contains configurations to generate a batch job script by moller
. It is prepared in text-based YAML format. This file consists of the following parts:
+++
+- +
General settings: specifies job names and output files.
- +
platform section: specifies the system on which batch jobs are executed, and the settings for the batch jobs.
- +
prologue and epilogue sections: specifies initial settings and finalization within the batch job.
- +
jobs section: specifies tasks to be carried out in the betch job script.
+++
name
++specifies the name of the batch job. If it is not given, the job name is left unspecified. (Usually the name of the job script is used as the job name.)
++
description
++provides the description of the batch job. It is regarded as comments.
++
output_file
++specifies the output file name. When the output file is given by a command-line option, the command-line parameter is used. When none of them is specified, the result is written to the standard output.
+
+++
system
++specifies the target system. At present, either
+ohtaka
orkugui
is accepted.+
queue
++specifies the name of batch queue. The actual value depends on the target system.
++
node
++specifies the number of nodes to be used. It is given by an integer specifying the number of nodes, or a list of integers specifying
+[
number of nodes, number of cores per node]
. The accepted range of parameters depends on the system and queue settings. (The number of cores is accepted for kugui and default systems; otherwise it is ignored.)+
core
++specifies the number of cores per node be used. The accepted range of parameters depends on the system and queue settings. If both the second parameter of
+node
andcore
are specified, the value incore
is used. (This parameter is accepted for kugui and default target systems.)+
elapsed
++specifies the elapsed time of the batch job in HH:MM:SS format.
++
options
++specifies other batch job options. It is given as a list of options or as a multiple-line string with options in each line. The heading directives (e.g.
+#PBS
or#SBATCH
) are not included. The examples are given as follows.+
+- +
an example of SLURM job script in the string format:
+++options: | + --mail-type=BEGIN,END,FAIL + --mail-user=user@sample.com + --requeue +- +
an example of PBS job script in the list format:
+++options: + - -m bea + - -M user@sample.com + - -r y +
prologue
section specifies the commands to be run prior to executing the tasks. It is used, for example, to set environment variables of libraries and paths.
+epilogue
section specifies the commands to be run after all tasks have been completed.
+++
code
++specifies the content of the commands in the form of shell script. It is embedded in the batch job script, and executed within the batch job.
+
jobs
section specifies a sequence of tasks in a table format, with the task names as keys and the contents as values.
++key
+++name of task
+value
+++a table that consists of the following items:
++++
description
++provides the description of the task. It is regarded as comments.
++
node
++specifies the degree of parallelism in one of the following formats.
++
+- +
[
number of processes, number of threads per process]
- +
[
number of nodes, number of processes, number of threads per process]
- +
number of nodes
When the number of nodes is specified, the specified number of nodes are exclusively assigned to a job. Otherwise, if the required number of cores for a job is smaller than the number of cores in a node, more than one job may be allocated in a single node. If a job uses more than one node, the required number of nodes are exclusively assigned.
++
parallel
++This parameter is set to
+true
if the tasks of different jobs are executed in parallel. It is set tofalse
if they are executed sequentially. The default value istrue
.+
run
++The content of the task is described in the form of shell script. The executions of MPI parallel programs or MPI/OpenMPI hybrid parallel programs are specified by
+++srun prog [arg1, ...] +where, in addition to the keyword
+srun
,mpirun
ormpiexec
is accepted. In the resulting job script, they are replaced by the command (e.g.srun
ormpirun
) and the degree of parallelism specified bynode
parameter.
This file contains a list of jobs. It is a text file with a job name in a line (The name of the directory is associated with the name of the job).
+moller
assumes that a directory is assigned to each job, and the tasks of the job are executed within the directory. These directories are supposed to be located in the directory where the batch job is submitted.
The procedure to use the batch job script generator moller
consists of the following steps:
+First, a job description file is prepared that defines the tasks to be executed. Next, the program moller
is to be run with the job description file, and a batch job script is generated. The script is then transferred to the target supercomputer system. A batch job is submitted with the script to perform calculations.
+In this tutorial, we will explain the steps along a sample in docs/tutorial/moller
.
A job description file describes the content of calculations that are carried out in a batch job.
+Here, a batch job is used for a set of instructions submitted to job schedulers running on supercomputer systems.
+On the other hand, for the concurrent execution of programs that moller
handles, we call a series of program executions performed for one set of parameters by a job. A job may consist of several contents that we call tasks. moller
organizes job execution so that each task is run in parallel, and the synchronization between the jobs is taken at every start and end of the tasks.
An example of job description file is presented in the following. A job description file is in text-based YAML format. It contains parameters concerning the platform and the batch job, task descriptions, and pre/post-processes.
+name: testjob
+description: Sample task file
+
+platform:
+ system: ohtaka
+ queue: i8cpu
+ node: 1
+ elapsed: 00:10:00
+
+prologue:
+ code: |
+ module purge
+ module load oneapi_compiler/2023.0.0 openmpi/4.1.5-oneapi-2023.0.0-classic
+
+ ulimit -s unlimited
+
+ source /home/issp/materiapps/intel/parallel/parallelvars-20210622-1.sh
+
+jobs:
+ start:
+ parallel: false
+ run: |
+ echo "start..."
+
+ hello:
+ description: hello world
+ node: [1,1]
+ run: |
+ echo "hello world." > result.txt
+ sleep 2
+
+ hello_again:
+ description: hello world again
+ node: [1,1]
+ run: |
+ echo "hello world again." >> result.txt
+ sleep 2
+
+epilogue:
+ code: |
+ echo "done."
+ date
+
In the platform section, you can specify the type of platform on which to execute. +In this case, settings for the System B (ohtaka) are being made.
+The prologue section describes the preprocessing of the batch job. +It details the common command line to be executed before running the task.
+In the jobs section, the content of the task processing is described. +The series of tasks to be executed in the job are described in a table format, +with the task name as the key and the processing content as the value.
+In this example, a task that first outputs “start…” is defined with the task name “start”.
+Here, it is set to parallel = false
.
+In this case, the content of run
parameter is executed sequentially.
Next, a task that outputs “hello world.” is defined with the task name “hello_world” .
+Here, since “parallel” is not set, it is treated as parallel = true
.
+In this case, parallel processing is performed on a per-job basis.
+Similarly, next, a task that outputs “hello world again.” is defined with the task name “hello_again”.
Finally, in the epilogue section, the post-processing of the batch job is described. +It details the common command line to be executed after running the task.
+For more details on the specifications, please refer to the chapter File Format.
+moller
is to be run with the job description file (input.yaml
) as an input as follows:
$ moller -o job.sh input.yaml
+
A batch job script is generated and written to a file specified by the parameter in the job description file, or the command line option -o
or --output
. If both specified, the command line option is used. If neither specified, the result is written to the standard output.
The obtained batch job script is to be transferred to the target system as required. It is noted that the batch job script is prepared for bash
; users may need to set the shell for job execution to bash
. (A care should be needed if the login shell is set to csh-type.)
A list of jobs is to be created. moller
is designed so that each job is executed within a directory prepared for the job with the job name. The job list can be created, for example, by the following command:
$ /usr/bin/ls -1d * > list.dat
+
In this tutorial, an utility script make_inputs.sh
is enclosed which generates datasets and a list file.
$ bash ./make_inputs.sh
+
By running the above command, a directory output
and a set of subdirectories dataset-0001
… dataset-0020
that correspond to datasets, and a list file list.dat
are created.
The batch job is to be submitted to the job scheduler with the batch job script.
+In this example, the job script and the input parameter files are copied into the output
directory, and the current directory is changed to ``output` as follows:
$ cp job.sh input.yaml output/
+$ cd output
+
In ohtaka, slurm is used for the job scheduling system. In order to submit a batch job, a command sbatch
is invoked with the job script as an argument.
+Parameters can be passed to the script as additional arguments; the name of list file is specified as a parameter.
$ sbatch job.sh list.dat
+
Files named ‘result.txt’ will be generated in each directory listed on the list.dat. +You can confirm that the ‘result.txt’ contains the strings ‘hello world.’ and ‘hello world again.’ as the job results.
+The status of execution of the tasks are written to log files. A tool named moller_status
is provided to generate a summary of the status of each job from the log files. It is invoked by the following command in the directory where the batch job is executed:
$ moller_status input.yaml list.dat
+
The command takes the job description file input.yaml
and the list file list.dat
as arguments. The list file may be omitted; in this case, the information of the jobs are extracted from the log files.
An example of the output is shown below:
+| job | hello | hello_again |
+|--------------|---------|---------------|
+| dataset-0001 | o | o |
+| dataset-0002 | o | o |
+| dataset-0003 | o | o |
+| dataset-0004 | o | o |
+| dataset-0005 | o | o |
+| dataset-0006 | o | o |
+| dataset-0007 | o | o |
+| dataset-0008 | o | o |
+| dataset-0009 | o | o |
+| dataset-0010 | o | o |
+| dataset-0011 | o | o |
+| dataset-0012 | o | o |
+| dataset-0013 | o | o |
+| dataset-0014 | o | o |
+| dataset-0015 | o | o |
+| dataset-0016 | o | o |
+| dataset-0017 | o | o |
+| dataset-0018 | o | o |
+| dataset-0019 | o | o |
+| dataset-0020 | o | o |
+
where “o” corresponds to a task that has been completed successfully, “x” corresponds to a failed task, “-” corresponds to a skipped task because the previous task has been terminated with errors, and “.” corresponds to a task yet unexecuted. +In the above example, the all tasks have been completed successfully.
+If a task fails, the subsequent tasks within the job will not be executed. +The following is an example of job status in which each task fails by 10% change.
+| job | task1 | task2 | task3 |
+|--------------|---------|---------|---------|
+| dataset_0001 | o | o | o |
+| dataset_0002 | o | x | - |
+| dataset_0003 | x | - | - |
+| dataset_0004 | x | - | - |
+| dataset_0005 | o | o | o |
+| dataset_0006 | o | o | o |
+| dataset_0007 | o | x | - |
+| dataset_0008 | o | o | o |
+| dataset_0009 | o | o | x |
+| dataset_0010 | o | o | o |
+| dataset_0011 | o | o | o |
+| dataset_0012 | o | o | o |
+| dataset_0013 | o | x | - |
+| dataset_0014 | o | o | o |
+| dataset_0015 | o | o | o |
+| dataset_0016 | o | o | o |
+| dataset_0017 | o | o | o |
+| dataset_0018 | o | o | o |
+| dataset_0019 | o | o | o |
+| dataset_0020 | o | o | o |
+
There, the jobs of dataset_0003 and dataset_0004 failed at task1, and the subsequent task2 and task3 were not executed. The other jobs were successful at task1, and proceeded to task2. +In this way, each job is executed independently of other jobs.
+Users can rerun the failed tasks by submitting the batch job with the retry option. +For SLURM job scheduler (e.g. used in ISSP system B), resubmit the job as follows:
+$ sbatch job.sh --retry list.dat
+
For PBS job scheduler (e.g. used in ISSP system C), edit the job script so that the line retry=0
is replaced by retry=1
, and resubmit the job.
| job | task1 | task2 | task3 |
+|--------------|---------|---------|---------|
+| dataset_0001 | o | o | o |
+| dataset_0002 | o | o | x |
+| dataset_0003 | o | x | - |
+| dataset_0004 | o | o | o |
+| dataset_0005 | o | o | o |
+| dataset_0006 | o | o | o |
+| dataset_0007 | o | o | o |
+| dataset_0008 | o | o | o |
+| dataset_0009 | o | o | o |
+| dataset_0010 | o | o | o |
+| dataset_0011 | o | o | o |
+| dataset_0012 | o | o | o |
+| dataset_0013 | o | o | o |
+| dataset_0014 | o | o | o |
+| dataset_0015 | o | o | o |
+| dataset_0016 | o | o | o |
+| dataset_0017 | o | o | o |
+| dataset_0018 | o | o | o |
+| dataset_0019 | o | o | o |
+| dataset_0020 | o | o | o |
+
The tasks that have failed will be executed in the second run. +In the above example, the task1 for dataset_0003 was successful, but the task2 failed. +For dataset_0004, task1, task2, and task3 were successfully executed. +For the jobs of datasets whose tasks have already finished successfully, the second run will not do anything.
+N.B. the list file must not be modified on the rerun. The jobs are managed according to the order of entries in the list file, and therefore, if the order is changed, the jobs will not be executed properly.
+This is an example of moller
with
+DSQSS, which is an
+open-source software package for performing the path-integral Monte
+Calro method for quantum many-body problem. In this example, we will
+calculate the temperature dependence of the magnetic susceptibilities
+\(\chi\) of the \(S=1/2\) (\(M=1\) in the terms of DSQSS)
+and \(S=1\) (\(M=2\)) antiferromagnetic Heisenberg chain under
+the periodic boundary condition with several length. By using
+moller
, calculations with different parameters (\(M, L, T\)) are
+performed in parallel.
This example is corresponding to one of the official +tutorials.
+Make sure that moller
(HTP-tools) package and DSQSS
are
+installed. In this tutorial, the calculation will be performed using the
+supercomputer system ohtaka
at ISSP.
Prepare dataset
+Run the script make_inputs.sh
enclosed within this package.
$ bash ./make_inputs.sh
+
This make an output
directory (if already exists, first removed
+then make again). Under output
, working directories for each
+parameter like L_8__M_1__T_1.0
will be generated. A list of the
+directories is written to a file list.dat
.
Generate job script using moller
Generate a job script from the job description file using moller
,
+and store the script as a file named job.sh
.
$ moller -o job.sh input.yaml
+
Then, copy job.sh
in the output
directory, and change
+directory to output
.
Run batch job
+Submit a batch job with the job list as an argument.
+$ sbatch job.sh list.dat
+
Check status
+The status of task execution will be summarized by moller_status
+program.
$ moller_status input.yaml list.dat
+
Gather results
+After calculation finishes, gather result by
+$ python3 ../extract_result.py list.dat
+
This script writes results into a text file result.dat
which has
+5 columns, \(M\), \(L\), \(T\), mean of \(\chi\), and
+stderr of \(\chi\).
To visualize the results, GNUPLOT files plot_M1.plt
and
+plot_M2.plt
are available.
$ gnuplot --persist plot_M1.plt
+$ gnuplot --persist plot_M2.plt
+
+
The main different between \(S=1/2\) and \(S=1\) AFH chains +is whether the excitation gap vanishes (\(S=1/2\)) or remains +(\(S=1\)). Reflecting this, the magnetic susceptibility in the +very low temperature region remains finite (\(S=1/2\)) or +vanishes (\(S=1\)). Note that for the \(S=1/2\) case, the +finite size effect opens the spin gap and therefore the magnetic +susceptibility of small chains drops.
+This is an example of moller
with
+HPhi, which is an
+open-source software package for performing the exact diagonalization
+method for quantum many-body problems. In this example, we will
+calculate the system size dependence of the excitation gap
+\(\Delta\) of the \(S=1/2\) (2S_1
directory) and \(S=1\)
+(2S_2
) antiferromagnetic Heisenberg chain under the periodic
+boundary condition. By using moller
, calculations with different
+system sizes are performed in parallel. This is corresponding to
+section
+1.4
+of HPhi’s official tutorial.
Make sure that moller
(HTP-tools) package and HPhi
are
+installed. In this tutorial, the calculation will be performed using the
+supercomputer system ohtaka
at ISSP.
Prepare dataset
+Run the script make_inputs.sh
enclosed within this package.
$ bash ./make_inputs.sh
+
Working directories L_8
, L_10
, …, L_24
(up to L_18
+for 2S_2
)) will be generated. A list of the directories is
+written to a file list.dat
. Additionally, a shell script,
+extract_gap.sh
, to gather energy gaps from working directories is
+generated.
Generate job script using moller
Generate a job script from the job description file using moller
,
+and store the script as a file named job.sh
.
$ moller -o job.sh input.yaml
+
Run batch job
+Submit a batch job with the job list as an argument.
+$ sbatch job.sh list.dat
+
Check status
+The status of task execution will be summarized by moller_status
+program.
$ moller_status input.yaml list.dat
+
Gather results
+Once the calculation finishes, gather energy gaps from jobs as
+$ bash extract_gap.sh
+
This script writes pairs of the length \(L\) and the gap
+\(\Delta\) into a text file, gap.dat
.
To visualize the results, a Gnuplot file gap.plt
is available. In
+this file, the obtained gap data are fitted by the expected curves,
and
+The result is plotted as follows:
+$ gnuplot --persist gap.plt
+
Note that the logarithmic correction causes the spin gap for +\(S=1/2\) to remain finite. On the other hand, for \(S=1\), +the extrapolated value \(\Delta_\infty = 0.417(1)\) is consistent +with the previous results, e.g., \(\Delta_\infty = 0.41048(6)\) +by QMC (Todo and Kato, PRL 87, 047203 (2001)).
++ Searching for multiple words only shows matches that contain + all words. +
+ + + + + + +' + + '' + + _("Hide Search Matches") + + "
" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/manual/v1.0.0/ja/html/_static/task_view.pdf b/manual/v1.0.0/ja/html/_static/task_view.pdf new file mode 100644 index 0000000..3af0603 Binary files /dev/null and b/manual/v1.0.0/ja/html/_static/task_view.pdf differ diff --git a/manual/v1.0.0/ja/html/_static/task_view.png b/manual/v1.0.0/ja/html/_static/task_view.png new file mode 100644 index 0000000..44d038a Binary files /dev/null and b/manual/v1.0.0/ja/html/_static/task_view.png differ diff --git a/manual/v1.0.0/ja/html/_static/translations.js b/manual/v1.0.0/ja/html/_static/translations.js new file mode 100644 index 0000000..817b128 --- /dev/null +++ b/manual/v1.0.0/ja/html/_static/translations.js @@ -0,0 +1,60 @@ +Documentation.addTranslations({ + "locale": "ja", + "messages": { + "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", + "© %(copyright_prefix)s %(copyright)s.": "", + ", in ": ", in ", + "About these documents": "\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3064\u3044\u3066", + "Automatically generated list of changes in version %(version)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9\uff08\u3053\u306e\u30ea\u30b9\u30c8\u306f\u81ea\u52d5\u751f\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff09", + "C API changes": "C API \u306b\u95a2\u3059\u308b\u5909\u66f4", + "Changes in Version %(version)s — %(docstitle)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9 — %(docstitle)s", + "Collapse sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u305f\u305f\u3080", + "Complete Table of Contents": "\u7dcf\u5408\u76ee\u6b21", + "Contents": "\u30b3\u30f3\u30c6\u30f3\u30c4", + "Copyright": "\u8457\u4f5c\u6a29", + "Created using Sphinx %(sphinx_version)s.": "", + "Expand sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u5c55\u958b", + "Full index on one page": "\u7dcf\u7d22\u5f15", + "General Index": "\u7dcf\u5408\u7d22\u5f15", + "Global Module Index": "\u30e2\u30b8\u30e5\u30fc\u30eb\u7dcf\u7d22\u5f15", + "Go": "\u691c\u7d22", + "Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059", + "Index": "\u7d22\u5f15", + "Index – %(key)s": "\u7d22\u5f15 – %(key)s", + "Index pages by letter": "\u982d\u6587\u5b57\u5225\u7d22\u5f15", + "Indices and tables:": "\u7d22\u5f15\u3068\u8868\u4e00\u89a7:", + "Last updated on %(last_updated)s.": "\u6700\u7d42\u66f4\u65b0: %(last_updated)s", + "Library changes": "\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u95a2\u3059\u308b\u5909\u66f4", + "Navigation": "\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3", + "Next topic": "\u6b21\u306e\u30c8\u30d4\u30c3\u30af\u3078", + "Other changes": "\u305d\u306e\u4ed6\u306e\u5909\u66f4", + "Overview": "\u6982\u8981", + "Please activate JavaScript to enable the search\n functionality.": "\u691c\u7d22\u6a5f\u80fd\u3092\u4f7f\u3046\u306b\u306f JavaScript \u3092\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "Preparing search...": "\u691c\u7d22\u3092\u6e96\u5099\u3057\u3066\u3044\u307e\u3059...", + "Previous topic": "\u524d\u306e\u30c8\u30d4\u30c3\u30af\u3078", + "Quick search": "\u30af\u30a4\u30c3\u30af\u691c\u7d22", + "Search": "\u691c\u7d22", + "Search Page": "\u691c\u7d22\u30da\u30fc\u30b8", + "Search Results": "\u691c\u7d22\u7d50\u679c", + "Search finished, found ${resultCount} page(s) matching the search query.": "", + "Search within %(docstitle)s": "%(docstitle)s \u5185\u3092\u691c\u7d22", + "Searching": "\u691c\u7d22\u4e2d", + "Searching for multiple words only shows matches that contain\n all words.": "\u8907\u6570\u306e\u5358\u8a9e\u3092\u691c\u7d22\u3059\u308b\u3068\u3001\u6b21\u3092\u542b\u3080\u4e00\u81f4\u306e\u307f\u304c\u8868\u793a\u3055\u308c\u307e\u3059\n \u00a0\u00a0\u00a0 \u3059\u3079\u3066\u306e\u7528\u8a9e\u3002", + "Show Source": "\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8868\u793a", + "Table of Contents": "\u76ee\u6b21", + "This Page": "\u3053\u306e\u30da\u30fc\u30b8", + "Welcome! This is": "Welcome! This is", + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u691c\u7d22\u3057\u305f\u6587\u5b57\u5217\u306f\u3069\u306e\u6587\u66f8\u306b\u3082\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3059\u3079\u3066\u306e\u5358\u8a9e\u304c\u6b63\u78ba\u306b\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u3042\u308b\u3044\u306f\u3001\u5341\u5206\u306a\u30ab\u30c6\u30b4\u30ea\u30fc\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "all functions, classes, terms": "\u95a2\u6570\u3001\u30af\u30e9\u30b9\u304a\u3088\u3073\u7528\u8a9e\u7dcf\u89a7", + "can be huge": "\u5927\u304d\u3044\u5834\u5408\u304c\u3042\u308b\u306e\u3067\u6ce8\u610f", + "last updated": "\u6700\u7d42\u66f4\u65b0", + "lists all sections and subsections": "\u7ae0\uff0f\u7bc0\u4e00\u89a7", + "next chapter": "\u6b21\u306e\u7ae0\u3078", + "previous chapter": "\u524d\u306e\u7ae0\u3078", + "quick access to all modules": "\u5168\u30e2\u30b8\u30e5\u30fc\u30eb\u65e9\u898b\u8868", + "search": "\u691c\u7d22", + "search this documentation": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u691c\u7d22", + "the documentation for": "the documentation for" + }, + "plural_expr": "0" +}); \ No newline at end of file diff --git a/manual/v1.0.0/ja/html/genindex.html b/manual/v1.0.0/ja/html/genindex.html new file mode 100644 index 0000000..802a9e2 --- /dev/null +++ b/manual/v1.0.0/ja/html/genindex.html @@ -0,0 +1,105 @@ + + + + + + +近年、機械学習を活用した物性予測や物質設計(マテリアルズインフォマティクス)が注目されています。 +機械学習の精度は、適切な教師データの準備に大きく依存しています。 +そのため、迅速に教師データを生成するためのツールや環境の整備は、 +マテリアルズインフォマティクスの研究進展に大きく貢献すると期待されます。
+mollerは、ハイスループット計算を支援するためのパッケージHTP-Toolsの一つとして提供しています。 +mollerではスーパーコンピュータやクラスタ向けにバッチジョブスクリプトを生成するツールであり、 +多重実行の機能を利用し、パラメータ並列など一連の計算条件について並列にプログラムを実行することができます。 +現状では、東京大学 物性研究所の提供するスーパーコンピュータ ohtaka (slurmジョブスケジューラ) と kugui (PBSジョブスケジューラ)がサポートされています。
+本ソフトウェアのプログラムパッケージおよびソースコード一式はGNU General Public License version 3 (GPL v3) に準じて配布されています。
+本ソフトウェアは以下の開発貢献者により開発されています。
+ver.1.0.0 (2024/03/06リリース)
ver.1.0-beta (2023/12/28リリース)
+開発者
+吉見 一慶 (東京大学 物性研究所)
青山 龍美 (東京大学 物性研究所)
本山 裕一 (東京大学 物性研究所)
福田 将大 (東京大学 物性研究所)
井戸 康太 (東京大学 物性研究所)
福島 鉄也 (産業技術総合研究所)
笠松 秀輔 (山形大学 学術研究院(理学部主担当))
是常 隆 (東北大学大学院理学研究科)
プロジェクトコーディネーター
+尾崎 泰助 (東京大学 物性研究所)
© 2023- The University of Tokyo. All rights reserved.
+本ソフトウェアは2023年度 東京大学物性研究所 ソフトウェア高度化プロジェクトの支援を受け開発されており、その著作権は東京大学が所持しています。
+以下の環境で動作することを確認しています。
+Ubuntu Linux + python3
(註: 以下の内容は moller のバージョンによって変わる可能性があります。)
+バルク実行とは、大型のバッチキューに投入した一つのバッチジョブの中で、複数の小さいタスクを並行して実行するというものです。動作のイメージとしては、次のようにN個のタスクをバックグラウンドで実行し同時に処理させ、wait文によりすべてのタスクが終了するまで待ちます。
+task param_1 &
+task param_2 &
+ ...
+task param_N &
+wait
+
このとき、バッチジョブに割り当てられたノード・コアを適宜分配し、param_1〜param_N のタスクがそれぞれ別のノード・コアで実行されるように配置する必要があります。また、多数のタスクがある時に、割当てリソースに応じて最大N個のタスクが実行されるよう実行を調整することも必要です。
+moller で生成したジョブスクリプトを以下では moller scriptと呼ぶことにします。 +moller script では、タスクの並行実行と制御には GNU parallel [1]を利用します。GNU parallel は param_1〜param_N のリストを受取り、これらを引数としてコマンドを並行して実行するツールです。 +以下は GNU parllel を使った実行イメージで、list.dat の各行に param_1〜param_N を列挙しておきます。
+cat list.dat | parallel -j N task
+
同時実行数については、バッチジョブに割当てられたノード数・コア数を実行時に環境変数等から取得し、各タスクの並列度(ノード数・プロセス数・スレッド数)の指定(nodeパラメータ)を元に計算します。
+ノード・コアへのタスクの配置についてはジョブスケジューラによって方法が異なります。SLURM系のジョブスケジューラでは、リソースの排他利用のオプションを使うことで、バッチジョブ内部で発行された複数の srun をジョブスケジューラが適宜配置して実行します。具体的な指定方法はプラットフォームの設定に依存します。
+一方、PBS系のジョブスケジューラはそのような仕組みがなく、リソースの配分をmoller script内部で処理する必要があります。moller scriptでは、バッチジョブに割り当てられた計算ノードとコアをスロットに分割し、GNU parallel で並行処理されるタスクに分配します。スロットへの分割は、実行時に取得される割当てノード・コアとタスクの並列度指定から計算し、テーブルの形で保持します。タスク内部では、mpirun (mpiexec) の引数や環境変数を通じて計算ノードの指定と割当コアのピン留めを行いプログラムを実行します。この処理は使用するMPI実装に依存します。
+参考文献
+ +mollerは、入力されたYAMLファイルの内容をもとに、バルク実行のためのジョブスクリプトを生成します。生成されるジョブスクリプトは先頭から順に次のような構成になっています。
+ヘッダ
+ジョブスケジューラへの指示が記述されます。platform セクションに指定した内容が、ジョブスケジューラの種類に応じた形式に整形されて出力されます。この処理はプラットフォーム依存です。
+プロローグ
+prologue セクションに指定した内容です。code ブロックの中身がそのまま転記されます。
+関数の定義
+ジョブスクリプト内部で使う関数および変数の定義が出力されます。関数の概要については次節で説明します。この箇所はプラットフォーム依存です。
+コマンドライン引数の処理
+SLURM系のジョブスケジューラでは、リストファイルの指定やタスクの再実行などのオプション指定を sbatch コマンドの引数として与えることができます。
+PBS系のジョブスケジューラでは引数の指定は無視されるため、オプション指定はジョブスクリプトを編集してパラメータをセットする必要があります。リストファイルのファイル名はデフォルトで list.dat
です。また、タスクのリトライを行うには retry
変数を 1
にセットします。
タスクの記述
+jobs セクションに記述されるタスクの内容を出力します。タスクが複数ある場合はタスクごとに以下の処理を実行します。
+++parallel = false の場合は run ブロックの中身がそのまま転記されます。
+parallel = true (デフォルト) の場合、task_タスク名 という関数が生成され、並列実行のための前処理と run ブロックの内容が出力されます。並列計算のためのキーワード(
+srun
、mpiexec
またはmpirun
)はプラットフォームに応じたコマンドに置き換えられます。関数定義に続いて並列実行のコマンドが書き出されます。
エピローグ
+epilogue セクションに指定した内容です。code ブロックの中身がそのまま転記されます。
+moller script の内部で使用する主な関数の概要を以下に説明します。
+run_parallel
タスクの内容を記述した関数(タスク関数)を並行実行する関数です。並列度、タスク関数、ステータスファイル名を引数に取ります。内部では _find_multiplicity
関数を呼んで多重度を計算し、GNU parallel を起動してタスクを並行実行します。GNU parallel の多段処理に対応するために、タスク関数は _run_parallel_task
関数でラップされます。
プラットフォーム依存性は _find_multiplicity
および _setup_run_parallel
関数としてくくり出しています。
_find_multiplicity
並列実行の多重度を、割当てリソース(ノード数・コア数)とタスクの並列度指定から計算します。PBS系のジョブスケジューラでは、さらに計算ノード・コアをスロットに分割し、テーブルで保持します。 +実行時に環境から取得する情報は次の通りです。
+SLURM系
++++
+- 割当てノード数 _nnodes
- +
+
SLURM_NNODES
- 割当てコア数 _ncores
- +
+
SLURM_CPUS_ON_NODE
PBS系
++++
+- 割当てノード _nodes[]
- +
+
PBS_NODEFILE
で指定されるファイルから計算ノードのリストを取得- ノード数 _nnodes
- +
_nodes[] の項目数
+- 割当てコア数 _ncores
- +
+
+- 以下の順に検索されます。
- +
+
+- +
NCPUS
(PBS Professional)- +
OMP_NUM_THREADS
- +
platform セクションの core 指定(スクリプト中に moller_core変数として書き込まれる)
- +
ヘッダの ncpus または ppn パラメータ
_setup_run_parallel
GNU parallel による並行実行を開始する前にいくつか処理を追加するために呼ばれます。PBS系ではスロットに分割されたノード・コアのテーブルをタスク関数から参照できるよう export します。SLURM系では実行する内容はありません。
+各タスクに対応するタスク関数の構成については次の通りです。
+タスク関数の引数は 1) 並列度指定(ノード数・プロセス数・スレッド数) 2) 実行ディレクトリ 3) GNU parallel のスロットID です。
_setup_taskenv
で実行環境の設定を行います。この関数はプラットフォーム依存です。PBS系ではスロットIDに基づいて計算ノード・コアをテーブルから取得します。SLURM系では実行する内容はありません。
直前に実行するタスクが正常終了したかどうかを _is_ready
関数を呼んでチェックします。正常終了している場合はタスクの処理を継続します。それ以外の場合は -1 のステータスでタスクの処理を中断します。
code ブロックの内容を転記します。その際に、並列計算のためのキーワード(srun
、 mpiexec
または mpirun
)はプラットフォームに応じたコマンドに置き換えられます。
mollerには現在、物性研スーパーコンピュータシステム ohtaka および kugui 向けの設定が用意されています。mollerを他のシステムで使うための拡張ガイドを以下で説明します。
+mollerの構成のうちプラットフォーム依存の部分は platform/
ディレクトリにまとめています。
+クラス構成は次のとおりです。
プラットフォームの選択についてはファクトリが用意されています。register_platform(登録名, クラス名)
でクラスをファクトリに登録し、 platform/__init__.py
にクラスを import しておくと、入力パラメータファイル中で platform セクションの system パラメータに指定できるようになります。
SLURM系のジョブスケジューラを利用している場合、BaseSlurm クラスを元にシステム固有の設定を行います。
+並列計算を実行するキーワードを置き換える文字列は parallel_command()
メソッドの戻り値で与えます。リソースの排他利用を行うための srun のパラメータをここに指定します。
+具体例は ohtaka.py を参照してください。
PBS系のジョブスケジューラ (PBS Professional, OpenPBS, Torque など)を利用している場合、BasePBS クラスを元にシステム固有の設定を行います。
+PBS系ではバッチジョブのノード数の指定の仕方に2通りあり、PBS Professional は select=N:ncpus=n という書式で指定しますが、Torque などは node=N:ppn=n と記述します。後者の指定を用いる場合は self.pbs_use_old_format = True
をセットします。
計算ノードのコア数は node パラメータで指定できますが、対象システムを限定してコア数のデフォルト値を設定しておくこともできます。kugui.py ではノードあたり128コアを設定しています。
+基底クラスを参照して必要なメソッドを再定義します。メソッド構成は次のようになっています。
+setup
platform セクションのパラメータの取り出しなどを行います。
+parallel_command
並列計算のキーワード (srun
, mpiexec
, mpirun
) を置き換える文字列を返します。
generate_header
ジョブスケジューラオプションの指定を記述したヘッダを生成します。
+generate_function
moller script 内部で使用する関数の定義を生成します。変数および関数の実体はそれぞれ以下のメソッドで作られます。
+generate_variable
generate_function_body
それぞれの関数は埋め込み文字列としてクラス内で定義されています。
+moller scriptの動作のうちプラットフォーム依存な箇所は、並行実行の多重度の計算、リソース配置に関する部分、並列計算のコマンドです。
+割当てノード・ノード数・ノードあたりのコア数を実行時に環境変数等から取得する方法
並列計算を実行するコマンド (mpiexec等) と、実行ホストやコア割当の指定のしかた
これらをもとにmoller script内で使う関数を作成します。
+printenv
コマンドでジョブスクリプト内で有効な環境変数の一覧を取得できます。
moller script内の _debug
変数を 1 にセットすると、バッチジョブ実行時にデバッグ出力が書き出されます。もしジョブがうまく実行されないときは、デバッグ出力を有効にして、内部パラメータが正しくセットされているかを確認してみてください。
必要なライブラリ・環境
+++HTP-tools に含まれる網羅計算ツール moller を利用するには、以下のプログラムとライブラリが必要です。
++
+- +
Python 3.x
- +
ruamel.yaml モジュール
- +
tabulate モジュール
- +
GNU Parallel (ジョブスクリプトを実行するサーバ・計算ノード上にインストールされていること)
ソースコード配布サイト
++++
+- +
ダウンロード方法
+++gitを利用できる場合は、以下のコマンドでmollerをダウンロードできます。
+++$ git clone https://github.com/issp-center-dev/Moller.git +
インストール方法
+++mollerをダウンロード後、以下のコマンドを実行してインストールします。mollerが利用するライブラリも必要に応じてインストールされます。
+++$ cd ./Moller +$ python3 -m pip install . +実行プログラム
+moller
およびmoller_status
がインストールされます。
ディレクトリ構成
+++++. +|-- LICENSE +|-- README.md +|-- pyproject.toml +|-- docs/ +| |-- ja/ +| |-- en/ +| |-- tutorial/ +|-- src/ +| |-- moller/ +| |-- __init__.py +| |-- main.py +| |-- platform/ +| | |-- __init__.py +| | |-- base.py +| | |-- base_slurm.py +| | |-- base_pbs.py +| | |-- base_default.py +| | |-- ohtaka.py +| | |-- kugui.py +| | |-- pbs.py +| | |-- default.py +| | |-- function.py +| | |-- utils.py +| |-- moller_status.py +|-- sample/ +
基本的な使用方法
+mollerはスーパーコンピュータ向けにバッチジョブスクリプトを生成するツールです。多重実行の機能を利用して、パラメータ並列など一連の計算条件について並列にプログラムを実行します。
+構成定義ファイルの作成
+++mollerを使用するには、まず、計算内容を記述した構成定義ファイルをYAML形式で作成します。詳細についてはファイルフォーマットの章を参照してください。
+
コマンドの実行
+++作成した構成定義ファイルを入力としてmollerプログラムを実行します。バッチジョブスクリプトが生成されます。
+++$ moller -o job.sh input.yaml +
バッチジョブの実行
+++生成されたバッチジョブスクリプトを対象となるスーパーコンピュータシステムに転送します。 +並列実行する各パラメータごとにディレクトリを用意し、
+list.dat
にディレクトリ名を列挙します。 +list.dat
には、ジョブを実行するディレクトリからの相対パスまたは絶対パスを記述します。リストファイルが用意できたらバッチジョブを投入します。 +以下では、物性研システムB(ohtaka)およびシステムC(kugui)で実行するケースをそれぞれ示します。
++
+- +
物性研システムB(ohtaka)の場合
+ohtaka では slurm ジョブスケジューラが使用されています。バッチジョブを投入するには、バッチジョブスクリプトを引数として sbatch コマンドを実行します。ジョブスクリプト名に続けてスクリプトのパラメータを渡すことができます。パラメータとしてリストファイルを指定します。
+++$ sbatch job.sh list.dat +リストファイルの指定がない場合は list.dat がデフォルトとして使われます。
+- +
物性研システムC(kugui)の場合
+kugui では PBS ジョブスケジューラが使用されています。バッチジョブを投入するには、バッチジョブスクリプトを引数として qsub コマンドを実行します。スクリプトのパラメータの指定はできないので、リストファイルは list.dat として用意する必要があります。
+++$ qsub job.sh +
結果の確認
+++バッチジョブ終了後に、
+++$ moller_status input.yaml list.dat +を実行すると、各パラメータセットについて計算が正常に終了したかどうかを集計したレポートが出力されます。
+
ジョブの再開・再実行
+++ジョブが途中で終わった場合、続けて実行するには、同じリストファイルを指定してもう一度バッチジョブを投入します。 +未実行(未完了を含む)のタスクから実行が継続されます。
++
+- +
物性研システムB(ohtaka)の場合
+以下のように、リストファイルを指定して sbatch コマンドを実行します。
+++$ sbatch job.sh list.dat +エラーで終了したタスクを再実行するには、--retry オプションを付けてバッチジョブを投入します。
+++$ sbatch job.sh --retry list.dat +- +
物性研システムC(kugui)の場合
+job.sh を編集して retry=0 の行を retry=1 に書き換えた後、
+++$ qsub job.sh +を実行します。
+
参考文献
+ +++網羅計算のためのバッチジョブスクリプトを生成する
+
書式:
+++++moller [-o job_script] input_yaml +
説明:
+++input_yaml に指定した構成定義ファイルを読み込み、バッチジョブスクリプトを生成します。 +以下のオプションを受け付けます。
++
+- +
-o, --output job_script
+出力先のファイル名を指定します。構成定義ファイル内の output_file パラメータより優先されます。ファイル名の指定がない場合は標準出力に書き出されます。
+- +
-h
+ヘルプを表示します。
+
++網羅計算ジョブの実行状況をレポートする
+
書式:
+++++moller_status [-h] [--text|--csv|--html] [--ok|--failed|--skipped|--collapsed|--yet] [-o output_file] input_yaml [list_file] +
説明:
+++mollerで生成したジョブスクリプトを実行した際に、ジョブごとの各タスクが完了したかどうかを集計してレポートを作成します。input_yaml に指定した構成定義ファイルからタスクの内容を読み込みます。ジョブのリストは list_file に指定したファイルから取得します。list_file が指定されていないときは、実行時ログファイルから収集します。 +出力形式をオプションで指定できます。デフォルトはテキスト形式です。出力先を -o または --output オプションで指定します。指定がない場合は標準出力に書き出されます。
++
+- +
出力モード
+出力形式を指定します。以下のいずれかを指定できます。複数同時に指定した場合はエラーになります。デフォルトはテキスト形式です。
++
+- +
--text +テキスト形式で出力します。
- +
--csv +CSV (カンマ区切りテキスト) 形式で出力します。
- +
--html +HTML形式で出力します。
- +
input_yaml
+mollerの構成定義ファイルを指定します。
+- +
list_file
+ジョブのリストを格納したファイルを指定します。指定がない場合は、バッチジョブから出力されるログファイル stat_{task}.dat から収集します。
+- +
-o, --output output_file
+出力先のファイル名を指定します。指定がない場合は標準出力に書き出されます。
+- +
フィルタ
+出力内容を指定します。以下のいずれかを指定できます。指定がない場合は全てのジョブの情報が出力されます。
++
+- +
--ok +全てのタスクが完了したジョブのみを表示します。
- +
--failed +エラー、スキップまたは未実行のタスクがあるジョブを表示します。
- +
--skipped +実行をスキップしたタスクがあるジョブを表示します。
- +
--yet +未実行のタスクがあるジョブを表示します。
- +
--collapsed +エラー終了したタスクがあるジョブを表示します。
- +
--all +全てのジョブを表示します。(デフォルト)
- +
-h
+ヘルプを表示します。
+
ファイル:
+++mollerで生成したジョブスクリプトを用いてプログラムを並列実行すると、実行状況がログファイル stat_{task}.dat に出力されます。moller_status はこのファイルを集計し、読みやすい形式に整形します。
+
構成定義ファイルでは、moller でバッチジョブスクリプトを生成するための設定情報を YAML形式で記述します。本ファイルは以下の部分から構成されます。
++++
+- +
全般的な記述: ジョブ名や出力ファイル名などを設定します。
- +
platformセクション: バッチジョブを実行するシステムやバッチジョブに関する設定を記述します。
- +
prologue, epilogue セクション: バッチジョブ内で行う環境設定や終了処理などを記述します。
- +
jobsセクション: タスクを記述します。
+++
name
++バッチジョブのジョブ名を指定します。指定がない場合は空欄となります。(通常はジョブスクリプトのファイル名がジョブ名になります)
++
description
++バッチジョブの説明を記述します。コメントとして扱われます
++
output_file
++moller の出力先ファイル名を指定します。コマンドライン引数の指定がある場合はコマンドライン引数の指定を優先します。いずれも指定がない場合は標準出力に出力されます。
+
+++
system
++対象となるシステムを指定します。現状では ohtaka と kugui が指定できます。
++
queue
++使用するバッチキューの名称を指定します。キューの名称はシステムに依存します。
++
node
++使用するノード数を指定します。指定方法は ノード数(整数値) または [ノード数, ノードあたりのコア数] (整数値のリスト) です。数値の範囲はシステムとキューの指定に依存します。(ノードあたりのコア数の指定はkugui,defaultのみ有効。ohtakaの場合は使われません。)
++
core
++1ノードあたり使用するコア数を指定します。数値の範囲はシステムとキューの指定に依存します。
+node
パラメータに同時にノードあたりのコア数が指定されている場合、core
の指定が優先します。(kugui,defaultのみ)+
elapsed
++バッチジョブの実行時間を指定します。書式は HH:MM:SS です。
++
options
++その他のバッチジョブオプションを指定します。書式は、ジョブスクリプトのオプション行の内容をリスト形式または複数行からなる文字列で記述したものです。各行の冒頭の指示語(
+#PBS
や#SBATCH
など)は含めません。以下に例を示します。+
+- +
SLURMの場合 (文字列で指定する例)
+++options: | + --mail-type=BEGIN,END,FAIL + --mail-user=user@sample.com + --requeue +- +
PBSの場合 (リストで指定する例)
+++options: + - -m bea + - -M user@sample.com + - -r y +
prologueセクションはタスク開始前に実行する内容を記述します。ライブラリやパスなど環境変数の設定等を行うのに利用できます。epilogueセクションは全タスク終了後に実行する内容を記述します。
++++
code
++処理内容をシェルスクリプトの記法で記述します。記述内容はバッチジョブスクリプト中に埋め込まれてバッチジョブ内で実行されます。
+
ジョブで実行する一連のタスクを、タスク名をキー、処理内容を値として記述するテーブルの形式で記述します。
+++キー
+++タスク名
+値
+++以下の項目からなるテーブル:
++++
description
++タスクの説明を記述します。コメントとして扱われます。
++
node
++並列度を指定します。指定方法は以下のいずれかです。
++
+- +
[ プロセス数, プロセスあたりのスレッド数 ]
- +
[ ノード数, プロセス数, プロセスあたりのスレッド数 ]
- +
ノード数
ノード数を指定した場合、その数のノードが排他的にジョブに割り当てられます。ノード数を指定しない1番目の形式の場合、使用コア数が1ノードに満たないときは複数のジョブがノードに詰めて割当られます。1ノード以上を使う場合は必要ノード数を占有して実行されます。
++
parallel
++ジョブ間で多重実行する場合は
+true
, 逐次実行する場合はfalse
を指定します。デフォルトはtrue
です。+
run
++タスクの処理内容をシェルスクリプトの記法で記述します。MPIプログラムまたは MPI/OpenMP ハイブリッドプログラムを実行する箇所は
+++srun prog [arg1, ...] +と記述します。
+srun
の他にmpirun
,mpiexec
のキーワードが有効です。このキーワードは、実際のバッチジョブスクリプト中では、並列実行のためのコマンド (srun
やmpirun
) とnode
パラメータで指定した並列度の設定に置き換えて記述されます。
ジョブのリストを指定します。ファイルはテキスト形式で、一行に一つのジョブ名を記述します(ディレクトリ名がジョブ名となります)。
+mollerでは、ジョブごとにディレクトリを用意し、ジョブ内の各タスクはディレクトリに移動して実行されます。ディレクトリはバッチジョブを実行するディレクトリの直下に配置されているものと仮定します。
+網羅計算のためのバッチジョブスクリプト生成ツール moller を使うには、入力ファイルとして実行内容を記述する構成定義ファイルを用意した後、プログラム moller を実行します。生成されたバッチジョブスクリプトを対象とするスーパーコンピュータシステムに転送し、バッチジョブを投入して計算を行います。
+以下では、 docs/tutorial/moller
ディレクトリにあるサンプルを例にチュートリアルを実施します。
構成定義ファイルにはバッチジョブで実行する処理の内容を記述します。 +ここで、バッチジョブとはスーパーコンピュータシステム等のジョブスケジューラに投入する実行内容を指します。それに対し、moller が対象とするプログラムの多重実行において、多重実行される一つのパラメータセットでの実行内容をジョブと呼ぶことにします。一つのジョブはいくつかの処理単位からなり、その処理単位をタスクと呼びます。moller ではタスクごとに多重実行し、タスクの前後で同期がとられます。
+ +以下に構成定義ファイルのサンプルを記載します。構成定義ファイルは YAMLフォーマットのテキストファイルで、実行するプラットフォームやバッチジョブのパラメータと、タスクの処理内容、前処理・後処理を記述します。
+name: testjob
+description: Sample task file
+
+platform:
+ system: ohtaka
+ queue: i8cpu
+ node: 1
+ elapsed: 00:10:00
+
+prologue:
+ code: |
+ module purge
+ module load oneapi_compiler/2023.0.0 openmpi/4.1.5-oneapi-2023.0.0-classic
+
+ ulimit -s unlimited
+
+ source /home/issp/materiapps/intel/parallel/parallelvars-20210622-1.sh
+
+jobs:
+ start:
+ parallel: false
+ run: |
+ echo "start..."
+
+ hello:
+ description: hello world
+ node: [1,1]
+ run: |
+ echo "hello world." > result.txt
+ sleep 2
+
+ hello_again:
+ description: hello world again
+ node: [1,1]
+ run: |
+ echo "hello world again." >> result.txt
+ sleep 2
+
+epilogue:
+ code: |
+ echo "done."
+ date
+
platformセクションでは、実行するプラットフォームの種類を指定します。この場合は、物性研システムB(ohtaka)での設定をしています。
+prologueセクションでは、バッチジョブの前処理を記述します。タスクを実行する前に実行する共通のコマンドラインを記述します。
+jobsセクションでは、タスクの処理内容を記述します。ジョブで実行する一連のタスクを、タスク名をキー、処理内容を値として記述するテーブルの形式で記述します。
+この例では、最初に"start..."を出力するタスクを start というタスク名で定義しています。
+ここでは parallel = false
に設定しています。この場合、ジョブ単位での並列は行われず、run
に記述した内容が逐次的に実行されます。
次に、"hello world."を出力するタスクを hello world というタスク名で定義しています。
+ここでは parallel
が設定されていないので、 paralle = true
として扱われます。この場合、ジョブ単位での並列が行われます。
+同様に、次に "hello world again." を出力するタスクを hello_again というタスク名で定義しています。
最後に、epilogueセクションでは、バッチジョブの後処理を記述します。タスクを実行した後に実行する共通のコマンドラインを記述します。
+仕様の詳細については ファイルフォーマット の章を参照してください。
+構成定義ファイル(input.yaml)を入力として moller を実行します。
+$ moller -o job.sh input.yaml
+
バッチジョブスクリプトが生成され出力されます。出力先は構成定義ファイル内のパラメータ、または、コマンドラインの -o または --output オプションで指定するファイルです。 +両方指定されている場合はコマンドラインパラメータが優先されます。いずれも指定がない場合は標準出力に書き出されます。
+必要に応じて mollerで生成したバッチジョブスクリプトを対象のシステムに転送します。 +なお、スクリプトの種類は bash スクリプトです。ジョブ実行時に使用するシェルを bash に設定しておく必要があります。(ログインシェルを csh系などにしている場合は注意)
+実行するジョブのリストを作成します。moller では、ジョブごとに個別のディレクトリを用意し、そのディレクトリ内で各ジョブを実行する仕様になっています。 +対象となるディレクトリのリストを格納したファイルを、たとえば以下のコマンドで、リストファイルとして作成します。
+$ /usr/bin/ls -1d * > list.dat
+
チュートリアルには、データセットとリストファイルを作成するユーティリティープログラムが付属しています。
+$ bash ./make_inputs.sh
+
を実行すると、 output
ディレクトリの下にデータセットに相当する dataset-0001
〜 dataset-0020
のディレクトリと、リストファイル list.dat
が作成されます。
mollerで生成したバッチジョブスクリプトをジョブスケジューラに投入します。この例ではジョブスクリプトと入力ファイルを output
ディレクトリにコピーし、 output
に移動してジョブを投入しています。
++++$ cp job.sh input.yaml output/ +$ cd output +$ sbatch job.sh list.dat +
ジョブが実行されると、リストに記載されたディレクトリにそれぞれ "result.txt" というファイルが生成されます。 +"result.txt" には、ジョブ実行結果の "hello world.", "hello world again." という文字列が出力されていることが確認できます。
+タスクの実行状況はログファイルに出力されます。ログを収集してジョブごとに実行状況を一覧するツール moller_status が用意されています。ジョブを実行するディレクトリで以下を実行します。
+$ moller_status input.yaml list.dat
+
引数には構成定義ファイル input.yaml とリストファイル list.dat を指定します。リストファイルは省略可能で、その場合はログファイルからジョブの情報を収集します。
+出力サンプルを以下に示します。
+| job | hello | hello_again |
+|--------------|---------|---------------|
+| dataset-0001 | o | o |
+| dataset-0002 | o | o |
+| dataset-0003 | o | o |
+| dataset-0004 | o | o |
+| dataset-0005 | o | o |
+| dataset-0006 | o | o |
+| dataset-0007 | o | o |
+| dataset-0008 | o | o |
+| dataset-0009 | o | o |
+| dataset-0010 | o | o |
+| dataset-0011 | o | o |
+| dataset-0012 | o | o |
+| dataset-0013 | o | o |
+| dataset-0014 | o | o |
+| dataset-0015 | o | o |
+| dataset-0016 | o | o |
+| dataset-0017 | o | o |
+| dataset-0018 | o | o |
+| dataset-0019 | o | o |
+| dataset-0020 | o | o |
+
「o」は正常終了したタスク、「x」はエラーになったタスク、「-」は前のタスクがエラーになったためスキップされたタスク、「.」は未実行のタスクを示します。 +今回は全て正常終了していることがわかります。
+タスクが失敗した場合、そのジョブ内の後続のタスクは実行されません。以下は、各タスクが 10% の確率で失敗するケースの実行例です。
+| job | task1 | task2 | task3 |
+|--------------|---------|---------|---------|
+| dataset_0001 | o | o | o |
+| dataset_0002 | o | x | - |
+| dataset_0003 | x | - | - |
+| dataset_0004 | x | - | - |
+| dataset_0005 | o | o | o |
+| dataset_0006 | o | o | o |
+| dataset_0007 | o | x | - |
+| dataset_0008 | o | o | o |
+| dataset_0009 | o | o | x |
+| dataset_0010 | o | o | o |
+| dataset_0011 | o | o | o |
+| dataset_0012 | o | o | o |
+| dataset_0013 | o | x | - |
+| dataset_0014 | o | o | o |
+| dataset_0015 | o | o | o |
+| dataset_0016 | o | o | o |
+| dataset_0017 | o | o | o |
+| dataset_0018 | o | o | o |
+| dataset_0019 | o | o | o |
+| dataset_0020 | o | o | o |
+
dataset_0003, dataset_0004 は task1 が失敗し、後続の task2, task3 は実行されていません。その他の dataset は task1 が成功し、次の task2 が実行されています。このように、各ジョブは他のジョブとは独立に実行されます。
+失敗したタスクを再実行するには、バッチジョブに retry のオプションをつけて再実行します。 +SLURMジョブスケジューラ (例: 物性研システムB) の場合は次のようにバッチジョブを投入します。
+$ sbatch job.sh --retry list.dat
+
PBSジョブスケジューラ (例: 物性研システムC) の場合はジョブスクリプトを編集し、 retry=0
の行を retry=1
に変更して、バッチジョブを再投入します。
| job | task1 | task2 | task3 |
+|--------------|---------|---------|---------|
+| dataset_0001 | o | o | o |
+| dataset_0002 | o | o | x |
+| dataset_0003 | o | x | - |
+| dataset_0004 | o | o | o |
+| dataset_0005 | o | o | o |
+| dataset_0006 | o | o | o |
+| dataset_0007 | o | o | o |
+| dataset_0008 | o | o | o |
+| dataset_0009 | o | o | o |
+| dataset_0010 | o | o | o |
+| dataset_0011 | o | o | o |
+| dataset_0012 | o | o | o |
+| dataset_0013 | o | o | o |
+| dataset_0014 | o | o | o |
+| dataset_0015 | o | o | o |
+| dataset_0016 | o | o | o |
+| dataset_0017 | o | o | o |
+| dataset_0018 | o | o | o |
+| dataset_0019 | o | o | o |
+| dataset_0020 | o | o | o |
+
エラーになったタスクのみ再実行されます。上記の例では、dataset_0003 は task1 が再実行され正常終了し、次の task2 の実行に失敗しています。dataset_0004 は task1, task2, task3 が正常に実行されています。task3 まで全て正常終了しているデータ・セットに対しては何も実行しません。
+なお、再実行の際にリストファイルは変更しないでください。リストファイル内の順番でジョブを管理しているため、変更すると正しく再実行されません。
+これは、量子多体問題の経路積分モンテカルロ法を実行するためのオープンソースソフトウェアパッケージである DSQSS を用いた moller
の例です。この例では、周期境界条件下の \(S=1/2\) (DSQSSの用語では \(M=1\)) および \(S=1\) (\(M=2\)) 反強磁性ハイゼンベルク鎖の磁気感受率 \(\chi\) の温度依存性を計算します。 moller
を使用することで、異なるパラメーター (\(M, L, T\)) の計算を並列に実行します。
この例は 公式チュートリアルの一つ に対応しています。
+moller
(HTP-tools)パッケージと DSQSS
がインストールされていることを確認してください。このチュートリアルでは、ISSP のスーパーコンピュータシステム ohtaka
を使用して計算を実行します。
データセットを準備する
+このパッケージに含まれるスクリプト make_inputs.sh
を実行します。
$ bash ./make_inputs.sh
+
これにより、 output
ディレクトリが作成されます(すでに存在する場合は、まず削除し、再度作成します)。 output
の下には、各パラメーター用の作業ディレクトリ(例: L_8__M_1__T_1.0
)が生成されます。ディレクトリのリストは list.dat
ファイルに書き込まれます。
moller
を使用してジョブスクリプトを生成する
ジョブ記述ファイルを使用してジョブスクリプトを生成し、 job.sh
というファイル名で保存します。
$ moller -o job.sh input.yaml
+
次に、job.sh
を output
ディレクトリにコピーし、 output
ディレクトリに移動します。
バッチジョブを実行する
+ジョブリストを引数としてバッチジョブを送信します。
+$ sbatch job.sh list.dat
+
状態を確認する
+タスク実行の状態は moller_status
プログラムによってまとめられます。
$ moller_status input.yaml list.dat
+
結果を集める
+計算が終了した後、結果を以下のようにして集めます。
+$ python3 ../extract_result.py list.dat
+
このスクリプトは、\(M\), \(L\), \(T\), \(\chi\) の平均、および \(\chi\) の標準誤差を含む 5 列のテキストファイル result.dat
に結果を書き込みます。
結果を視覚化するために、GNUPLOT ファイル plot_M1.plt
および plot_M2.plt
が利用可能です。
$ gnuplot --persist plot_M1.plt
+$ gnuplot --persist plot_M2.plt
+
+
\(S=1/2\) と \(S=1\) AFH 鎖の主な違いは、励起ギャップが消失するか (\(S=1/2\))、残るか (\(S=1\)) のどちらかです。 +これを反映して、非常に低温領域での磁気感受率は、有限になる (\(S=1/2\)) か、消失する (\(S=1\)) かのどちらかです。 +\(S=1/2\) の場合には、有限サイズ効果によりスピンギャップが開き、そのため小さいチェーンの磁気感受率が低下します。
+これは、量子多体問題の正確な対角化方法を実行するためのオープンソースソフトウェアパッケージである HPhi を用いた moller
の例です。
+この例では、周期境界条件下の \(S=1/2\) (2S_1
ディレクトリ) と \(S=1\) (2S_2
) 反強磁性ハイゼンベルク鎖の励起ギャップ \(\Delta\) のシステムサイズ依存性を計算します。
+moller
を使用することで、異なるシステムサイズの計算を並列に実行します。
+これはHPhi 公式チュートリアルの セクション 1.4 に対応しています。
moller
(HTP-tools)パッケージと HPhi
がインストールされていることを確認してください。このチュートリアルでは、ISSP のスーパーコンピュータシステム ohtaka
を使用して計算を実行します。
データセットを準備する
+2S_1
, 2S_2
に含まれるスクリプト make_inputs.sh
を実行します。
$ bash ./make_inputs.sh
+
L_8
, L_10
, ..., L_24
(2S_2
の場合は L_18
まで) の作業ディレクトリが生成されます。
+ディレクトリのリストは list.dat
ファイルに書き込まれます。
+さらに、作業ディレクトリからエネルギーギャップを集めるためのシェルスクリプト、 extract_gap.sh
が生成されます。
moller
を使用してジョブスクリプトを生成する
input.yaml
からジョブスクリプトを生成し、 job.sh
というファイル名で保存します。
$ moller -o job.sh input.yaml
+
バッチジョブを実行する
+ジョブリストを引数としてバッチジョブを送信します。
+$ sbatch job.sh list.dat
+
状態を確認する
+タスク実行の状態は moller_status
プログラムによって確認できます。
$ moller_status input.yaml list.dat
+
結果を集める
+計算が終了した後、ジョブからエネルギーギャップを以下のようにして集めます。
+$ bash extract_gap.sh
+
このスクリプトは、長さ \(L\) とギャップ \(\Delta\) のペアをテキストファイル gap.dat
に書き込みます。
結果を視覚化するために、Gnuplot ファイル gap.plt
が利用可能です。
+このファイルでは、得られたギャップデータが予想される曲線によってフィットされます。
および
+グラフは次のコマンドで描画できます。
+$ gnuplot --persist gap.plt
+
\(S=1/2\) の場合、対数補正によりスピンギャップは有限のままです。一方で、\(S=1\) の場合、外挿値 \(\Delta_\infty = 0.417(1)\) は以前の結果(例えば、QMC による \(\Delta_\infty = 0.41048(6)\) (Todo and Kato, PRL 87, 047203 (2001)))とよくあっています。
++ 複数の単語を検索すると、次を含む一致のみが表示されます + すべての用語。 +
+ + + + + + +