Skip to main content

Python library implementing linear operators with MPI

Project description

PyLops-MPI

PyPI version Build status Documentation status OS-support Slack Status DOI

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.

  1. 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.

  2. Verify MPI Installation: After installing MPI, verify its installation by opening a terminal or command prompt and running the following command:

    mpiexec --version
    
  3. Install pylops-mpi: Once MPI is installed and verified, you can proceed to install pylops-mpi via pip:

    pip install pylops-mpi
    
  4. (Optional) To enable the NCCL backend for multi-GPU systems, install cupy and nccl via pip:

    pip install cupy-cudaXx nvidia-nccl-cuX
    

    with 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylops_mpi-0.6.1.tar.gz (249.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pylops_mpi-0.6.1-py3-none-any.whl (307.3 kB view details)

Uploaded Python 3

File details

Details for the file pylops_mpi-0.6.1.tar.gz.

File metadata

  • Download URL: pylops_mpi-0.6.1.tar.gz
  • Upload date:
  • Size: 249.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pylops_mpi-0.6.1.tar.gz
Algorithm Hash digest
SHA256 ceda13e2e93ae69a38cbe6b56d78c7f5c28279dadb17e977889d47b618d9931d
MD5 fc9f8dfe94ceb5d61b30932a4c14eed6
BLAKE2b-256 174fa3a8a6c2361239152015ebc813bbbd1f2244ce2434517fad6d57bf38b3ec

See more details on using hashes here.

File details

Details for the file pylops_mpi-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: pylops_mpi-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 307.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pylops_mpi-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 eb87e5ecfb9b94b9b4f8bd0bb46a8c1d4cea76dc064ea2deb055f69f5ae4da59
MD5 95e6a043e7469da7d6b6cf2c8cd07188
BLAKE2b-256 b6f97e88495b56d287629ad621670f3d0d5aea1657cf5c6544ffebcaccc50b32

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page