Skip to main content

Sparse Approximation by the Generalized Soft-Min Penalty

Project description

sparse-approx-gsm

Python (+ optional CUDA) implementation of Sparse Approximation by the Generalized Soft-Min (GSM) Penalty — a sparse-recovery solver based on the Trimmed Lasso.

Solves: min ||Ax - y||_2 subject to ||x||_0 <= k

Tal Amir, Ronen Basri, Boaz Nadler — The Trimmed Lasso: Sparse Recovery Guarantees and Practical Optimization by the Generalized Soft-Min Penalty. Weizmann Institute of Science.

Install

From PyPI:

pip install sparse-approx-gsm

From source (with CUDA extension):

pip install pybind11 scikit-build-core cython numpy
NVCC=/path/to/nvcc
PYBIND11_DIR=$(python -c "import pybind11; print(pybind11.get_cmake_dir())")
CMAKE_ARGS="-DCMAKE_CUDA_COMPILER=$NVCC -Dpybind11_DIR=$PYBIND11_DIR -DCMAKE_CXX_COMPILER=/usr/bin/g++" \
  pip install --no-build-isolation . -v

From source (CPU only):

pip install --no-build-isolation .

Usage

from sparse_approx_gsm import sparse_approx_gsm, SparseApproxGSM, gsm

# High-level solver: min ||Ax - y||_2  s.t.  ||x||_0 <= k
x = sparse_approx_gsm(A, y, k, profile='normal')

# GSM function and gradient
mu, theta = gsm(z, k, gamma)

GPU Acceleration

Install CuPy for the matching CUDA version (e.g. pip install cupy-cuda12x), then pass a CuPy array to gsm() or use SparseApproxGSM(..., use_gpu=True).

When use_gpu=True, arrays are cached on the GPU and kept there throughout the solver loop, minimizing CPU-GPU data transfers.

What's New in v1.1.0

  • GPU transfer optimization: Immutable arrays (A, G, y, Aty) cached on GPU; solution vector and weights stay on GPU through the MM loop
  • Redundant computation elimination: GSM mu is cached from weight computation, avoiding duplicate GPU kernel launches
  • Cython acceleration: Fused FISTA kernels and OpenMP-parallelized utilities for the CPU fallback path
  • Module renamed: Import path is now sparse_approx_gsm (was gsm_python)

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

sparse_approx_gsm-1.1.0.tar.gz (2.7 MB view details)

Uploaded Source

File details

Details for the file sparse_approx_gsm-1.1.0.tar.gz.

File metadata

  • Download URL: sparse_approx_gsm-1.1.0.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for sparse_approx_gsm-1.1.0.tar.gz
Algorithm Hash digest
SHA256 304d2ab54ab94f55369a3439223b1f6cdfeb4b2d35693f684ea1652ff1f973ab
MD5 eb9fcfeef0817bef7e9433ae79393d25
BLAKE2b-256 01063f523b9ad2f0f9861f898aae03ff9595a6ec0be36454e12b59cf4c60ffb7

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