...
Python is available on all Pawsey systems. Developers of Python codes should pay special attention to computational performance and always consider using available high-performance Python tools. This section of the documentation includes the description of selected Python libraries and extensions which are particularly useful for increasing performance of a Python code.
Versions installed in Pawsey systems
To check the current installed versions, use the module avail
command (current versions may be different from content shown here):
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | DJango |
---|
title | Terminal 1. Checking for installed versions |
---|
| $ module avail python
--------------------- /software/setonix/2024.05/modules/zen3/gcc/12.2.0/programming-languages ---------------------
python/3.9.15 python/3.11.6 (D)
--------------------------------------- /opt/cray/pe/lmod/modulefiles/core ----------------------------------------
cray-python/3.9.13.1 cray-python/3.10.10 (D) |
|
We recommend the use of python installed by Pawsey instead of cray-python
.
Many scientific and managing tools have been also installed in our software stack. These are named with the prefix py-
, and sometimes their flavour is also identified by a suffix -py<VERSION>
after the version corresponding to the tool itself (current versions may be different from content shown here):
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | DJango |
---|
title | Terminal 1. Checking for installed versions |
---|
| $ module avail py-
---------------------- /software/setonix/2024.05/modules/zen3/gcc/12.2.0/astro-applications -----------------------
py-astropy/4.2.1 py-astropy/5.1 (D) py-emcee/3.1.1 py-funcsigs/1.0.2
--------------------------- /software/setonix/2024.05/modules/zen3/gcc/12.2.0/utilities ---------------------------
py-boto3/1.26.26 py-setuptools/59.4.0-py3.9.15 py-setuptools/68.0.0-py3.11.6 (D)
py-pip/23.1.2-py3.9.15 py-setuptools/59.4.0-py3.11.6
py-pip/23.1.2-py3.11.6 (D) py-setuptools/68.0.0-py3.9.15
------------------------ /software/setonix/2024.05/modules/zen3/gcc/12.2.0/python-packages ------------------------
py-cython/0.29.36 py-ipython/8.14.0 py-numpy/1.24.4 py-scikit-learn/1.3.2
py-cython/3.0.4 (D) py-matplotlib/3.8.1 py-numpy/1.26.1 (D) py-scipy/1.11.3
py-dask/2023.4.1 py-mpi4py/3.1.5-py3.11.6 py-pandas/1.5.3
py-h5netcdf/0.10.0 py-netcdf4/1.6.2 py-pandas/2.1.2 (D)
py-h5py/3.8.0 py-numba/0.57.0 py-plotly/5.14.1
------------------------ /software/setonix/2024.05/modules/zen3/gcc/12.2.0/developer-tools ------------------------
py-hatchet/1.3.1 |
|
Parallel programming
Code developers and users using Python are not limited to running serial applications. Modern Python libraries exist that enable the use of distributed-memory and shared-memory parallelisation. The optimal parallelisation approach is highly application- and architecture-dependent. Two well-known Python parallelisation packages supported at Pawsey are mpi4py
and Cython/OpenMP
.
...
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | DJango |
---|
title | Terminal 1. Run mpi4py code |
---|
| $ salloc -N 1 -n 4 -p debug -t 0:01:00
$ module load python/3.9.7<VERSION> py-numpy/1.20.3<VERSION> py-mpi4py/3.1.2<VERSION>
$ srun -n 4 python mpi.py
Rank 0 has sum of ranks [6]; Answer = 6
Rank 2 has sum of ranks [6]; Answer = 6
Rank 1 has sum of ranks [6]; Answer = 6
Rank 3 has sum of ranks [6]; Answer = 6 |
|
...
Beside allowing the running of C (or C-like) code in a Python script (see Mixing Python and C via Cython), Cython also allows the use of OpenMP threads to achieve shared-memory parallelisation. In this approach, a program can spawn multiple threads to perform work. All of these threads must reside on the same compute node, as they use the shared global physical memory to pass information. OpenMP is a quick and efficient way to add parallelisation to an existing serial application, and Cython enables this possibility for Python code.
...
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | DJango |
---|
title | Terminal 2. Build a Cython/OpenMP object |
---|
| $ salloc -N 1 -n 1 -p debug -t 0:05:00
$ module load python/3.9.7<VERSION> py-cython/<VERSION>
$ srun python setup.py build_ext --inplace |
|
...
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | DJango |
---|
title | Terminal 3. Run Cython/OpenMP code |
---|
| $ salloc -N 1 -n 1 -c 4 -p debug -t 0:01:00
$ module load python/3.9.7<VERSION> py-cython/0.29.24<VERSION>
$ export OMP_NUM_THREADS=4
$ srun -c 4 python script.py
Estimated value of pi = 3.1415926535896825
Error = 1.1057821325266559e-13
Compute time = 0.724 seconds |
|
...
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | DJango |
---|
title | Terminal 5. Run NumPy code |
---|
| $ salloc -N 1 -n 1 -p debug -t 0:05:00
$ module load python/3.9.7<VERSION> py-numpy/1.20.3<VERSION>
$ srun python matrix.py
[ 11.32995843 15.18201852 13.1489202 12.46920531]
[[ -5.52631579e-01 1.13157895e+00 1.57894737e-01 -1.84210526e-01]
[ -1.11111111e-01 5.55555556e-01 -6.76965259e-18 -2.22222222e-01]
[ 7.30994152e-02 -1.54970760e-01 -5.26315789e-02 1.72514620e-01]
[ 3.15789474e-01 -7.89473684e-01 5.26315789e-02 1.05263158e-01]]
0.00292397660819
[ 0.63860313 -0.45638416 0.05517347 -0.18183689]
[[ 0.60206445 0.85629788 -0.619295 -0.00817806]
[ 0.57685743 -0.0186308 -0.31291905 -0.21176471]
[-0.19459178 0.05700502 -0.60213224 0.68340563]
[-0.51661198 -0.51298856 -0.39495839 -0.69860259]] |
|
...
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | DJango |
---|
title | Terminal 6. Run SciPy code |
---|
| $ salloc -N 1 -n 1 -p debug -t 0:05:00
$ module load python/3.9.7<VERSION> py-numpy/1.20.3<VERSION> py-scipy/1.7.1<VERSION>
$ srun python fft.py
[ 4.50000000+0.j 2.08155948-1.65109876j -1.83155948+1.60822041j
-1.83155948-1.60822041j 2.08155948+1.65109876j] |
|
...
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | DJango |
---|
title | Terminal 7. Build a Cython object |
---|
| $ salloc -N 1 -n 1 -p debug -t 0:05:00
$ module load python/3.9.7<VERSION> py-cython/0.29.24<VERSION>
$ srun python setup.py build_ext --inplace |
|
...
Column |
---|
|
Code Block |
---|
language | bash |
---|
theme | DJango |
---|
title | Terminal 8. Run Cython code |
---|
| $ salloc -N 1 -n 1 -p debug -t 0:01:00
$ module load python/3.9.7<VERSION> py-cython/0.29.24<VERSION>
$ srun python script.py
Estimated value of pi = 3.1415926535904264
Error = 6.332712132461893e-13
Compute time = 0.547 seconds
|
|
...