{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Calculations using remote computers\n", "===================================\n", "\n", "*This is a second part in the tutorial series. Read the first tutorial to understand all material presented here.*\n", "\n", "Using remote computers requires some additional configuration and slightly different approach to the process.\n", "The initial setup is identical and its description will not be repeated here. We will move directly to the configuration of the QE-util package. Most of the configuration is pre-packaged in the `RemoteQE` calculator object and for typical supercomputing setups does not need any changes. You can review the variables in the `RemoteQE` if you need any modifications to be made." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Import the basic libraries\n", "\n", "# ASE system\n", "import ase\n", "from ase import Atom, Atoms\n", "from ase import io\n", "from ase.lattice.spacegroup import crystal\n", "\n", "# Spacegroup/symmetry library\n", "from pyspglib import spglib\n", "\n", "# iPython utility function\n", "from IPython.core.display import Image" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "# Import the remote execution tools from the qe-util package\n", "from qeutil import RemoteQE" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Configuring for remote execution\n", "--------------------------------\n", "\n", "The basic idea of using a remote computing system for a calculation revolves around submitting jobs to the queue and collecting the results. The `RemoteQE` calculator is pre-configured for the most common case, which is not the most effective one but is almost guaranteed to work on any modern Linux installation and most of other Unix-based systems. The only external requirements are availability of the `ssh` and `rsync` tools (common in modern distributions) and proper setup of key-authenticated login between the local and remote machine.\n", "\n", "**Remember to transfer the pseudopotential directory to the remote machine!**\n", "\n", "Private Key authentication\n", "--------------------------\n", "\n", "For the data transfer to work you need to connect your accounts on local and remote machine. The procedure is quite simple. You need to generate your private-public key pair. You may have done it in the past. Check the `.ssh` directory (note the dot in the front) for `id_rsa` and `id_rsa.pub` files. If they are present skip the key generation part.\n", "\n", "1. **Key pair generation**\n", "\n", " ssh-keygen\n", " \n", " Accept default answers to the questions with the `enter` key.\n", " \n", " \n", "2. **Account connection**\n", "\n", " ssh-copy-id user@host\n", " \n", " Replace the `user@host` by your account data. After authenticating to the remote system you should be able to log in from your local machine to the remote one with private key authentication. \n", " \n", " **Remember that from now on the security of your remote account is connected with the security of your local machine. You need to have proper password authentication on the local machine and keep it secure.**\n", " \n", "\n", "Adaptation for your setup\n", "-------------------------\n", "\n", "The rest of the configuration is easy. Just follow the example below. Usually adaptation for your particular setup will be quite minimal. Just put your user name into `RemoteQE.user` variable, and change the `RemoteQE.host` variable to the name of the machine you are working with. Copy your pseudopotential directory to the remote machine and create working directory locally and remotely. The only non-trivial part of the configuration is a PBS script for the particular system present on your machine. For example for the `bugaboo.westgrid.ca` this script will look like this:\n", "\n", " #!/bin/bash \n", " #PBS -r n \n", " #PBS -l walltime=140:00:00 \n", " #PBS -l pmem=8000m \n", " #######################\n", " cd $PBS_O_WORKDIR\n", " echo \"PWscf started at: `date`\" \n", " %(command)s\n", " echo \"Run finished at: `date`\"\n", " \n", "Further, you need to set up your access and host configuration info. To avoid repeating this procedure in each notebook you can put all definitions regarding one machine into a single file: `host.py` and just import this file at the start of your session. The `host.py` file would look similar to the following configuration:\n", "\n", " #!/usr/bin/python\n", "\n", " from qeutil import RemoteQE\n", " \n", " # Access info\n", " RemoteQE.user='user'\n", " RemoteQE.host='host.example.ca'\n", " \n", " # Working directories: local and remote\n", " RemoteQE.wdir='/home/user/calc/'\n", " RemoteQE.rdir='calc/'\n", " \n", " # The job running script.\n", " # This is specific to the particular host\n", " # You need to replace it by the proper script for your machine.\n", " # Usually only module loding part changes, but sometimes the modifications need to be more extensive.\n", " RemoteQE.pbs_template='''#!/bin/bash\n", " \n", " cd $PBS_O_WORKDIR\n", " \n", " echo \"QE started at: `date`\" \n", " %(command)s\n", " echo \"QE finished at: `date`\n", " '''\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Now simply import the configuration.\n", "# The name of the file is host.py in this case.\n", "import host" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Single calculation\n", "------------------\n", "\n", "We start with a single calculation. The same stress tensor calculation from the first example. We will just execute it on the remote machine." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Stup the SiC crystal\n", "# Create a cubic crystal with a spacegroup F-43m (216)\n", "a=4.36\n", "cryst = crystal(['Si', 'C'],\n", " [(0, 0, 0), (0.25, 0.25, 0.25)],\n", " spacegroup=216,\n", " cellpar=[a, a, a, 90, 90, 90])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "# Check the spacegroup (symmetry) of our creation\n", "spglib.get_spacegroup(cryst)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "'F-43m (216)'" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "# Create a Quantum Espresso calculator for our work. \n", "# This object encapsulates all parameters of the calculation, \n", "# not the system we are investigating.\n", "qe=RemoteQE(label='Remote',\n", " kpts=[4,4,4],\n", " xc='pz', # Exchange functional type in the name of the pseudopotentials\n", " pp_type='vbc', # Variant of the pseudopotential\n", " pp_format='UPF', # Format of the pseudopotential files\n", " ecutwfc=70,\n", " pseudo_dir='../pspot',\n", " use_symmetry=True,\n", " procs=8) # Use 8 cores for the calculation\n", "\n", "# Check where the calculation files will reside on the local machine.\n", "print qe.directory" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "calc/Remote.h87LBH\n" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "# Assign the calculator to our system\n", "cryst.set_calculator(qe)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "# Run the calculation to get stress tensor (in Voigt notation, in eV/A^3) and pressure (in kBar)\n", "# Do the same but get the results in GPa\n", "# Note that this time we get the results immediately. \n", "# We did not change the system, so it is not necessary to repeat the calculation.\n", "print \"Stress tensor (Voigt notation, GPa):\", cryst.get_stress()/ase.units.GPa\n", "print \n", "print \"Stress tensor (Tensor notation, GPa):\"\n", "print cryst.get_stress(voigt=False)/ase.units.GPa\n", "print\n", "print \"External pressure (GPa):\", cryst.get_isotropic_pressure(cryst.get_stress())*1e-4" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Stress tensor (Voigt notation, GPa): " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "[ 3.549 3.549 3.549 -0. 0. 0. ]\n", "\n", "Stress tensor (Tensor notation, GPa):\n", "[[ 3.549 0. 0. ]\n", " [ 0. 3.549 -0. ]\n", " [ 0. -0. 3.549]]\n", "\n", "External pressure (GPa): -3.549\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Series of calculations\n", "----------------------\n", "\n", "The real power of the remote execution in the computing center comes with ability of using parallel computation of many jobs on many processors. Using RemoteQE we can run a series of calculations in parallel. \n", "\n", "For example we can again find a minimum of energy of our crystal.\n", "To do this we need to generate a series of structures with various lattice constants, calculate the energy and stress for each and collect the results. Since we will submit all jobs at once the calculation will be finish quicker.\n", "\n", "First we need to create the list of structures." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# The list for crystals \n", "systems=[]\n", "\n", "# Loop over scales from 98% to 102% lattice constant. \n", "# 11 structures\n", "for x in linspace(0.98,1.02,11):\n", " \n", " # Structure scaled by the x factor\n", " cr=Atoms(cell=x*cryst.get_cell(),\n", " numbers=cryst.get_atomic_numbers(),\n", " scaled_positions=cryst.get_scaled_positions(), pbc=True)\n", " \n", " # Remote calculator for each structure\n", " cqe=RemoteQE(label='CldP',\n", " kpts=[8,8,8],\n", " xc='pz', # Exchange functional type in the name of the pseudopotentials\n", " pp_type='vbc', # Variant of the pseudopotential\n", " pp_format='UPF', # Format of the pseudopotential files\n", " ecutwfc=70,\n", " pseudo_dir='../pspot',\n", " use_symmetry=True,\n", " procs=8) # Use 8 cores for the calculation\n", " cr.set_calculator(qe.copy())\n", " systems.append(cr)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "# Compute stresses for all systems in parallel\n", "qe.ParallelCalculate(systems,properties=['stress']);" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Launching:" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 2" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 3" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 4" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 5" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 6" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 7" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 8" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 9" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 10" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 11" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " Done:" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 2" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 3" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 4" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 5" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 6" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 7" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 8" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 9" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 10" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 11" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "# Extract the results from the objects in the systems list\n", "result=array([[s.get_cell()[0,0], s.get_potential_energy(), 1e-4*s.get_isotropic_pressure(s.get_stress())] for s in systems])\n", "\n", "# Print out the results\n", "print \" A Energy (eV) Pressure (GPa) \"\n", "print \"--------------------------------------\"\n", "for v in result:\n", " print \"% 5.03f %+6.4f % +8.3f \" % tuple(v)\n", "\n", "# Prepare the collected data for plotting\n", "# This will make an array (matrix) out of a list and transpose it for easier access\n", "result=array(result).T\n", "\n", "# Let us save our calculated data to a file. \n", "# To have data in columns we need to transpose the array.\n", "savetxt('e+p-vs-a.dat',result.T)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " A Energy (eV) Pressure (GPa) \n", "--------------------------------------\n", " 4.273 -263.0975 +10.952 \n", " 4.290 -263.1144 +7.770 \n", " 4.308 -263.1259 +4.723 \n", " 4.325 -263.1334 +1.828 \n", " 4.343 -263.1371 -0.915 \n", " 4.360 -263.1355 -3.549 \n", " 4.377 -263.1309 -6.033 \n", " 4.395 -263.1223 -8.402 \n", " 4.412 -263.1096 -10.664 \n", " 4.430 -263.0939 -12.788 \n", " 4.447 -263.0732 -14.849 \n" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "# Let us plot the results and save the figure\n", "figsize(12,7)\n", "plot(result[0],result[1],'o-',label='Total internal energy')\n", "legend()\n", "xlabel('Lattice vector length ($\\AA$)')\n", "ylabel('Energy (eV)')\n", "savefig('e-vs-a.pdf')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nM89o8eLFuu+++9SnTx81b94867m6detq9+7dRR7yWtExd00ffCDNnCmtXSsVY8FOAACyjBwp7dwp\nffEFq7C4G6esyvLhhx+qa9euKl26dI7nTp06pQoVKhQqQFGiMHdNFy9Kd98tPfGE1L+/6TQAALiG\nTZukjh0ZYXFXTinMN2/eLNvffmUrX768brjhBhUvXrxQJy9qFOau6+efpTZtrD8DAkynAQDArNRU\nqWlTa93y7t1Np8G1cEph3qJFC23evFmNGjWSJP38889q2LChTp8+rRkzZqht27aFClCUKMxd2wsv\nSElJ0iefmE4CAIBZI0ZIu3dLn3/OCIu7csrFn9WrV9fWrVu1efNmbd68WVu3btVNN92kFStWaPjw\n4YU6Obzbyy9L330nrVplOgkAAOZs3CjNmmUtK0xR7t3yLcx3796thg0bZj1u0KCBdu3apZCQkBwj\nLsDVKF1amjZNGjDAegsPAABvk5pqrcIyeTKjnShAYd6wYUMNGDBAq1evVkJCggYOHKgGDRooLS1N\nvr6+zsgID9axo3TzzdKECaaTAADgfFFRUv36EitQQyrAjPn58+f1zjvvaO3atZKkO++8UwMHDpS/\nv7/++usvlS1b1ilBrwUz5u4hMVFq0kRat06qXdt0GgAAnGPDBumhh6xVWOiWu78iv/gzIyNDYWFh\n+uabbwp1ElMozN3HW29JcXHSihXM1wEAPF9qqtWUioqiW+4pivziz+LFi6tYsWI6depUoU4C5GfQ\nIOnECSkmxnQSAACK3pgxUsOGUteuppPAleS7EHnp0qV1yy23KCwsLOsmQzabTVOmTCnycPAexYtL\n774rPfyw9MADUsWKphMBAFA01q+XZs+WfvqJd4mRXb4z5h999JG14/++c+x2u2w2myIjI4s8XGEx\nyuJ+Bg6U7HZrySgAADzNpRGWsWPplnsap9xgSJLOnTunQ4cOqV69eoU6mbNRmLufU6ekBg2kL76Q\nWrQwnQYAAMcaPlzav1/67DPTSeBoTrnB0KJFi9SkSRO1a9dOkvTjjz8qIiKiUCcF8lKhgjRpkvTU\nU1JGhuk0AAA4zvr10scfS++8YzoJXFW+hXlUVJQ2bNigiv8b+m3SpIl+++23Ig8G79Wtm1SlisRl\nDAAAT3H+vHUjoalTpapVTaeBq8q3MPf19VWFChWyv6hYvi8DrpnNJk2fLr32mrXGOQAA7u7ll6VG\njaRHHzWdBK6sQHf+/PTTT5WRkaG9e/dq0KBBatWqlTOywYvVri0NHmx9AADgztatkz75hBEW5C/f\nwnzq1Knavn27/Pz81L17d5UrV05vv/22M7LBy73wgrRjh7RokekkAABcm/PnpV69pGnTrDFN4EoK\ntCqLu2JVFvf39dfSk09K27dL/1tGHwAAt/H889Lhw9K8eaaToKg5ZbnE3bt364033tCBAweU8b9l\nMmw2m77++utCndgZKMw9Q8+e0vXXS//+t+kkAAAU3PffS126WDcSqlzZdBoUNacU5o0aNdKAAQN0\n2223ycfHJ+vETZs2LdSJnYHC3DMcOybdcou0apX1JwAAru78eenWW6XXX5c6dzadBs7glMK8adOm\n2rx5c6FOYgqFued4/33po4+k776TWBQIAODqnntOOnJEiokxnQTO4pQbDD344IN65513dPToUaWk\npGR9AM7Up4/158yZZnMAAJCXuLg1atv2JTVpEqVp017Sgw+uMR0JbibfjnlwcLBsNluO7fv377/m\nk6akpOixxx7TwYMHFRwcrAULFuRYK12S4uPjNXToUGVmZqpPnz564YUXsj0/adIkDRs2TH/88Ycq\nVaqU4/V0zD3LTz9J998v/fILN2cAALiWuLg1GjJkmfbti87aFhIySpMnt1WHDvcYTAZnccooS1EY\nPny4KleurOHDh2vChAk6efKkxo8fn22fzMxM1a1bVytXrlRgYKBuv/12xcTEqH79+pKkxMRE9e3b\nV7t379bmzZspzL3EsGHWzPnHH5tOAgDA/2vb9iUtXz4ul+2jFR//qoFEcLYiHWX592VLYHz22WfZ\nnhs5cmShTrpo0SJFRkZKkiIjI7Vw4cIc+2zcuFG1atVScHCwfH191a1bN8XGxmY9/+yzz2bLCO8w\nZoy0erX0zTemkwAA8P/S0ornuj011cfJSeDO8izMYy67WuG1117L9tzSpUsLddJjx44pICBAkhQQ\nEKBjx47l2CcpKUk1atTIehwUFKSkpCRJUmxsrIKCgtSoUaNC5YD7KVNGmjpVeuopKS3NdBoAACxp\naRm5bvf3z3RyEriz3H+9c4CwsDAlJyfn2B4dHZ3tsc1my3WGPbdtknT+/Hm99tprWrFiRda2K71t\nEBUVlfV5aGioQkND80kOVxcRIc2aZa1rPnq06TQAAG939Ki0d2+4AgJG6dixy2fMR2rQoHYGk6Eo\n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\n", "text": [ "" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This replicates our result from the first tutorial." ] } ], "metadata": {} } ] }