Python library implementing linear operators with MPI
Project description
Distributed linear operators and solvers
Pylops-mpi is a Python library built on top of PyLops, designed to enable distributed and parallel processing of large-scale linear algebra operations and computations.
Installation
To install pylops-mpi, you need to have Message Passing Interface (MPI) and optionally Nvidia's Collective Communication Library (NCCL) installed on your system.
-
Download and Install MPI: Visit the official MPI website to download an appropriate MPI implementation for your system. Follow the installation instructions provided by the MPI vendor.
-
Verify MPI Installation: After installing MPI, verify its installation by opening a terminal or command prompt and running the following command:
mpiexec --version -
Install pylops-mpi: Once MPI is installed and verified, you can proceed to install
pylops-mpiviapip:pip install pylops-mpi -
(Optional) To enable the NCCL backend for multi-GPU systems, install
cupyandncclviapip:pip install cupy-cudaXx nvidia-nccl-cuXwith
X=11,12.
Alternatively, if the Conda package manager is used to setup the Python environment, steps 1 and 2 can be skipped and mpi4py can be installed directly alongside the MPI distribution of choice:
conda install -c conda-forge mpi4py X
with X=mpich, openmpi, impi_rt, msmpi. Similarly step 4 can be accomplished using:
conda install -c conda-forge cupy nccl
See the docs (Installation) for more information.
Run Pylops-MPI
Once you have installed the prerequisites and pylops-mpi, you can run pylops-mpi using the mpiexec command.
Here is an example on how to run a python script called <script_name>.py:
mpiexec -n <NUM_PROCESSES> python <script_name>.py
Example: A distributed finite-difference operator
The following example is a modified version of
PyLops' README_ starting
example that can handle a 2D-array distributed across ranks over the first dimension
via the DistributedArray object:
import numpy as np
from pylops_mpi import DistributedArray, Partition
# Initialize DistributedArray with partition set to Scatter
nx, ny = 11, 21
x = np.zeros((nx, ny), dtype=np.float64)
x[nx // 2, ny // 2] = 1.0
x_dist = pylops_mpi.DistributedArray.to_dist(
x=x.flatten(),
partition=Partition.SCATTER)
# Distributed first-derivative
D_op = pylops_mpi.MPIFirstDerivative((nx, ny), dtype=np.float64)
# y = Dx
y_dist = D_op @ x_dist
# xadj = D^H y
xadj_dist = D_op.H @ y_dist
# xinv = D^-1 y
x0_dist = pylops_mpi.DistributedArray(D_op.shape[1], dtype=np.float64)
x0_dist[:] = 0
xinv_dist = pylops_mpi.cgls(D_op, y_dist, x0=x0_dist, niter=10)[0]
Note that the DistributedArray class provides the to_dist class method that accepts a NumPy array as input and converts it into an instance of the DistributedArray class. This method is used to transform a regular NumPy array into a DistributedArray that is distributed and processed across multiple nodes or processes.
Moreover, the DistributedArray class provides also fundamental mathematical operations, such as element-wise addition, subtraction, multiplication, dot product, and an equivalent of the np.linalg.norm function that operate in a distributed fashion,
thus utilizing the efficiency of the MPI/NCC; protocols. This enables efficient computation and processing of large-scale distributed arrays.
Running Tests
The MPI test scripts are located in the tests folder.
Use the following command to run the tests:
mpiexec -n <NUM_PROCESSES> pytest tests/ --with-mpi
where the --with-mpi option tells pytest to enable the pytest-mpi plugin, allowing the tests to utilize the MPI functionality.
Similarly, to run the NCCL test scripts in the tests_nccl folder,
use the following command to run the tests:
mpiexec -n <NUM_PROCESSES> pytest tests_nccl/ --with-mpi
Documentation
The official documentation of Pylops-MPI is available here. Visit the official docs to learn more about pylops-mpi.
Contributors
- Rohan Babbar, rohanbabbar04
- Yuxi Hong, hongyx11
- Matteo Ravasi, mrava87
- Tharit Tangkijwanichakul, tharittk
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pylops_mpi-0.5.0.tar.gz.
File metadata
- Download URL: pylops_mpi-0.5.0.tar.gz
- Upload date:
- Size: 239.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dccca7a7283ce483ae850cf048c5428d9ef552741097138110f9082411989955
|
|
| MD5 |
ae7d617d58af556e618c007286169f66
|
|
| BLAKE2b-256 |
3afd060df0dc0080b18d979723d769ddbebdefdd61e3e3c6712e1959961a3450
|
File details
Details for the file pylops_mpi-0.5.0-py3-none-any.whl.
File metadata
- Download URL: pylops_mpi-0.5.0-py3-none-any.whl
- Upload date:
- Size: 286.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8d60667943622d73ffd2091ee8a6c2e062c35e0330810a437f0455f631d27db
|
|
| MD5 |
a4102e2c2cec55f9900f4afbcfc3827b
|
|
| BLAKE2b-256 |
935e61bfbfd0c19902ed1216b7f6d392532462e0f0e6ebbd9f700760c359d445
|