An Ansible role that installs and configures an environment for running the AiiDA common-workflows on Linux Ubuntu (with a bash shell).
The primary goal is to create an environment that a user can enter and, without any other steps, run commands like:
aiida-common-workflows launch relax quantum_espresso -S Si -X qe.pw -n 2For all the available (open-source) simulation codes: abinit, bigdft (to come), cp2k, fleur, nwchem, qe, siesta, wannier90, yambo.
The key components are:
- PostgreSQL is installed system wide, with auto-start service.
- RabbitMQ is installed system wide, with auto-start service.
- Conda installed system wide (as miniforge), with activation on terminals
- The AiiDA python environment installed into the
aiidaConda environment, including theaiida-common-workflowspackage, dependent plugins, andjupyterlab, then a profile is created. - Each simulation code, and their dependencies, are installed into their own Conda environment.
- Then an AiiDA
Codeis created for each code executable
- Then an AiiDA
- The
aiida-pseudopackage is used to install the requisite pseudo-potentials.
The of the conda package and environment manager allows for fast installation of pre-compiled simulation codes, which are isolated from each other - ensuring correct use of dependency versions and environmental variables etc - but with sharing of common dependencies across environments (by use of hard-links), ensuring optimum memory usage.
ansible-galaxy install marvel-nccr.aiida_cws
See defaults/main.yml
- hosts: servers
roles:
- role: marvel-nccr.aiida_cws
vars:
aiida_timezone_name: Europe/Zurich # to set a certain timezone for AiiDA
aiida_create_swapfile: true # create a swapfile for RAM overflow, non-containers only
aiida_allow_mpi_on_root: true # containers onlyIf you want to install SLURM and use it as the scheduler, you can use e.g.:
- hosts: servers
roles:
- role: marvel-nccr.slurm
- role: marvel-nccr.aiida_cws
vars:
aiida_timezone_name: Europe/Zurich
aiida_create_swapfile: true
aiida_conda_code_computer: local_slurm_condaTo optimise the disk usage, before packaging, there are a few extra steps you can take. These are not included in the role, since they are not idempotent, and so should only be run after a full build:
- name: Run the equivalent of "apt-get clean"
apt:
clean: yes
- name: wipe apt lists
become: true
command: "rm -rf /var/lib/apt/lists/*"
- name: wipe user cache
file:
state: absent
path: "~/.cache"
- name: wipe root cache
become: true
file:
state: absent
path: "~/.cache"Once logged in to a terminal, the base environment of Conda is activated. To control the conda environments, you can use the conda command, or the mamba command is a drop-in replacement, for faster installation of packages. FOr a brief introduction to Conda, see the getting started tutorial.
The alias listenvs (for conda env --info) can be used to list the available environments:
(base) root@instance:/# listenvs
# conda environments:
#
base * /root/.conda
abinit /root/.conda/envs/abinit
aiida /root/.conda/envs/aiida
cp2k /root/.conda/envs/cp2k
fleur /root/.conda/envs/fleur
nwchem /root/.conda/envs/nwchem
qe /root/.conda/envs/qe
siesta /root/.conda/envs/siesta
wannier90 /root/.conda/envs/wannier90
yambo /root/.conda/envs/yamboTo enter an environment, use the alias workon (for conda actiavate):
(base) root@instance:/# workon aiida
(aiida) root@instance:/#You can see what is installed in that environment, using conda list:
(aiida) root@instance:/# conda list
# packages in environment at /root/.conda/envs/aiida:
#
...
aiida-core 1.6.8 pyh6c4a22f_2 conda-forge
...
python 3.8.13 h582c2e5_0_cpython conda-forge
...This exposes the installed executables, such as verdi (with tab-completion) and aiida-common-workflows:
(aiida) root@instance:/# verdi status
✔ config dir: /root/.aiida
✔ profile: On profile generic
✔ repository: /root/.aiida/repository/generic
✔ postgres: Connected as aiida@localhost:5432
✔ rabbitmq: Connected to RabbitMQ v3.6.10 as amqp://guest:[email protected]:5672?heartbeat=600
✔ daemon: Daemon is running as PID 18513 since 2022-07-23 18:40:31You'll note that the general profile should already be set up, with connections to running PostgreSQL, RabbitMQ and AiiDA daemon systems services:
(aiida) root@instance:/# systemctl --type=service | grep -E '(rabbitmq|postgres|aiida)'
[email protected] loaded active running AiiDA daemon service for profile generic
[email protected] loaded active running PostgreSQL Cluster 10-main
rabbitmq-server.service loaded active running RabbitMQ Messaging ServerAiiDA codes are set up to run simulation code executables:
(aiida) root@instance:/# verdi code list
# List of configured codes:
# (use 'verdi code show CODEID' to see the details)
* pk 1 - abinit.main@local_direct_conda
* pk 2 - cp2k.main@local_direct_conda
* pk 3 - fleur.main@local_direct_conda
* pk 4 - fleur.inpgen@local_direct_conda
* pk 5 - nwchem.main@local_direct_conda
* pk 6 - qe.cp@local_direct_conda
* pk 7 - qe.neb@local_direct_conda
* pk 8 - qe.ph@local_direct_conda
* pk 9 - qe.pp@local_direct_conda
* pk 10 - qe.pw@local_direct_conda
* pk 11 - siesta.main@local_direct_conda
* pk 12 - wannier90.main@local_direct_conda
* pk 13 - yambo.main@local_direct_condaThese are set up use conda run -n env_name /path/to/executable to run the executable within the correct environment.
Inside the aiida environment, you can launch Jupyter Lab with the jupyter lab command:
(aiida) root@instance:/# jupyter labIf using the Docker container, you should add the following options:
(aiida) root@instance:/# jupyter lab --allow-root --ip=0.0.0.0You can manage what jupyter servers are running with:
(aiida) root@instance:/# jupyter server listThis role uses Molecule and Docker for tests.
After installing Docker:
Clone the repository into a package named marvel-nccr.aiida_cws (the folder must be named the same as the Ansible Galaxy name)
git clone https://github.com/marvel-nccr/ansible-role-aiida-cws marvel-nccr.aiida_cws
cd marvel-nccr.aiida_cwsThen run:
pip install -r requirements.txt # Installs molecule
molecule test # runs testsor use tox (see tox.ini):
pip install tox
toxCode style is formatted and linted with pre-commit.
pip install pre-commit
pre-commit run -allDeployment to Ansible Galaxy is automated via GitHub Actions.
Simply tag a release vX.Y.Z to initiate the CI and release workflow.
Note, the release will only complete if the CI tests pass.
MIT
Please direct inquiries regarding Quantum Mobile and associated ansible roles to the AiiDA mailinglist.
-
Add "User Guide" inside the build (in desktop folder)
-
move to building docker with tini as PID 1
- What system service manager to use in place of systemd? (krallin/tini#175)
-
jupyter lab launcher
-
rest api service
-
check everything still works with non-root user install
-
migrate tasks from
marvel-nccr.simulationbase(understandhostname.yml, which is non-container only, andclean.yml)- double-check when to use
apt: cleanandapt: upgrade, etc
- double-check when to use
-
Get https://github.com/quanshengwu/wannier_tools on Conda, to replace
marvel-nccr.wannier_tools -
allow for source install of aiida-core (as previous)
-
output "raw" pseudo-potential files to aiida_data_folder_user
-
running
apt: upgrade: truedoes actually allow for timezone to be set -
run code tests (how to check success aiidateam/aiida-common-workflows#289?):
aiida-common-workflows launch relax abinit -S Si -X abinit.main -n 2✅- although issues with
abipyandThe netcdf library does not support parallel IOandnkpt*nsppol (29) is not a multiple of nproc_spkpt (2)
- although issues with
aiida-common-workflows launch relax cp2k -S Si -X cp2k.main -n 1✅- But
-n 2fails ❌ - quite slow to run as well
- But
aiida-common-workflows launch relax fleur -S Si -X fleur.main -n 2 2✅aiida-common-workflows launch relax quantum_espresso -S Si -X qe.pw -n 2✅aiida-common-workflows launch relax siesta -S Si -X siesta.main -n 2❌Block Chemical_species_label does not exist.- what is difference between 4.1.5 and MaX-1.2.0? (https://gitlab.com/siesta-project/siesta/-/wikis/Guide-to-Siesta-versions)
aiida-common-workflows launch relax nwchem -S Si -X nwchem.main -n 2❌- The stdout output file was incomplete.
- awaiting conda packages:
aiida-common-workflows launch relax bigdft ...(bigdftconda-forge/staged-recipes#19683) ❓yambocan also be installed but not in common workflows to test. (aiida-yambo) ❓
-
aiida-gaussianandaiida-common-workflowneed to update their dependency pinning of pymatgen to allow 2022, to be compatible with the latestabipy=0.9, alsoabipyshould be a direct dependency ofaiida-abinit. -
for common workflow group:
- maintainership of feedstocks
- confirm ranges of code versions compatibilities
- check on use of
OMP_NUM_THREADS=1(and other env vars) - get all to insure they are using latest pymatgen (2022), see https://pymatgen.org/compatibility.html
- update to aiida-core v2