Skip to main content

No project description provided

Project description

qumat-qdp

GPU-accelerated quantum state encoding for Apache Mahout Qumat.

Installation

pip install qumat[qdp]

Requires one of:

  • NVIDIA GPU (CUDA path via QdpEngine)
  • AMD GPU with ROCm (AMD path via QdpEngine(backend="amd"))

Recommended environment setup:

python -m venv .venv
source .venv/bin/activate

# Install the GPU runtime for your platform first:
# - NVIDIA users: CUDA-compatible torch / triton
# - AMD users: ROCm-compatible torch / triton

uv sync --active --project qdp/qdp-python --group dev

Use --active so uv reuses the environment that already has the correct GPU runtime stack.

Usage

import qumat.qdp as qdp
import torch

# Initialize the unified QDP engine on GPU 0.
# Choose the backend explicitly.
engine = qdp.QdpEngine(device_id=0, backend="cuda")

# Encode data into quantum state
qtensor = engine.encode([1.0, 2.0, 3.0, 4.0], num_qubits=2, encoding_method="amplitude")

# Zero-copy transfer to PyTorch
tensor = torch.from_dlpack(qtensor)
print(tensor)  # Complex tensor on CUDA

AMD ROCm Usage

import qumat.qdp as qdp
import torch

# Unified AMD engine route
engine = qdp.QdpEngine(device_id=0, precision="float32", backend="amd")
qt = engine.encode(torch.randn(8, 4, device="cuda"), 2, "amplitude")
state = torch.from_dlpack(qt)
print(state.device, state.dtype)  # cuda:0, complex64

The public QdpEngine is a unified Python facade with explicit backend selection:

  • backend="cuda" routes to the Rust _qdp.QdpEngine
  • backend="amd" routes to the Triton AMD engine directly

See qdp/qdp-python/TRITON_AMD_BACKEND.md for Triton AMD setup and validation details.

Encoding Methods

Method Description
amplitude Normalize input as quantum amplitudes
angle Map values to rotation angles (one per qubit)
basis Encode integer as computational basis state
iqp IQP-style encoding with full ZZ entanglement
iqp-z IQP encoding with Z-only diagonal (no ZZ pairs)
phase Per-qubit phase product state via H⊗P(x_k)

Backend support boundary:

  • CUDA (QdpEngine): amplitude, angle, basis, iqp, iqp-z, phase
    • phase is currently only reachable on the CUDA path via host inputs (Python list / NumPy / file / CPU torch tensor). The Python extension's CUDA-tensor validation does not yet allowlist phase; cuda-resident torch tensors must use .cpu() first when targeting phase. Tracked as a follow-up.
  • AMD (QdpEngine(..., backend="amd")): amplitude, angle, basis, iqp, iqp-z, phase

Pipeline / loader dtype (Rust internals)

QuantumDataLoader and run_throughput_pipeline build a Rust PipelineConfig with an encoding plus a dtype (float32 vs float64). The prefetch thread can only keep an end-to-end float32 host batch for encodings whose GPU stack implements the batch f32 path (encode_batch_f32). Today that is amplitude only. Angle and basis still fall back to float64 for that loop until their batch f32 implementations exist. The eventual full matrix (e.g. angle/basis under supports_f32 once kernels are wired) is broader than what the pipeline uses today.

Input Sources

# Python list
qtensor = engine.encode([1.0, 2.0, 3.0, 4.0], 2, "amplitude")

# NumPy array
qtensor = engine.encode(np.array([[1, 2, 3, 4], [4, 3, 2, 1]]), 2, "amplitude")

# PyTorch tensor (CPU or CUDA)
qtensor = engine.encode(torch.tensor([1.0, 2.0, 3.0, 4.0]), 2, "amplitude")

# File formats
qtensor = engine.encode("data.parquet", 10, "amplitude")
qtensor = engine.encode("data.arrow", 10, "amplitude")
qtensor = engine.encode("data.npy", 10, "amplitude")
qtensor = engine.encode("data.pt", 10, "amplitude")

# Remote object storage URLs (requires building with remote-io feature)
qtensor = engine.encode("s3://my-bucket/data.parquet", 10, "amplitude")
qtensor = engine.encode("gs://my-bucket/data.parquet", 10, "amplitude")

Links

License

Apache License 2.0

Download files

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

Source Distribution

qumat_qdp-0.2.0rc2.tar.gz (339.4 kB view details)

Uploaded Source

Built Distributions

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

qumat_qdp-0.2.0rc2-cp312-cp312-manylinux_2_34_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

qumat_qdp-0.2.0rc2-cp311-cp311-manylinux_2_34_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

qumat_qdp-0.2.0rc2-cp310-cp310-manylinux_2_34_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

File details

Details for the file qumat_qdp-0.2.0rc2.tar.gz.

File metadata

  • Download URL: qumat_qdp-0.2.0rc2.tar.gz
  • Upload date:
  • Size: 339.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for qumat_qdp-0.2.0rc2.tar.gz
Algorithm Hash digest
SHA256 cf0b5e6019331766d461effd0d5e84e7a799646a7ab4d7289cdc539707426e64
MD5 bad4d827746f95e4931163245490e549
BLAKE2b-256 ebc7899b423fa282c363e667b98d32d97cd0c3a6a83cdcc054b89eed985e7406

See more details on using hashes here.

File details

Details for the file qumat_qdp-0.2.0rc2-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for qumat_qdp-0.2.0rc2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 cba6e0f71756f0a49a34b4e6b8d0594b5cb64476c7c53fb1fe0fb95ce420549d
MD5 962c235053a2428336b154b8c8e12e26
BLAKE2b-256 c7897697bce9885128cd7cddf298437495389cb3f67d54cfa2141881008a2a38

See more details on using hashes here.

File details

Details for the file qumat_qdp-0.2.0rc2-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for qumat_qdp-0.2.0rc2-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 bcb6c0ea06cabbfe0dfc2a6e0bc85db23d8ac4a754b05c5a0b2d5c81eb84a838
MD5 996e239bc2085f0c57fe953fe57a56ab
BLAKE2b-256 60dd2bded82cc4ab7e918ef48961ec69563e0dfab91b8172fc5be843df768a27

See more details on using hashes here.

File details

Details for the file qumat_qdp-0.2.0rc2-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for qumat_qdp-0.2.0rc2-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 55d7fa12c5d1d05371df27020ece07da582cd63df5cf3435cef364f9081e565a
MD5 f85be72d8425ab617cad4c15158f19d1
BLAKE2b-256 ca49c7a30fe111065fd78f6ab16be1655e948d61f9c9c6b2c479586c58885cf2

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